用可用坐标替换(setq p4(getpoint“\n Point inside”))。
我看到一个代码(由李)找到一个点里面,但找不到它,这是我用的。
- (defun c:test ( / 3DF p1 p2 p3 p4 n z)
- (if (and
- (setq 3DF (ssget "_X" '((0 . "3DFACE"))))
- (setq p4 (getpoint "\nPoint inside"))
- )
- (progn
- (setq n (sslength 3DF))
- (while (and (not z) (> n 0))
- (setq e1 (entget (ssname 3DF (setq n (1- n)))))
- (setq z (p_inside))
- )
- (if z (alert (strcat "z = " (rtos z 2 2)))
- (alert "Point outside")
- )
- )
- (alert "3Dface not found in dwg")
- )
- )
- (defun p_inside (/ ang_p1p ang_p1_2 ang_p1_3 ang_p2p ang_p2_1 ang_p2_3
- ang_p3p ang_p3_1 ang_p3_2 ang_p1- ang_p1+ ang_p2- ang_p2+
- ang_p3- ang_p3+ COMPR)
- (setq p1 (cdr (assoc 10 e1)))
- (setq p2 (cdr (assoc 11 e1)))
- (setq p3 (cdr (assoc 12 e1)))
- (setq ang_p1p (angle p1 p4))
- (setq ang_p1_2 (angle p1 p2))
- (setq ang_p1_3 (angle p1 p3))
- (setq ang_p2p (angle p2 p4))
- (setq ang_p2_1 (angle p2 p1))
- (setq ang_p2_3 (angle p2 p3))
- (setq ang_p3p (angle p3 p4))
- (setq ang_p3_1 (angle p3 p1))
- (setq ang_p3_2 (angle p3 p2))
- (setq ang_p1- (min ang_p1_2 ang_p1_3))
- (setq ang_p1+ (max ang_p1_2 ang_p1_3))
- (setq ang_p2- (min ang_p2_1 ang_p2_3))
- (setq ang_p2+ (max ang_p2_1 ang_p2_3))
- (setq ang_p3- (min ang_p3_1 ang_p3_2))
- (setq ang_p3+ (max ang_p3_1 ang_p3_2))
- (setq COMPR 0)
- (if (and
- (< ang_p1- (/ pi 2))
- (> (- ang_p1+ ang_p1-) pi)
- )
- (progn
- (if
- (or
- (> ang_p1p ang_p1+)
- (< ang_p1p ang_p1-)
- )
- (setq COMPR (1+ COMPR))
- )
- )
- )
- (if (and
- (< ang_p2- (/ pi 2))
- (> (- ang_p2+ ang_p2-) pi)
- )
- (progn
- (if
- (or
- (> ang_p2p ang_p2+)
- (< ang_p2p ang_p2-)
- )
- (setq COMPR (1+ COMPR))
- )
- )
- )
- (if (and
- (< ang_p3- (/ pi 2))
- (> (- ang_p3+ ang_p3-) pi)
- )
- (progn
- (if
- (or
- (> ang_p3p ang_p3+)
- (< ang_p3p ang_p3-)
- )
- (setq COMPR (1+ COMPR))
- )
- )
- )
- (if (and (> ang_p1p ang_p1-) (< ang_p1p ang_p1+)) (setq COMPR (1+ COMPR)))
- (if (and (> ang_p2p ang_p2-) (< ang_p2p ang_p2+)) (setq COMPR (1+ COMPR)))
- (if (and (> ang_p3p ang_p3-) (< ang_p3p ang_p3+)) (setq COMPR (1+ COMPR)))
- (if (= COMPR 3)
- (progn
- (setq p5 (list (car p4) (cadr p4) (+ (caddr p4) 1.0)))
- (setq z (caddr (cal "z=ilp(p4,p5,p1,p2,p3)")))
- )
- )
- z
- )
- (if (not (member "geomcal.arx" (arx))) (arxload "geomcal"))
|