chenjian2159 发表于 2011-3-24 12:13

【悬赏5明经币求程序】求"交点打断"的lisp

本帖最后由 chenjian2159 于 2011-4-7 17:59 编辑

求:如果有一大片的线,纵横交错,不在乎是哪个图层,能不能实现这样一个程序,每个交点的两根线(线是直线、弧线、PLINE线等)的在交点处打断。步骤:先框选一大片线,然后空格后,就打断有交点的线。

xiaxiang 发表于 2011-3-24 12:13

本帖最后由 xiaxiang 于 2011-4-10 18:04 编辑

这个程序可实现线,圆弧,多义线,圆,样条曲线等等的打断。
演示中只有线,其它的可自己试。


七七0707 发表于 2011-4-8 10:30



;;选择集求交点子程序
(defun interss (ss / n1 ssl aobj1 aobj2 n2 ipts pts)
(setq    n10
    ssl (sslength ss)
)
(while (< n1 (1- ssl))
    (setq aobj1    (ssname ss n1)
      aobj1    (vlax-ename->vla-object aobj1)
      n2    (1+ n1)
    )
    (while (< n2 ssl)
      (setq aobj2 (ssname ss n2)
      aobj2 (vlax-ename->vla-object aobj2)
      ipts(vla-intersectwith
            aobj1
            aobj2
            0
          )
      ipts(vlax-variant-value ipts)
      )
      (if (> (vlax-safearray-get-u-bound ipts 1) 0) ;是否有交点
    (progn
      (setq    ipts
         (vlax-safearray->list ipts)
      )
      (while (> (length ipts) 0)
      (setq pts (cons (list (car ipts)
                  (cadr ipts)
                  (caddr ipts)
                )
                pts
            ) ;此处可以在添加时判断是否有重合点
      )
      (setq ipts (cdddr ipts))
      )
    )
      )
      (setq n2 (1+ n2))
    )
    (setq n1 (1+ n1))
)
pts
)

(defun Break_ss (ss filter / pts pick thisdrawing oldos)

(if ss   
    (progn
      (setq pts      (interss ss)
      pick    (getvar "pickbox")
      thisdrawing    (vla-get-activedocument
            (vlax-get-acad-object)
            )
      )
      (if pts
        (progn
      (vla-startundomark thisdrawing)
      (foreach x pts
    (if (ssget
          "_C"
          (polar x (* -0.75 pi) (* 2. (expt (/ pick 2) 2)))
          (polar x (* 0.45 pi) (* 2. (expt (/ pick 2) 2)))
          filter
      )
      (vlax-for i (vla-get-activeselectionset thisdrawing)
      (if
          (not (or (equal (vlax-curve-getstartpoint i)
                  x
                  0.001
               )
               (equal (vlax-curve-getendpoint i)
                  x
                  0.001
               )
         )
          )
         (vl-cmdf    ".break"
            (list (vlax-vla-object->ename i) x)
            "f"
            x
            "@"
         )
      )
      )
    )
      )
   
   
    (vla-endundomark thisdrawing)
      );progn
        )
      );progn
) ;if

(princ)
)
;;;测试
(defun c:tt()
   (setq ss (ssget '((0 . "*line,arc,circle,ELLIPSE"))))
   (if ss
   (Break_ss ss '((0 . "*line,arc,circle,ELLIPSE")))
   )
   (princ)
   )

xiaxiang 发表于 2011-4-8 17:33

请楼主给出一个足够复杂的样图。还有,对断开距离有没有要求?

chenjian2159 发表于 2011-4-9 15:07

两个都不错,请版主帮我平均分配下明经币!!!

yoyoho 发表于 2011-4-19 18:09

感谢分享程序及chenjian2159老大, < 谢谢 ! >

zzl9105 发表于 2011-10-13 18:31

xiaxiang 发表于 2011-3-24 12:13 static/image/common/back.gif
这个程序可实现线,圆弧,多义线,圆,样条曲线等等的打断。
演示中只有线,其它的可自己试。

你好呀,我下载了,变成lisp程序后,加载不了,内里也不是什么程序,也没有显示命令名,这是怎么回事呀?我把部分文字贴出来:
<meta name="keywords" content="" />
<meta name="description" content=",明经通道" />
<meta name="generator" content="Discuz! X2" />
<meta name="author" content="Discuz! Team and Comsenz UI Team" />
<meta name="copyright" content="2001-2011 Comsenz Inc." />
<meta name="MSSmartTagsPreventParsing" content="True" />
<meta http-equiv="MSThemeCompatible" content="Yes" />
<base href="http://bbs.mjtd.com/" /><link rel="stylesheet" type="text/css" href="data/cache/style_1_common.css?B0m" /><link rel="stylesheet" type="text/css" href="data/cache/style_1_forum_attachment.css?B0m" /><script type="text/javascript">var STYLEID = '1', STATICURL = 'static/', IMGDIR = 'static/image/common', VERHASH = 'B0m', charset = 'gbk', discuz_uid = '0', cookiepre = 'ncjy_08db_', cookiedomain = '.mjtd.com', cookiepath = '/', showusercard = '1', attackevasive = '0', disallowfloat = 'newthread', creditnotice = '1|通道币|个,2|威望|,3|明经币|个,4|金钱|,5|贡献|,6|激情|', defaultstyle = '', REPORTURL = 'aHR0cDovL2Jicy5tanRkLmNvbS9mb3J1bS5waHA/bW9kPWF0dGFjaG1lbnQmYWlkPU5UZ3dPVEY4T0Rka05tVmxORGQ4TVRNeE9EVXdNVE13T1h3ek9UVTRNRGg4T0RVNU5EYyUzRA==', SITEURL = 'http://bbs.mjtd.com/', JSPATH = 'static/js/';</script>
<script src="static/js/common.js?B0m" type="text/javascript"></script><meta name="application-name" content="明经通道" />
<meta name="msapplication-tooltip" content="明经通道" />
<meta name="msapplication-task" content="name=首页;action-

害得我花了一个币,难道不是lisp程序?

mccad 发表于 2011-10-13 21:20

zzl9105 发表于 2011-10-13 18:31 static/image/common/back.gif
你好呀,我下载了,变成lisp程序后,加载不了,内里也不是什么程序,也没有显示命令名,这是怎么回事呀? ...

下载的文件是LSP文件没错,你可重新下载试试,不重复扣币。

zzc83 发表于 2011-10-31 22:40

以前好像看过一个英文版本的交点打断很好用

gingko_sf 发表于 2011-11-15 11:47

8错。值得拥有!
页: [1] 2 3 4 5 6 7
查看完整版本: 【悬赏5明经币求程序】求"交点打断"的lisp