Kilka przykładów użycia funkcji obliczających punkty przecięcia linii i obiektów

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

Przykład 1:
(setq P1 (getpoint "Wskaż P1" ))
(setq P2 (getpoint "Wskaż P2" P1) )
(setq P3 (getpoint "Wskaż P3") )
(setq P4 (getpoint "Wskaż P4" P3) )
(setq Px(inters P1 P2 P3 P4 ))

Przykład1

; funkcja inters oblicza punkt przeciecia linii zdefiniowanych przez dwie pary punktów. ; jeśli przecięcie linii nie znajduje sie na liniach, a na ich przedłużeniach, konieczne jest użycie dodatkowego parametru, którego wartość powinna być równa nil.

;Przykład 2 (setq Px(inters P1 P2 P3 P4 ))
Przykład2
;Takie wyrażenie zwraca nil

;Przykład 3 (setq Px(inters P1 P2 P3 P4 nil))
;Takie wyrażenie zwraca współrzędne punktu Px

Przykład3

;Dla zobrazowania wstawiamy punt przecięcia linii.
(setq Interpoint (vlax-invoke-method *Model* 'AddPoint   (vlax-3d-point Px))) ; ZWCAD
(setq Interpoint (vlax-invoke-method *Model* 'AddPoint   (vlax-3d-point Px))) ; ZWCAD+

;Mamy również możliwość obliczania puntów przecięcia istniejących obiektów. Dla przykładu narysujmy dwa okręgi przecinające się na obwodzie.
;Funkcja IntersectWith zwrala listę współrzędnych punków przecięcia obiektów
; Prosimy Użytkownika o wskazanie Okręgów:
(setq Cir1(vlax-ename->vla-object(car(entsel "wskaż pierwszy element"))))
(setq Cir2(vlax-ename->vla-object(car(entsel "wskaż drugi element"))))
; pobieramy punkty przecięć (setq InterPoints(vlax-invoke-method Cir1 'IntersectWith Cir2 zcExtendNone ))
; Dla łatwieszego uwidocznienia działania rysujemy linię, łączącą te punkty
(setq InterPointsList(vlax-safearray->list(vlax-variant-value InterPoints)))
(setq LP1 (list (car InterPointsList)(cadr InterPointsList)(caddr InterPointsList)))
(setq LP2 (list (nth 3 InterPointsList)(nth 4 InterPointsList)(nth 5 InterPointsList)))
(setq TestLine(vlax-invoke-method *Model* 'AddLine (vlax-3d-point LP1 ) (vlax-3d-point LP) ))

Przykład4