notview 发表于 2022-7-5 19:51:06

删除/擦除多段I的部分

大家好,有没有一种方法可以用lisp以最短的方式删除或删除多段线的一部分,如附图所示。。

Lee Mac 发表于 2022-7-5 19:54:32

您可以使用TRIM命令删除线段。

notview 发表于 2022-7-5 20:00:02

谢谢你,LM。修剪命令在左边的图中效果很好,但右边的图不会擦除,只会修剪部分。
 
 
右图是具有两个顶点的多段线。这是否可能使lisp例程,如果选择两个顶点的多段线,它将删除,合并到修剪。
 
 
上图只是我工作的一部分,有时许多多段线相互交叉,仅使用TRIM命令无法解决我的问题。
 
 
谢谢你的帮助!

Tharwat 发表于 2022-7-5 20:02:22

试试这个:
 

(defun c:Test(/ s o a b c)
;;;        Tharwat 27.4.2015        ;;;
(if
   (and (setq s (entsel "\n Select a Polyline to trim segment :"))
      (wcmatch (cdr (assoc 0 (entget (setq o (car s))))) "*POLYLINE")
      )
    (cond ((= (cdr (assoc 90 (entget o))) 2) (entdel o))
          (t
         (setq a (fix (vlax-curve-getparamatpointo(vlax-curve-getclosestpointto o (cadr s))))
               b (vlax-curve-getpointatparam o a)
               c (vlax-curve-getpointatparam o (1+ a))
               )
         (command "_.Break" o "_none" b "_none" c "")
         )
          )
    )
(princ)
)

notview 发表于 2022-7-5 20:04:33

太棒了!!塔尔瓦特。
 
 
这对我帮助很大。。一次只能使用命令,您可以使其继续,直到退出,或者选择多个,然后修剪/擦除选定的段。
 
 
谢谢Tharwat!!它解决了我的问题。。哈哈哈。。

Tharwat 发表于 2022-7-5 20:09:41

 
很好,很高兴听到
 
 
不,您不能在此任务中使用多项选择,但如果您希望在按下enter键之前保持程序运行,只需将if函数替换为while。
 
除非您没有办法,否则不要对任何命令使用“退出”按钮,所以按enter键可以避免错误消息并安全地退出命令(通常)。
 
祝你好运

notview 发表于 2022-7-5 20:13:13

谢谢你的建议和你的时间这段代码,它节省了我很多时间。
 
 
棒 极 了一切都很好。
 
 
谢谢Tharwat!

Tharwat 发表于 2022-7-5 20:15:04

 
随时欢迎你。

martinle 发表于 2022-7-5 20:18:18

你好,塔尔瓦特。
当我带着这个Lisp程序在BCS时,我会有问题。
在那里,它不起作用。你能再看一眼吗?这里可能缺少什么?
 
马丁

Tharwat 发表于 2022-7-5 20:22:12

 
嗨,马丁,很高兴看到你再次发帖
 
是的,我想这个程序只适用于WCS。你能上传一张样品图让我用那个系统试试吗?
页: [1] 2
查看完整版本: 删除/擦除多段I的部分