|
VBA i LISP - zamykanie rysunków, wybór i sortowanie obiektów |
| Autor |
Wiadomość |
jureko
Dołączył: 20 Cze 2008 Posty: 20 Skąd: Kraków
|
Wysłany: Czw Kwi 08, 10 15:00 VBA i LISP - zamykanie rysunków, wybór i sortowanie obiektów
|
|
|
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?:
| Kod: |
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 |
|
|
|
 |
jureko
Dołączył: 20 Cze 2008 Posty: 20 Skąd: Kraków
|
Wysłany: Pią Kwi 09, 10 12:12 Re: zamykanie zwcad z VBA
|
|
|
| jureko napisał/a: | 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ć? |
|
|
|
 |
dmatusz3
Site Admin
Pomógł: 22 razy Dołączył: 20 Sty 2008 Posty: 606
|
Wysłany: Pią Kwi 09, 10 12:20
|
|
|
W poniedziałek postaramy się zrobić testy skryptu.
Pozdrawiam |
|
|
|
 |
kruszynski
Pomógł: 16 razy Dołączył: 02 Sty 2009 Posty: 286
|
Wysłany: Pon Kwi 12, 10 07:23
|
|
|
Witam
Sprawdziliśmy ten skrypt i rzeczywiście jest taki problem.
W wersji 2008 VBA nie było jeszcze dopracowane. |
|
|
|
 |
jureko
Dołączył: 20 Cze 2008 Posty: 20 Skąd: Kraków
|
Wysłany: Wto Kwi 13, 10 11:41
|
|
|
| kruszynski napisał/a: | 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:
| Kod: | 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:
| Kod: | | Public member 'TextString' on type 'IIcadLine' not found. |
Czyli zaznacza linie a miał tylko tekst... |
|
|
|
 |
kruszynski
Pomógł: 16 razy Dołączył: 02 Sty 2009 Posty: 286
|
Wysłany: Wto Kwi 13, 10 12:13
|
|
|
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 |
|
|
|
 |
jureko
Dołączył: 20 Cze 2008 Posty: 20 Skąd: Kraków
|
Wysłany: Wto Kwi 13, 10 12:51
|
|
|
| kruszynski napisał/a: | 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. |
|
|
|
 |
jureko
Dołączył: 20 Cze 2008 Posty: 20 Skąd: Kraków
|
Wysłany: Czw Kwi 15, 10 14:54
|
|
|
| kruszynski napisał/a: | 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. |
|
|
|
 |
kruszynski
Pomógł: 16 razy Dołączył: 02 Sty 2009 Posty: 286
|
Wysłany: Pią Kwi 23, 10 12:42
|
|
|
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. |
|
|
|
 |
jureko
Dołączył: 20 Cze 2008 Posty: 20 Skąd: Kraków
|
Wysłany: Pią Kwi 30, 10 10:21
|
|
|
| kruszynski napisał/a: | 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... |
|
|
|
 |
Assgarth
programista
Pomógł: 2 razy Dołączył: 26 Sty 2009 Posty: 120 Skąd: Poznań
|
Wysłany: Wto Maj 25, 10 08:05 Kolejne błędne działanie funkcji
|
|
|
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 |
|
|
|
 |
Assgarth
programista
Pomógł: 2 razy Dołączył: 26 Sty 2009 Posty: 120 Skąd: Poznań
|
Wysłany: Wto Maj 25, 10 08:33 Jaki w tym cel?????????????
|
|
|
| Post został ukryty, ponieważ zawierał reklamy, lub (i) był bez treści merytorycznej |
|
|
|
 |
Assgarth
programista
Pomógł: 2 razy Dołączył: 26 Sty 2009 Posty: 120 Skąd: Poznań
|
Wysłany: Wto Maj 25, 10 08:41 Vports
|
|
|
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 |
|
|
|
 |
kruszynski
Pomógł: 16 razy Dołączył: 02 Sty 2009 Posty: 286
|
Wysłany: Sro Maj 26, 10 09:31
|
|
|
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 |
|
|
|
 |
|
|