aggdqty 发表于 2023-5-9 20:46:45

请教,打断



一个打断的程序,麻烦问一下,如何设置打断距离,并具有记忆性,输完命令就直接选线(距离默认上一次的值),谢谢
原贴位置http://bbs.mjtd.com/forum.php?mod=viewthread&tid=90572&extra=&highlight=%B4%F2%B6%CF&page=1

[*];;;;;;;;;;;;;;;;;;与线相交交点打断;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[*];;;;;;;;;;;;;;;;;;BY YJR111 2011-11-20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[*];;;;;;;;;;;;;;;;;;适用于所有曲线;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[*](defun c:br (/         n   e   ee       s
[*]       lst_e   vla_x   vla_y   point   vla_point
[*]       p_lst   point1   dxf10_line       dxf11_line
[*]       ee_new    ee_lastsssss
[*]      )
[*](command "_.undo" "be" )
[*](setq oldosmode (getvar "osmode"))
[*](setvar "osmode" 0)
[*](setvar "cmdecho" 0)
[*](setvar "orthomode" 0)
[*](setq n 0)
[*](setq ee_last (entlast))
[*](setq sss (ssadd))
[*](setq ee (car (entsel "\n选择一条曲线:")))
[*](setq vla_ee (vlax-ename->vla-object ee))
[*](vla-getboundingbox vla_ee 'min 'max)
[*](setq minpoint (vlax-safearray->list min)
[*]maxpoint (vlax-safearray->list max)
[*])
[*];(command "line" minpoint maxpoint "")
[*];(redraw (entlast) 3)
[*](INITGET 128 "S O")
[*](SETQKEY
[*]   (GETKWORD
[*]   "\n 凡与所选曲线相交的曲线被打断(S)或所选曲线自身在交点被打断"
[*]   ) ;_ 结束GETKWORD
[*]) ;_ 结束SETQ
[*](if (not KEY)
[*]    (setq key "S")
[*]) ;_ 结束if
[*](setqss (ssget "c" minpoint maxpoint)
[*]n0
[*]) ;_ 结束setq
[*]
[*](while (< n (sslength ss))
[*]    (setq e(ssname ss n)
[*]    s(entget e)
[*]    lst_e(append lst_e (list e))
[*]    n(1+ n)
[*]    ) ;_ 结束setq
[*] ;_ 结束setq
[*]) ;_ 结束while
[*](setqn 0
[*]i 0
[*]) ;_ 结束setq
[*](foreach y lst_e
[*]    (setq vla_y (vlax-ename->vla-object y))
[*]   
[*]    (if(and (not (equal vla_ee vla_y))
[*]       (/= (safearray-value
[*]       (vlax-variant-value
[*]         (setq vla_point (vlax-invoke-method
[*]               vla_ee
[*]               'IntersectWith
[*]               vla_y
[*]               acExtendNone
[*]             ) ;_ 结束vlax-invoke-method
[*]         ) ;_ 结束setq
[*]       ) ;_ 结束vlax-variant-value
[*]   ) ;_ 结束safearray-value
[*]   nil
[*]       ) ;_ 结束/=
[*]) ;_ 结束and
[*]      (progn
[*](setq
[*]    point(vlax-safearray->list (vlax-variant-value vla_point))
[*]) ;_ 结束setq
[*](if (> (length point) 3)
[*]    (progn
[*]      (setq point1 (list (nth 3 point) (nth 4 point) (last point))
[*]      p_lst   (cons point1 p_lst)
[*]      ) ;_ 结束setq
[*]      (setq point(list (car point) (cadr point) (caddr point))
[*]      p_lst(cons point p_lst)
[*]      ) ;_ 结束setq
[*]      (if(= key "S")
[*]      (progn
[*]    (command "_.break" y point1 "@")
[*]    (command "_.break" y point "@")
[*]      ) ;_ 结束progn
[*] ;_ 结束progn
[*]      ) ;_ 结束if
[*]    ) ;_ 结束setq
[*]
[*]    (progn
[*]      (setq point(vlax-safearray->list
[*]      (vlax-variant-value vla_point)
[*]      ) ;_ 结束vlax-safearray->list
[*]      ) ;_ 结束vlax-safearray->list
[*]   
[*]      (if(not (or (equal (vlax-curve-getstartpoint vla_y) point 1e-4)
[*]                         (equal (vlax-curve-getendpoint vla_y)point 1e-4)
[*]                     )
[*]                ) ;_ 结束not
[*]            (setq p_lst (cons point p_lst))
[*]      ) ;_ 结束setq
[*]      (if(= key "S")
[*]      (command "_.break" y point "@")
[*]      ) ;_ 结束if
[*]    ) ;_ 结束progn
[*]) ;_ 结束if
[*]      ) ;_ 结束progn
[*]    ) ;_ 结束if
[*]) ;_ 结束foreach
[*]            (if(= key "O")
[*]      (progn
[*]      (foreach x p_lst
[*]         (setq i 0)
[*]    (if (> (sslength sss) 0)
[*]
[*]      (while (< i (sslength sss))
[*]      (setq ee (ssname sss i))
[*]       (command "_.break" ee x "@")
[*]      (setq i (1+ i))
[*]      ) ;_ 结束while
[*]    ) ;_ 结束if
[*]    (command "_.break" ee x "@")
[*]          (ssdel eess )
[*]
[*]    (setq sss(ssget "c" minpoint maxpoint))
[*]               
[*]    (setq n 0)
[*]    (repeat(sslength ss)
[*]      (setq i 0)
[*]      (while (< i (sslength sss))
[*]      (if(equal (ssname ss n) (ssname sss i))
[*]          (progn
[*]      (ssdel (ssname sss i) sss)
[*]      (setq i (sslength sss))
[*]          ) ;_ 结束progn
[*]      ) ;_ 结束if
[*]      (setq i (1+ i))
[*]
[*]      ) ;_ 结束while
[*]      (setq n (1+ n))
[*]    ) ;_ 结束repeat
[*]         
[*]    (command "_.select" SS SSS "")
[*]    (setq ss (ssget "P"))
[*]                )
[*]
[*]      ) ;_ 结束progn
[*]      ) ;_ 结束if
[*](princ (strcat "共打断<" (itoa (length p_lst)) " >个交点!"))
[*](setvar "osmode" oldosmode)
[*](command "_.undo" "end" )
[*](princ)
[*]) ;_ 结束defun

sandyvs 发表于 2023-5-9 22:33:10

https://www.theswamp.org/index.php?topic=10370.0试试这个?

aggdqty 发表于 2023-5-9 22:49:16

sandyvs 发表于 2023-5-9 22:33
https://www.theswamp.org/index.php?topic=10370.0试试这个?

试了,不行                        

sandyvs 发表于 2023-5-9 22:53:24

aggdqty 发表于 2023-5-9 22:49
试了,不行

好几个命令呢,都不行?至少我这没报错。。

liuhe 发表于 2023-5-10 09:00:11

要求应该是交点为中心,一定距离产生打断豁口。像是两个线进行避让一样。这段代码不可能实现的,要改基本重新写

aggdqty 发表于 2023-5-10 12:31:00

liuhe 发表于 2023-5-10 09:00
要求应该是交点为中心,一定距离产生打断豁口。像是两个线进行避让一样。这段代码不可能实现的,要改基本 ...

感觉这个代码挺打断很快捷,就是没有距离,想加上打断距离,用起来方便一些

bai2000 发表于 2023-5-11 23:09:35

都需要,顶一下

aggdqty 发表于 2023-5-31 13:42:32

原帖是英文的,汉化了一下,
https://www.theswamp.org/index.php?topic=10370.0
页: [1]
查看完整版本: 请教,打断