封闭多段线智能修剪
工作中经常碰到要对封闭多段线区域进行修剪,修剪后还是保持为封闭多段线,请各位高手多指教这样稳妥一点,但是有“无效的选项关键字”
(defun c:tt(/ md->3d a en1 en2 pt ss v)
(defun md->3d(l) ;_by caoyin
(if (> (length l) 3)
(cons (list (car l) (cadr l) (caddr l))
(md->3d (cdddr l)))
(list l)))
(setq en1 (car (entsel "\n选择截断线:"))
en2 (car (entsel "\n选择被截断:"))
a (md->3d (vlax-invoke (vlax-ename->vla-object en1)
"intersectwith"
(vlax-ename->vla-object en2)
acextendnone))
a (* 0.5
(+ (vlax-curve-getparamatpoint en1 (car a))
(vlax-curve-getparamatpoint en1 (last a))))
pt(vlax-curve-getpointatparam en1 a)
a (fix a)
v (mapcar '-
(vlax-curve-getpointatparam en1 a)
(vlax-curve-getpointatparam en1 (1+ a)))
v (mapcar '(lambda (x) (/ x (distance '(0 0 0) v) 1.)) v)
v (mapcar '(lambda (x) (* x 10))
(vl-list* (- (cadr v)) (car v) (cddr v)))
ss(ssadd)
ss(ssadd en1 ss)
ss(ssadd en2 ss))
(if(and (bpoly (mapcar '+ pt v) ss '(1 0))
(bpoly (mapcar '- pt v) ss '(1 0)))
(progn (entdel en1)
(entdel en2)
(entdel (car (entsel "\n选择需删除:")))))
(princ))
boundary命令可以么? 选取红色多段线线对紫色封闭多段线进行修剪 交点处相互打断再生成两个面域即可 bpoly
院长厉害,可惜没有源码 wanhongron 发表于 2024-1-15 22:41
院长厉害,可惜没有源码
院长说了 用 bpoly红线两边各用一次 然后删除原多段线 xyp1964 发表于 2024-1-15 21:37
bpoly
老大无所不能 试试
(defun c:tt(/ md->3d a en1 en2 pt v x)
(defun md->3d(l) ;_by caoyin
(if (> (length l) 3)
(cons (list (car l) (cadr l) (caddr l))
(md->3d (cdddr l)))
(list l)))
(setq en1 (vlax-ename->vla-object (car (entsel "\n选择截断线:")))
en2 (vlax-ename->vla-object (car (entsel "\n选择被截断:")))
a (md->3d (vlax-invoke en1 "intersectwith" en2 acextendnone))
a (* 0.5
(+ (vlax-curve-getparamatpoint en1 (car a))
(vlax-curve-getparamatpoint en1 (last a))))
pt(vlax-curve-getpointatparam en1 a)
a (fix a)
v (mapcar '-
(vlax-curve-getpointatparam en1 a)
(vlax-curve-getpointatparam en1 (1+ a)))
v (mapcar '(lambda (x) (/ x (distance '(0 0 0) v) 1.)) v)
v (mapcar '(lambda (x) (* x 10))
(vl-list* (- (cadr v)) (car v) (cddr v))))
(if(and (bpoly (mapcar '+ pt v))
(bpoly (mapcar '- pt v)))
(progn (entdel en1)
(entdel en2)
(entdel (car (entsel "\n选择需删除:"))))))