求助,点是否在点集内的判断出错。
我想要判断黄色PL线代表的柱子中心点是否在红色代表的轴线的交点上,显示的中心点的中标与轴线交点坐标是一致的,但LSP确认为不一致,请大侠指点一下。(defun Curveinters (en1 en2 / pl pts)
(setq pl(vlax-invoke (vlax-ename->vla-object en2) 'IntersectWith (vlax-ename->vla-object en1) acExtendNone))
(while pl
(setq pts (append pts (list (list (car pl) (cadr pl) (caddr pl))))
pl (cdr (cdr (cdr pl)))
)
)
pts
)
;;;曲线选择集交点
(defun ssinters (ss / pts en1 en2)
(while (> (sslength ss) 1)
(setq en1 (ssname ss 0))
(ssdel en1 ss)
(setq n (sslength ss))
(repeat n
(setq en2 (ssname ss (setq n (1- n))))
(setq pts (append pts (Curveinters en1 en2)))
)
)
pts
)
;;;点是否在点集内
(defun IsInPointList (p1 PL a)
(if(member t (mapcar '(lambda (b) (equal p1 b a)) PL))
t
nil
)
)
(defun c:gzdwjd ( / coluss n ent obj minpoint maxpoint pt1 dotess pts);
(vl-load-com)
(setvar "osmode" 0)
(setq coluss (ssget "X" '((0 . "LWPOLYLINE")(8 . "柱"))))
(setq n 0)
(repeat (sslength coluss)
(setq ent (ssname coluss n))
(setq obj (vlax-ename->vla-object ent))
(vla-GetBoundingBox obj 'minpoint 'maxpoint)
(setq minpoint (vlax-safearray->list minpoint))
(setq maxpoint (vlax-safearray->list maxpoint))
(setq pt1 (polar minpoint (angle minpoint maxpoint) (/ (distance minpoint maxpoint) 2)))
(setq dotess (ssget "c" minpoint maxpoint '((0 . "*line")(8 . "DOTE"))))
(setq pts (ssinters dotess))
(if (isinpointlist pt1 pts 0.001)
(progn
(princ "\n柱中心与轴线交点重合,OK!!!")
)
(progn
(princ "\n柱中心与轴线交点不重合,请核对!!!")
(entmake (list '(0 . "CIRCLE") (cons 10 pt1) (cons 40 500.0)))
)
);;end if
(setq n (+ 1 n))
);;end repeat
(setvar "osmode" 16383)
(princ)
);;;end defun
改判斷pt1與pts的距離
页:
[1]