Rysowanie równoległoboku

W przypadku, gdy chcemy narysować prostokąt lub równoległobok ale nierównoległy do osi układu współrzędnych musimy wykonać trzy operacje:

1. Narysować prostokąt
2. Obrócić
3. Rozciągnąć

Dzięki temu przykładowi  wystarczy wskazać trzy punkty. jak na załączonym poniżej przykładzie

 rysowanierownolegloboku

(vl-load-com)
(setq *ZWCAD* (vlax-get-acad-object))
(setq *Rysunek* (vla-get-activedocument *ZWCAD*))

(defun C:rownoleglobok ( / )
;----------------------------------------------------------
;Funkcja pozwala na rysowanie rąbu przez wskazanie trzech punktów
;Argumenty: brak
;Wynik: brak
;----------------------------------------------------------

(setq *Model* (vla-get-Modelspace *Rysunek*))

(setq P1 (getpoint "Wskaż pierwszy narożnik")) ; współrzędne 3D
(setq P2 (getpoint P1 "Wskaż drugi narożnik"))
(setq P3 (getpoint P1 "Wskaż trzeci narożnik"))

(setq P4 (list (+ (car P3) (-(car P2)(car P1)) )
(+ (cadr P3) (-(cadr P2)(cadr P1))))) ; Współrzędne 2D

(setq P1 (trans P1 1 0 ) ; konwersja ze współrzędnych lokalnych na globalne
P2 (trans P2 1 0 )
P3 (trans P3 1 0 )
P4 (trans P4 1 0 )) ; prosze zauważyć.że konwersję współrzędnych można dokonać również dla punktów 2D

(setq LPts (list (car P1)(cadr P1)
(car P2)(cadr P2)
(car P4)(cadr P4)
(car P3)(cadr P3) ) )


(setq Vpts (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble (cons 0 (1- (length Lpts)))) Lpts ) ))

(setq RabObj(vlax-invoke-method *Model* 'addlightweightpolyline Vpts))
(vlax-put-property RabObj 'Closed :vlax-true )

Wykonanie w ZWCAD 2015+LISP Rownoleglobok 2015

Wykonanie w ZWCAD ClassicLISP Rownoleglobok Classic