?? 對(duì)象選擇集的交點(diǎn) vlisp 函數(shù).lsp
字號(hào):
;;;**************************************************************************
;;; No.26-3 求(LINE *POLYLINE ARC CIRCLE ELLIPSE)對(duì)象選擇集的交點(diǎn) VLisp 函數(shù)
;;;**************************************************************************
(defun c:test()
(setq sss (ssget '((0 . "LINE,*POLYLINE,ARC,CIRCLE,ELLIPSE")))
ptlst1 (th-delsame (getSSCurveInters sss))
;ptlst2 (LstDelSame ptlst1)
)
(princ ptlst1)
(princ (length ptlst1))
(princ)
)
;;;;刪除表中相同元素(保留一個(gè)),并返回新表(太過(guò)于精確,還有相同的項(xiàng)沒有刪除,遺漏,這與捕捉的精度有關(guān))
(defun LstDelSame (ptlst / x nl)
(foreach x ptlst
(if (not (member x nl));(vl-member-if predicate-function list)member 函數(shù)一樣
(setq nl (cons x nl));(vl-member-if-not predicate-function list)和 member 函數(shù)一致。
)
)
(setq nl (reverse nl))
nl
)
(defun th-delsame (pts / pl);(粗糙些,精確小,沒相同的項(xiàng)沒被刪除,沒遺漏)
(while pts
(setq p (car pts)
pts (cdr pts)
pts (vl-remove-if '(lambda (x) (equal x p 1e-10)) pts);可以修改精度1e-10,精度越高,重復(fù)的元素(沒被刪除)越多,反之越少。
pl (cons p pl)
)
)
(reverse pl)
)
(defun getSSCurveInters (ss1 / el aobj1 el1 aobj2 ipts pts obj n i )
(vl-load-com)
(setq i 0)
(setq n (sslength ss1))
(while (< i n)
(setq obj (vlax-ename->vla-object (ssname ss1 i)))
(setq el (cons obj el))
(setq i (+ i 1))
);end_while
(while el
(setq aobj1 (car el))
(if (setq el1 (cdr el))
(foreach aobj2 el1
(if (and (setq ipts (vla-intersectwith aobj1 aobj2 0))
(setq ipts (vlax-variant-value ipts))
(> (vlax-safearray-get-u-bound ipts 1) 0)
);end_and
(progn
(setq ipts (vlax-safearray->list ipts))
(while (> (length ipts) 0)
(setq pts (cons (list (car ipts) (cadr ipts) (caddr ipts)) pts)
ipts (cdddr ipts)
);end_setq
);end_while
);end_progn
);end_if
);end_foreach
);end_if
(setq el (cdr el))
);end_while
(setq pts pts)
);end_defun
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -