wanhongron 发表于 2024-1-15 20:54:00

封闭多段线智能修剪

工作中经常碰到要对封闭多段线区域进行修剪,修剪后还是保持为封闭多段线,请各位高手多指教

x_s_s_1 发表于 2024-1-17 10:20:26

这样稳妥一点,但是有“无效的选项关键字”
(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))

lxl217114 发表于 2024-1-16 07:25:03

boundary命令可以么?

wanhongron 发表于 2024-1-15 20:55:16

选取红色多段线线对紫色封闭多段线进行修剪

guosheyang 发表于 2024-1-15 20:59:27

交点处相互打断再生成两个面域即可

xyp1964 发表于 2024-1-15 21:37:31

bpoly

wanhongron 发表于 2024-1-15 22:41:24

院长厉害,可惜没有源码

飞雪神光 发表于 2024-1-15 22:44:47

wanhongron 发表于 2024-1-15 22:41
院长厉害,可惜没有源码

院长说了 用 bpoly红线两边各用一次 然后删除原多段线

czb203 发表于 2024-1-17 08:26:30

xyp1964 发表于 2024-1-15 21:37
bpoly

老大无所不能

x_s_s_1 发表于 2024-1-17 10:12:58

试试
(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选择需删除:"))))))


页: [1] 2 3
查看完整版本: 封闭多段线智能修剪