VBA i LISP - zamykanie rysunków, wybór i sortowanie obiektów


Rekomendowane odpowiedzi

Opublikowano

witam,

w jaki sposób zamykać rysunki i program z VBA? Robię sobie program który podłącza się przez ole , otwiera rysunek ale nie radzi już z zamykaniem..w czym tkwi problem?:

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


       Dim oZwcad As ZwCAD.ZwcadApplication
       oZwcad = CreateObject("Zwcad.Application")
       MsgBox("tworze obiekt zwcada")
       oZwcad.Application.Documents.Open("c:\ole.dwg")
       MsgBox("document " & oZwcad.Caption & " is active.")
       oZwcad.Application.Activedocument.Close(False)
       oZwcad.Quit()





   End Sub

Ciągle wiesza mi się na tym zamykaniu.

wewnątrz zwcada w vba działa dobrze.

Acha, chodzi o Zwcad 2008i

Opublikowano
witam,

Ciągle wiesza mi się na tym zamykaniu.

wewnątrz zwcada w vba działa dobrze.

Acha, chodzi o Zwcad 2008i

Spróbowałem sobie jeszcze zainstalować testowa wersję zwcada 2010 - i tu o dziwo wszystko działa dobrze. Pewnie jakaś niedoróbka w wersji 2008...można coś z tym zrobić?

Opublikowano
Witam

Sprawdziliśmy ten skrypt i rzeczywiście jest taki problem.

W wersji 2008 VBA nie było jeszcze dopracowane.

Dziękuję za sprawdzenie, już w kilku miejscach natrafiłem na podobne problemy...

Natomiast w wersji 2010 też mam problem - o ile w samym zwcadzie wywołanie komendy w stylu:

 ssetObj.Select(mode, , , 0, "text")
       For i = 0 To ssetObj.Count - 1
           If IsNumeric(ssetObj.Item(i).TextString) Then
               total = total + ssetObj.Item(i).TextString
               oZwcad.Activedocument.Utility.Prompt(ssetObj.Item(i).TextString & vbCrLf)
           End If
       Next i

dziaął poprawnie to przy podłączaniu się przez ole wygląda na to że nie działa filtrowanie - dostaję błąd:

Public member 'TextString' on type 'IIcadLine' not found.

Czyli zaznacza linie a miał tylko tekst...

Opublikowano

Proszę te dane filtrów wpisać do tablicy:

Dim FilterType(0) As Integer

Dim FilterData(0) As Variant

FilterType(0) = 0

FilterData(0) = "Text"

ssetObj.Select mode, , , FilterType, FilterData

P.S.

Pisane z głowy czyli z niczego, mogą być literówki

Opublikowano
Proszę te dane filtrów wpisać do tablicy:

Dim FilterType(0) As Integer

Dim FilterData(0) As Variant

FilterType(0) = 0

FilterData(0) = "Text"

ssetObj.Select mode, , , FilterType, FilterData

P.S.

Pisane z głowy czyli z niczego, mogą być literówki

Wpisywałem do tablicy, wpisywąłem bezpośrednoi i ciągle wychodzi na to że mam zaznaczone linie. ale może przejrzę sobie czy się coś nei pozmieniało w stosunku do 2008i, bo moze tam jest problem.

Opublikowano
Proszę te dane filtrów wpisać do tablicy:

Wychodzi na to że w 2010 sytuacja z VBA poprawiła się ale częściowo - przy dostępie z zewnątrz przez OLE nie działa filtrowanie selekcji, zaznacza wszystko jak leci nie patrząc na zdefiniowane w tablicach filtry.

Opublikowano

Witam

Konsultowałem tą sprawę z producentami ZWCADa i odpowiedzieli że poprawy format powinien być następujący:

ssetObj.Select mode, point1, point2, 0, "Text"

Różnicą jest , że tutaj jest bez nawiasów i tak powinno być. Może też mieć zanczenie że Text jest z dużej litery.

Opublikowano
Witam

Konsultowałem tą sprawę z producentami ZWCADa i odpowiedzieli że poprawy format powinien być następujący:

ssetObj.Select mode, point1, point2, 0, "Text"

Różnicą jest , że tutaj jest bez nawiasów i tak powinno być. Może też mieć znaczenie że Text jest z dużej litery.

Ale tu nie chodzi o to że mam problem z formatem polecenia.

Wcześniej pisałem że jest problem z zamykaniem plików jeżeli łącze się przez OLE z własnego programu (pisze w VS 2008 express). W zwcad 2010 faktyczne zostało to poprawione, ale nie działają inne rzeczy dalej - patrz właśnie filtrowanie zaznaczenia.

o ile w VBA w samym zwcad działa dobrze i filtruje, to jeżeli chcę to zrobić z zewnątrz to już się nie da, ręce opadają. Spróbuję zrobić wywołanie makra które mi zrzuci potrzebne dane do pliku tekstowego, no ale to już taka proteza...

  • 4 tygodnie później...
Opublikowano

Witam,

proszę dopisać do bug-list kolejną rzecz, a mianowicie błędnie działającą funkcję visual-lisp:

vl-sort-i.

Funkcja ta działa prawidłowo tylko w przypadku gdy sortowana lista ma więcej niż jeden element. W przypadku jednego elementu, zamiast zwracać (0), zwraca sam element.

Na przykład:

lista: ("jeden")

(vl-sort-i '("jeden") '<)

zwraca: ("jeden")

a powinien (0)

Nie odpowiadam na pytania typu "po co sortować listę jednoelementową?".

Taki przypadek może wystąpić i również powinien działać!

W AutoCAD ta funkcja działa bez zarzutu i zwraca, w wyżej opisanym przypadku, wartość prawidłową.

pozdrawiam

Opublikowano

Kolejna niezgodność z AutoCAD, to różnica w Model - Layout.

Aby to sprawdzić, wystarczy narysować dowolny obiekt np. prostokąt w Modelu, a następnie przejść na Layout, gdzie nie ma rzutni, lub nawet jest rzutnia i wpisać polecenie:

(ssget "_x" (list (cons 0 "LWPOLYLINE")))

Jak widać wynik = NIL

ZwCAD w ogóle nie widzi obiektów utworzonych w Modelu, do czasu stworzenia rzutni i aktywowania jej!

W AutoCAD istnieje cały czas do wszystkich narysowanych obiektów, bez względu czy użytkownik jest w Modelu czy Rzutni (bez jej aktywowania, a nawet jak nie ma Rzutni w ogóle).

Jest to kolejna rozbieżność między tymi programami, która utrudnia tworzenie oprogramowania uniwersalnego na systemy CAD.

pozdrawiam

Opublikowano

Witam

Przekazaliśmy problemy, które Pan zgłosił producentom ZWCADa. Rozwiązanie jest aktualnie opracowywane. W przyszłości jeśli interesowałby Pana status problemu, łatwiej będzie nam rozpoznać o co chodzi, jeśli posłuży się Pan numerem problemu. W przypadku ssget numer błędu to: 11761, natomiast w sprawie problemu z sortowaniem jednoelementowej listy, numer błędu to 12514

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.