怎么才能像刀一样切开封闭的多段线?
最近用到分割多段线的功能,看似简单却在使用break时,总是断在不该断的地方,如图,高手帮忙看怎么处理?切开前多段线是一封闭线,切开后分成两半也是封闭线。中间不拐弯,切开一条线也成。
好吧,写了一个,难点我觉得是找一个点,这个点能位于闭合圈内
(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
(setqregion1 (car
(vlax-safearray->list
(vlax-variant-value
(vla-addregion
*mospace*
(Xr:list->Obj-Array vlalst)
)
)
)
)
)
(setqCentroid (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))
(setqregion2 (car
(vlax-safearray->list
(vlax-variant-value
(vla-addregion
*mospace*
(Xr:list->Obj-Array vlalst)
)
)
)
)
)
(vlax-invoke-method region1 'Boolean 2 region2)
(setqCentroid (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)
(setqarraySpace
(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
)
)
)
)
)
本帖最后由 阿然 于 2013-1-8 00:00 编辑
用boundary,然后点中间两个点不行么?
(command "-boundary" (getpoint) (getpoint) "")
阿然 发表于 2013-1-7 23:52 static/image/common/back.gif
用boundary,然后点中间两个点不行么?
图面没那么干净,还有其他杂质在。
soly2006 发表于 2013-1-7 23:58 static/image/common/back.gif
图面没那么干净,还有其他杂质在。
那就是说要选中闭合线和你的刀,然后生成两个? 阿然 发表于 2013-1-8 00:00 static/image/common/back.gif
那就是说要选中闭合线和你的刀,然后生成两个?
1,boundary
2、按钮->选择两个实体
3、按钮->点两点
4、删除原线和切割线
5、附属性和图层
------------------这么多步骤,你让lisp情何以堪。
呵呵,谢谢关注. (command "-boundary" "a" "b" "n" (ssget) "" "" (getpoint) (getpoint) "")
哈哈哈哈,很偷懒的做法 阿然 发表于 2013-1-8 01:15 static/image/common/back.gif
好吧,写了一个,难点我觉得是找一个点,这个点能位于闭合圈内
就是这效果,感谢。 剩下的就是加图层信息和扩展码。
这分给你。
哈哈,能不能进一步:切割多个图元并成两个块(组) 加载了没有其效果演示的那样
页:
[1]
2