;;; Rysowanie równoległoboku przez wskazanie trzech punktów
;;; zwcad.pl
;;; Polecenie do uruchomienia skryptu LISP: Rownoleglobok
;;; Opis: https://www.zwcad.pl/materialy-edukacyjne/kurs-lisp/przyklady-lisp/120-rysowanie-rownolegloboku-przez-wskazanie-trzech-punktow.html


(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 )
)