好吧,写了一个,难点我觉得是找一个点,这个点能位于闭合圈内
- (vl-load-com)
- (setvar "cmdecho" 0)
- (setq *AcadDoc* (vla-get-ActiveDocument (vlax-get-Acad-Object)))
- (setq *MoSpace* (vla-get-ModelSpace *AcadDoc*))
- (defun c:tt (/ ss vlalst ss1 Centroid region1 region2)
- (if (and (setq ss (ssget '((0 . "LWPOLYLINE"))))
- (= (sslength ss) 2)
- )
- (progn
- (vla-startundomark *acaddoc*)
- (setq vlalst (lm:ss->vla ss))
- (if (member T (mapcar 'vlax-curve-isclosed vlalst))
- (progn
- (setq region1 (car
- (vlax-safearray->list
- (vlax-variant-value
- (vla-addregion
- *mospace*
- (Xr:list->Obj-Array vlalst)
- )
- )
- )
- )
- )
- (setq Centroid (vlax-safearray->list
- (vlax-variant-value
- (vlax-get-property region1 'Centroid)
- )
- )
- )
- (command "-boundary" "A" "B" "N" SS "" "" Centroid "")
- (setq ss1 (ssget "L"))
- (setq vlalst (lm:ss->vla ss1))
- (setq region2 (car
- (vlax-safearray->list
- (vlax-variant-value
- (vla-addregion
- *mospace*
- (Xr:list->Obj-Array vlalst)
- )
- )
- )
- )
- )
- (vlax-invoke-method region1 'Boolean 2 region2)
- (setq Centroid (vlax-safearray->list
- (vlax-variant-value
- (vlax-get-property region1 'Centroid)
- )
- )
- )
- (command "-boundary" "A" "B" "N" SS "" "" Centroid "")
- (vla-erase region1)
- (command "_.erase" ss "")
- (setq ss nil)
- (setq ss1 nil)
- (princ)
- )
- (progn
- (princ "\n没有闭合线")
- (princ)
- )
- )
- (vla-endundomark *acaddoc*)
- )
- (progn
- (princ "\n只能选择2条多义线")
- (princ)
- )
- )
- )
- (defun Xr:list->Obj-Array (objList / arraySpace sArray)
- (setq arraySpace
- (vlax-make-safearray
- vlax-vbObject ; 元素类型
- (cons 0
- (1- (length objList))
- ) ; 数组维数
- )
- )
- (setq sArray (vlax-safearray-fill arraySpace objList))
- )
- (defun LM:ss->vla (ss / i l)
- ;; ?Lee Mac 2010
- (if ss
- (repeat (setq i (sslength ss))
- (setq
- l (cons (vlax-ename->vla-object (ssname ss (setq i (1- i))))
- l
- )
- )
- )
- )
- )
|