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


jureko
 Share

Recommended Posts

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

Link to comment
Share on other sites

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ć?

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

  • 4 weeks later...

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share