明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: yeahyeah

[源码] 【悬赏!!!】画多段线打断于交点处

[复制链接]
 楼主| 发表于 2014-4-11 22:42:03 | 显示全部楼层
今晚又想起来这个帖子。
现在我有个设想,不知哪位神人能实现下?

既然两条多段线相交,那会有一个交点,用此交点画辅助圆,然后选择要打断的多段线(为了方便,就叫L1吧),之后命令会将辅助圆内的与L1相交的部分剪切掉,之后命令会删除此辅助圆。

预想使用该命令的步骤:
第一步、用命令时需要输入两相交线,类型就是直线、多段线或两者的组合。(由程序求出两线交点)
第二步、输入打断距离(也就是程序中的辅助圆的直径);
第三步、选择要打断的直线或多段线。

哪位大神能实现此想法啊?
回复

使用道具 举报

发表于 2014-4-17 15:49:35 | 显示全部楼层
觉得楼主的想法很棒!边研究边等大神来~不过我低效率~写代码巨慢
回复

使用道具 举报

发表于 2014-10-4 16:39:52 | 显示全部楼层
这个蛮好,有了我也要啊
回复

使用道具 举报

发表于 2015-7-1 14:37:09 | 显示全部楼层
yeahyeah 发表于 2013-8-21 21:10
;;画多段线打断于交点处

(defun c:kk (/ LA P0 PT S PL A d)

(defun c:kk ()
        (SETQ LST nil)
        (setq laY (getvar 'clayer))
  (setq p0 (getpoint "\n第一点:"))
  (while p0
                (setq pt (getpoint p0 "\n下一点:"))
                (setq sS
                        (ssget "f"
                                (list (POLAR  p0  (angle p0 PT) 2) pt)
                                (list        (cons 0 "*line,LWPOLYLINE,arc,circle,ellipse")
                                        (cons 8 laY);只能在一个图层里
                                )
                        )
                )
                (command "PLINE" "NON" P0 "NON" PT "")
                (SETQ E0 (ENTLAST))
                (SETQ  E0_ANG (angle p0 PT))
                (IF SS (setq ss_count 0 ss_total (sslength ss))
                )
                (WHILE (< ss_count ss_total )
                        (setq ent (ssname ss ss_count))
                        (setq ss_count (+ 1 ss_count) )
                        (IF (/= ENT E0)
                                (progn
                                        (SETQ BRKPT (MK_INTERS ent e0))
                                        ;  (SETQ BRKPT (LIST (CAR BRKPT)  (CADR BRKPT)))
                                        (IF BRKPT
                                                (progn
                                                        (setq para (vlax-curve-getParamAtPoint ent brkpt))
                         (setq dir1 (vlax-curve-getFirstDeriv ent para))
                          (setq dir1_ang (angle '(0 0) dir1))
                                                  (if   (OR(= dir1_ang (/ pi 2)) (= dir1_ang (* pi 1.5)) )
                                                                (command "._break" ent   "NON" (POLAR  brkpt  (+ E0_ANG (/ PI 2)) 2) "NON" (POLAR  brkpt  (+ E0_ANG (* PI 1.5)) 2)  )
                                                                (if   (OR(= dir1_ang 0) (= dir1_ang pi ) )
                                                                        (progn
                                                                                (setq Lst (cons p0 (cons pt Lst)))
                                                                                (setq Lst (cons  (POLAR  brkpt  (+ dir1_ang (* PI 1.5)) 2) (cons  (POLAR  brkpt  (+ dir1_ang (/ PI 2)) 2) Lst)))
                                                                        )
                                                                )
                                                        )
                                                )
                                        )
                                )
                        )
                )
                (if Lst
                        (progn
                                (SETQ list_ptY (vl-sort Lst   (function (lambda (e1 e2)   (< (caDr e1) (caDr e2)) ) ) ))
                                (while (cAr list_ptY)
                                        (setq A (car list_ptY) B (cadr list_ptY)  )
                                        (setq list_ptY (CDR(cdr list_ptY)))
                                        (COMMAND "pline" "NON" a "W" 0.8  0.8  "NON" b "")
                                )
                                (entdel  e0)
                                (setq lst nil)
                        )
                )
                (setq p0 pt)
        )
)
回复

使用道具 举报

发表于 2015-7-1 14:39:28 | 显示全部楼层
yeahyeah 发表于 2013-8-21 21:10
;;画多段线打断于交点处

(defun c:kk (/ LA P0 PT S PL A d)

只有正交的pl线可以打断,而且只打断竖直的线,水平的线不处理
回复

使用道具 举报

发表于 2015-7-1 21:35:14 | 显示全部楼层
不是这个专业的,没太看懂
回复

使用道具 举报

发表于 2015-7-22 14:45:39 | 显示全部楼层
ucuc2003 发表于 2013-8-23 22:08
看附件。。。

这个真心好用
回复

使用道具 举报

发表于 2015-10-22 08:41:39 | 显示全部楼层
看看!!!!!!!!!!!!!!!!!!!!!
回复

使用道具 举报

发表于 2016-7-30 21:04:04 | 显示全部楼层
好,线打断线的功能一直想有办法解决,终于实现了
回复

使用道具 举报

发表于 2017-9-21 10:35:48 | 显示全部楼层

谢老大………………
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 21:27 , Processed in 0.173382 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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