e_CAD Opublikowano 5 Grudnia 2017 Zgłoś Opublikowano 5 Grudnia 2017 (edytowane) Znaleźliśmy błąd w ZWCAD 2017 i ZWCAD 2018 polegający na niepełnej obsłudze zbiorów wskazań w LISP z poziomu pliku VBA. OPIS BŁĘDU: Przy tworzeniu zbioru wskazań w LISP z poziomu programu VBA przy pomocy komendy SENDCOMMAND, nie są pamiętane wszystkie obiekty zbioru wskazań, a jedynie ostatni z nich. Problem ten nie istniał w poprzednich wersjach ZWCAD i w innych platformach CAD również go nie ma. PRZYKŁAD SYMULUJĄCY BŁĄD: Wczytać plik: zbiorywskazan.zvb Wczytać i uruchomić plik: start.lsp OPIS PRZYKŁADU: Jeżeli uruchomi się procedurę "Test" z poziomu edytora VBA (F5) to wszystko jest OK., linie przesuwają się i wyświetla się komunikat "3". Jeżeli natomiast uruchomi się (dla testu wcześniej plik VBA musi być załadowany) plik "start.lsp" to przesuwa się tylko 1 linia i wyświetla się komunikat "1". I to jest istota problemu, że przy uruchamianiu/wywoływaniu procedury z pliku zewnętrznego ZWCAD 2017/2018 jakby zeruje zbiory wskazań w LISP. Jeżeli uruchomi się natomiast ten sam identyczny przykład np.: w ZWCAD+ to problemu nie ma i w obu przypadkach linie są przesuwane i zwracany jest komunikat "3". PLIKI Z PRZYKŁADEM: start.lsp (vl-vbarun "Test") zbiorywskazan.zvb Function Rysuj_Linie_1() As ZcadSelectionSet Dim L As ZcadLine Dim P1(0 To 2) As Double Dim P2(0 To 2) As Double P1(0) = 0: P1(1) = 0: P1(2) = 0 P2(0) = 100: P2(1) = 10: P2(2) = 0 Set L = ThisDrawing.ModelSpace.AddLine(P1, P2) End Function Function Rysuj_Linie_2() As ZcadSelectionSet Dim L As ZcadLine Dim P1(0 To 2) As Double Dim P2(0 To 2) As Double P1(0) = 0: P1(1) = 0: P1(2) = 0 P2(0) = 100: P2(1) = 20: P2(2) = 0 Set L = ThisDrawing.ModelSpace.AddLine(P1, P2) End Function Function Rysuj_Linie_3() As ZcadSelectionSet Dim L As ZcadLine Dim P1(0 To 2) As Double Dim P2(0 To 2) As Double P1(0) = 0: P1(1) = 0: P1(2) = 0 P2(0) = 100: P2(1) = 30: P2(2) = 0 Set L = ThisDrawing.ModelSpace.AddLine(P1, P2) End Function Sub Test() ThisDrawing.SendCommand "(setq z (ssadd))" + vbCr Call Rysuj_Linie_1 ThisDrawing.SendCommand "(ssadd (entlast) z)" + vbCr Call Rysuj_Linie_2 ThisDrawing.SendCommand "(ssadd (entlast) z)" + vbCr Call Rysuj_Linie_3 ThisDrawing.SendCommand "(ssadd (entlast) z)" + vbCr ThisDrawing.SendCommand "(command " + Chr(34) + "_move" + Chr(34) + " z " + Chr(34) + "" + Chr(34) + " " + Chr(34) + "0,0" + Chr(34) + " " + Chr(34) + "100,100" + Chr(34) + " " + Chr(34) + "" + Chr(34) + ") " ' + vbCr ThisDrawing.SendCommand "(alert(itoa(sslength z)))" + vbCr End Sub Edytowane 5 Grudnia 2017 przez e_CAD
kruszynski Opublikowano 6 Grudnia 2017 Zgłoś Opublikowano 6 Grudnia 2017 Dziękuję za zgłoszenie. Po konsulacjach okazało się, że w SP1 powinno to już działać.
e_CAD Opublikowano 7 Grudnia 2017 Autor Zgłoś Opublikowano 7 Grudnia 2017 Potwierdzam, że w wersji ZWCAD 2018 vernum = "2017.12.05(24685)_x64" problem został już wyeliminowany.
Rekomendowane odpowiedzi