明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2094|回复: 3

[求助]求一个自动打断并倒角的lisp

[复制链接]
发表于 2008-9-29 15:39:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2008-9-29 15:39:33 编辑

哪位朋友能编个lisp,实现第一个图编为第二图

 

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2008-11-3 21:23:00 | 显示全部楼层

这个可满足楼主的要求:

;+---------------------+
;+ 四条直线快速修剪    +
;+ 文件名: TRIM4.lsp   +
;+---------------------+
(defun C:T4( / index index1 ss p0 ss1 entn ent ty l_p1 l_p2 p1 p2 p3 p4 ang1 ang2
                  ang3 dist1 dist2 )

(defun inivar()
    (setq osm (getvar "osmode"))
    (setq cly (getvar "clayer"))
  )
  (defun resvar()
    (setvar "osmode" osm)
    (setvar "clayer" cly)
  )

(inivar) ;初始化系统变量
(setvar "blipmode" 1)
(setq index 1
       ss (ssadd) ;构件一个空选择集
) ;setq end
(setvar "osmode" 512) ;设定捕捉模式为Nearest
(setq ss (ssget '((0 . "LINE"))))
(while (/= (sslength ss) 4)
  (progn
    (print "未选到四条直线,请重新选择")
    (setq ss (ssget '((0 . "LINE"))))
  )
)

(setvar "osmode" 0)
(setvar "blipmode" 0)
(setq index 0
       l_p1 '()
       l_p2 '()
  ) ;setq end
(repeat 4 ;获取每一根线的起点、终点
  (setq ent (entget (ssname ss index))
        index (+ 1 index)
        p1 (cdr (assoc 10 ent))
        p2 (cdr (assoc 11 ent))
        l_p1 (cons p1 l_p1)
        l_p2 (cons p2 l_p2)
        ) ;setq end
) ;repeat end
(setq index 0 n 4
       l_int '()
)
(repeat (1- n) ;计算交点
        (setq p1  (nth index l_p1)
              p2  (nth index l_p2)
              index1 (1+ index)
              index (1+ index)
        ) ;setq end
        (repeat (- n index)
         (setq p3 (nth index1 l_p1)
               p4 (nth index1 l_p2)
               index1 (1+ index1)
               pt (inters p1 p2 p3 p4) ;求交点
               l_int (if pt (cons pt l_int) l_int)
         ) ;setq end
        )  ;repeat end
) ;repeat end
(setq index 0
       la (cdr (assoc 8 ent))
) ;setq end
(repeat n ;删除原直线
  (setq entn (ssname ss index)
        index (1+ index)
  ) ;setq end
  (entdel entn)
) ;repeat end
(setq index 0)
(command "layer" "s" la "")
(repeat (1- n) ;重新画线
    (setq p3 (nth index l_int)
          index2 (1+ index)
          index (1+ index)
    ) ;setq end
    (repeat (- n index)
        (setq index1 0
              p4 (nth index2 l_int)
              index2 (1+ index2)
        ) ;setq end
        (repeat n
         (setq p1  (nth index1 l_p1)
               p2  (nth index1 l_p2)
               index1 (1+ index1)
         ) ;setq end
         (setq ang1 (angtos (angle p1 p2) 0 1)
               ang2 (angtos (angle p1 p3) 0 1)
               ang3 (angtos (angle p1 p4) 0 1)
         ) ;setq end
         (if (= ang1 ang2 ang3)
             (progn
                 (setq dist1 (distance p1 p3)
                       dist2 (distance p1 p4)
                ) ;set end
                (if (< dist1 dist2)
                  (progn
                   (command "line" p1 p3 "")
                   (command "line" p4 p2 "")
                  ) ;progn end
                  (progn
                   (command "line" p1 p4 "")
                   (command "line" p3 p2 "")
                  ) ;progn end
                ) ;if end
             ) ;progn end
         )  ;if end
        ) ;repeat end
    ) ;repeat end
) ;repeat end
(redraw)
(resvar) ;还原系统变量
(princ)
) ;defun end

发表于 2008-11-4 23:13:00 | 显示全部楼层

楼上的只能一次打断四条线,如果想打断井字梁的话还是去找一个全部打断的程序  然后用vla-get-length把长度小于梁宽(比如400)的线段用vla-delete删除!就可以实现楼主的效果

发表于 2024-3-22 08:09:46 | 显示全部楼层
感谢分享感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 21:18 , Processed in 0.193741 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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