明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 997|回复: 7

请教,打断

[复制链接]
发表于 2023-5-9 20:46:45 | 显示全部楼层 |阅读模式


一个打断的程序,麻烦问一下,如何设置打断距离,并具有记忆性,输完命令就直接选线(距离默认上一次的值),谢谢
原贴位置http://bbs.mjtd.com/forum.php?mo ... 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_last  ss  sss
  •       )
  •   (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")
  •   (SETQ  KEY
  •    (GETKWORD
  •      "\n 凡与所选曲线相交的曲线被打断(S)或所选曲线自身在交点被打断[O]"
  •    ) ;_ 结束GETKWORD
  •   ) ;_ 结束SETQ
  •   (if (not KEY)
  •     (setq key "S")
  •   ) ;_ 结束if
  •   (setq  ss (ssget "c" minpoint maxpoint)
  •   n  0
  •   ) ;_ 结束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
  •   (setq  n 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 ee  ss )
  •     (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

发表于 2023-5-9 22:33:10 | 显示全部楼层
 楼主| 发表于 2023-5-9 22:49:16 | 显示全部楼层
sandyvs 发表于 2023-5-9 22:33
https://www.theswamp.org/index.php?topic=10370.0试试这个?

试了,不行                        

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2023-5-9 22:53:24 | 显示全部楼层

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2023-5-10 09:00:11 | 显示全部楼层
要求应该是交点为中心,一定距离产生打断豁口。像是两个线进行避让一样。  这段代码不可能实现的,要改基本重新写
 楼主| 发表于 2023-5-10 12:31:00 | 显示全部楼层
liuhe 发表于 2023-5-10 09:00
要求应该是交点为中心,一定距离产生打断豁口。像是两个线进行避让一样。  这段代码不可能实现的,要改基本 ...

感觉这个代码挺打断很快捷,就是没有距离,想加上打断距离,用起来方便一些
发表于 2023-5-11 23:09:35 | 显示全部楼层
都需要,顶一下
 楼主| 发表于 2023-5-31 13:42:32 | 显示全部楼层
原帖是英文的,汉化了一下,
https://www.theswamp.org/index.php?topic=10370.0

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 05:55 , Processed in 0.198993 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表