e_CAD

[VBA-LISP] Błąd w obsłudze zbiorów wskazań w LISP z poziomu pliku VBA [rozwiązany]

Rekomendowane odpowiedzi

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 przez e_CAD

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.