Rysowanie prostych elementów na przykładzie symbolu gwintu

Efekt, który chcielibyśmy osiągnąć przedstawia poniższy rysunek

 rysowaniegwintu

 czyli klikamy jeden punkt, w nim zostanie wstawiony symbol gwintu.

; znak ";" oznacza komentarz, reszta linii nie jest interpretowana

(vl-load-com)
; wczytanie rozszerzenia VisualLISP. Jest to wymagane do programowania obiekowego wystarczy wywołać raz na początku programu

(defun C:M8 ()
; Utworzenie funkcji. C: przed nazwą oznacza, że zostaje zdefiniowane polecenie. W tym przypadku powoduje, że w ZWCADzie należy wpisać polecenie M8 by uruchomić funkcję

(setq *ZWCAD* (vlax-get-acad-object))
; Pobranie obieku aplikacji

(setq *Rysunek* (vla-get-activedocument *ZWCAD*))
; Pobranie aktualnego rysunku z obiektu aplikacji

(setq *Model* (vla-get-Modelspace *Rysunek*))
; Pobranie przestrzeni modelu z rysunku

(setq Punkt (getpoint "Wskaż punkt"))
; Użytkownik zostanie poproszony o wskazanie punku może go wskazać zarówno przez kliknięcie myszką w punkcie, jak i przez wpisanie współrzędnych z klawiatury. Funkcja zwraca listę 3-elementową zawierającą wspołrzędne podanego punktu

(setq Punkt (vlax-3d-point Punkt))
; Zamienia listę na obiekt typu Variant. Jest to potrzebne ponieważ funkcje VisualLiSP jako parametr wejściowy przyjmują punkt właście zdefiniowany jako variant.

(setq Kolko (vlax-invoke-method *Model* 'AddCircle Punkt 3.4))
; Dodanie okręgu do modelu. Jako parametry funkcji konieczne jest podanie punku środkowego (typu variant) i promienia.

(vlax-put-property Kolko 'Lineweight zcLnWt030)
; Ustawienie właściwości Lineweight na 0.30

(setq Luk (vla-AddArc *Model* Punkt 4 0.5 5.4 ))
; Podobnie jak okrąg można dodać też łuk. naeży jako parametry podać punkt środkowy, promień, kąt początkowy i końcowy w radianach.
; Warto zapamiętać, że konieczne jest podanie kątów, nie można podać np punktów początku i końca, choć oczywiście można napisać własną funkcję która mędzie obliczała kąty na podstawie punktów.

(setq L1 (vla-AddLine *Model* (vlax-3d-point (list 0 5 0)) (vlax-3d-point (list 0 -5 0))))
; Analogicznie rysujemy osie otworu podając punty początku i końca

(setq L2 (vla-AddLine *Model* (vlax-3d-point (list -5 0 0)) (vlax-3d-point (list 5 0 0))))
; W tym przykładzie narysowane linie będą przecinały się w początku układu ukłądu współrzędnych a nie w punkcie wskazanym przez Użytkownika

(setq P0 (vlax-3d-point (list 0 0 0)))
; metody obiektu można wywoływać na dwa sposoby dające ten sam efekt

(vla-move L1 P0 Punkt)
; przesunięcie linii z punktu 0,0,0 do punktu wskazanego przez Użytkownika
; lub

(vlax-invoke-method L2 'Move P0 Punkt)
; podobnie własności można ustawiać na dwa sposoby

(vla-put-color L1 30)
; lub

(vlax-put-property L2 'Color 30))

Wykonanie w ZWCAD 2015+LISP M8 2015

Wykonanie w ZWCAD ClassicLISP M8 Classic