马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 newer 于 2016-10-12 19:27 编辑
(defun c:XDTB_PlineBrk (/ e e2 e3 gr p1 p2 ss x y)
(xdrx_begin)
(xdrx_sysvar_push '("osmode" 1))
(if (and
(setq e (car (xdrx_entsel "\n拾取封闭的多段线<退出>:" '((0 . "*POLYLINE")
(-4 . "&=")
(70 . 1)
)
)
)
)
(setq p1 (getpoint "\n断开起始点<退出>:"))
(xdrx_point_ison p1 e)
(setq p2 (getpoint p1 "\n断开结束点<退出>:"))
(xdrx_point_ison p2 e)
)
(progn
(xdrx_entity_copy e)
(setq e2 (entlast))
(xdrx_line_make p1 p2)
(setq e3 (entlast))
(setq ss (xdrx_curve_getsplitcurves e p1 p2)
ss (ssadd e3 ss)
ss (xdrx_geom_searchregions ss 0)
)
(xdrx_entity_matchprop e2 ss)
(setq gr (mapcar
'(lambda (x)
(xdrx_polyline_compress x t)
(list (xdrx_getpropertyvalue x "area") x)
)
(xdrx_pickset->ents ss)
)
)
(setq gr (vl-sort gr '(lambda (x y)
(> (car x) (car y))
)
)
)
(entdel (cadar gr))
(entdel e2)
)
)
(xdrx_sysvar_pop)
(xdrx_end)
(princ)
)
另外一个版本:
(defun c:XDTB_PlineBrk (/ dis1 dis2 e e1 e2 gsub1 gsub2 p1 p2 pa1 pa2 tmp
tmp1 tmp2
)
(xdrx_begin)
(xdrx_sysvar_push '("osmode" 1))
(if (and
(setq e (car (xdrx_entsel "\n拾取封闭的多段线<退出>:" '((0 . "*POLYLINE")
(-4 . "&=")
(70 . 1)
)
)
)
)
(setq p1 (getpoint "\n断开起始点<退出>:"))
(xdrx_point_ison p1 e)
(setq p2 (getpoint p1 "\n断开结束点<退出>:"))
(xdrx_point_ison p2 e)
)
(progn
(mapcar
'set
'(p1 p2)
(mapcar
'car
(xdrx_points_sortoncurve e (list p1 p2))
)
)
(setq dis1 (xdrx_curve_getdistatpoint e p1)
dis2 (xdrx_curve_getdistatpoint e p2)
tmp1 (xdrx_curve_getpointatdist e (/ (+ dis1 dis2) 2.0))
tmp2 (xdrx_curve_getpointatdist e (/ (+ dis2
(xdrx_getpropertyvalue e "length")
) 2.0
)
)
gsub1 (xd::curve:getsub e p1 p2 tmp1)
gsub2 (xd::curve:getsub e p1 p2 tmp2)
)
(setq e1 (xdge::entity:make gsub1)
e2 (xdge::entity:make gsub2)
)
(xdrx_entity_setproperty (list e1 e2) "closed" t)
(xdrx_entity_matchprop e (list e1 e2))
(xdrx_object_swapid e e1)
(entdel e1)
)
)
(xdrx_sysvar_pop)
(xdrx_end)
(princ)
)
|