找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4121|回复: 28

[编程申请]:求“超级修剪”lisp程序

[复制链接]
发表于 2006-12-7 09:23:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
因为在工作中常常用到修剪轴线,一般的修剪是连根修掉,而制图的时候轴线最好出来一段,这样图纸看的方便也美观,所以有那位大虾能提供这样的lisp程序,AUTOCAD14下也能运行,感激不尽。附图

                               
登录/注册后可看大图
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-12-7 13:24:47 | 显示全部楼层
先发一个给你吧
其实我个人认为还是先偏移一条线,然后以偏移的线为目标进行剪切
也不是很费事.
编了程序也不会让你的绘图速度快多少
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-8 09:40:21 | 显示全部楼层
谢谢啊,辛苦了,为什么不能下啊,郁闷,是网站的原因吗?,有谁下到的,发我一个,2275506@163.com
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-12-8 11:37:17 | 显示全部楼层
(defun c:jj()

(setq old (getvar "osmode"))
(setvar "osmode" 0)
(setq jvli (getreal "\n 请输入延长的距离:"))
(setvar "offsetdist" jvli)
(setq mubiao (car (entsel "\n 请选择目标线:")))
(redraw mubiao 3)
(setq a (entsel "\n 请选择被剪切线:" ))

(while a
(setq b (car a))
(setq c (cadr a))
(command "offset" "" mubiao c "")
(setq d (entlast))

(command "trim" d "" c "")
(command "erase" d "")

(setq a (entsel "\n 请选择被剪切线:"))
)   ;end while

(setvar "osmode" old)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-8 15:47:21 | 显示全部楼层
非常谢谢,能不能加个默认参数象偏移命令OFFSET一样,默认500,可以改数值,这样不用每次运行命令的时候都要输入距离参数,另外加个UNDO参数,剪错了可以UNDO。哈哈,这样使用起来就方便了,最最理想的是,连延伸命令也加进去,延伸到边界再伸出500距离,可能这样不能用一个命令了吧,分两个命令容易一点,大虾,万分感谢。

                               
登录/注册后可看大图


                               
登录/注册后可看大图
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2006-12-8 16:00:44 | 显示全部楼层
下面这是本人昨天写的一个小东西,已通过R14。请楼主过目。
二楼所讲偏移边界的方法,仅适用于要修剪的对象与边界垂直的情况,不能通用。

  1.   [FONT=courier new]
  2. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  3. ;;;ZML84制作于2006-12-07
  4. ;;;==========================================
  5. ;;;全局变量说明:
  6. ;;;EDGE_JL  外延距离
  7. ;;;==========================================
  8. (defun c:tt (/ S0 S1 PT entl LX
  9.              PT0 PT0_OLD PT1 PT1_OLD)
  10.     (princ "\n★★超级修剪★★")

  11.     (setq CMDECHO_OLD (getvar "CMDECHO")
  12.     )
  13.     (Setvar "CMDECHO" 0)

  14.     (if        (or (= EDGE_jl "") (= EDGE_jl nil))
  15.         (setq EDGE_jl 5.0)
  16.     )
  17.     (princ
  18.         (strcat        "\n当前设置:投影="
  19.                 (nth (getvar "PROJMODE") '("不投影" "当前UCS" "当前视图"))
  20.                 ",边="
  21.                 (nth (getvar "EDGEMODE") '("不延伸" "延伸"))
  22.                 ",外延距离="
  23.                 (rtos EDGE_JL 2 (getvar "LUPREC"))
  24.         )
  25.     )

  26.     (princ "\n选择剪切边...")
  27.     (setq S0 (ssget))

  28.     (if        (= S0 nil)
  29.         (princ "\n★未选择边界,即将退出。")
  30.         (progn
  31.             (setq S1 nil)
  32.             (while (or (/= S1 nil)
  33.                        (/= nil
  34.                            (progn (initget 4 "P E D U")
  35.                                   (setq        pt (GETPOINT
  36.                                                "\n选择要修剪的对象,或 [投影(P)/边(E)/外延距离(D)/放弃(U)]:"
  37.                                            )
  38.                                   )
  39.                            )
  40.                        )
  41.                    )

  42.                 (cond
  43.                     ((= pt "P") ;分支一:投影选项设置
  44.                      (progn
  45.                          (initget 4)
  46.                          (SETQ
  47.                              XX        (getint
  48.                                     (strcat
  49.                                         "\n输入投影选项 [无(0)/UCS(1)/视图(2)] <"
  50.                                         (itoa (getvar "PROJMODE"))
  51.                                         ">:"
  52.                                     )
  53.                                 )
  54.                          )
  55.                          (if (or (= xx 0) (= xx 1) (= xx 2))
  56.                              (Setvar "PROJMODE" xx)
  57.                          )
  58.                      )
  59.                     )

  60.                     ((= pt "E") ;分支二:边延伸选项设置
  61.                      (progn
  62.                          (initget 4)
  63.                          (SETQ XX (getint
  64.                                       (strcat
  65.                                           "\n输入隐含边延伸模式 [不延伸(0)/延伸(1)] <"
  66.                                           (itoa (getvar "EDGEMODE"))
  67.                                           ">:"
  68.                                       )
  69.                                   )
  70.                          )
  71.                          (if (or (= xx 0) (= xx 1))
  72.                              (Setvar "EDGEMODE" xx)
  73.                          )
  74.                      )
  75.                     )

  76.                     ((= pt "D") ;分支三:外延距离选项设置
  77.                      (progn
  78.                          (initget 4)
  79.                          (SETQ XX (getdist
  80.                                       (strcat
  81.                                           "\n输入外延的距离 <"
  82.                                           (rtos        EDGE_jl
  83.                                                 2
  84.                                                 (getvar "LUPREC")
  85.                                           )
  86.                                           ">:"
  87.                                       )
  88.                                   )
  89.                          )
  90.                          (if (>= xx 0)
  91.                              (setq EDGE_jl xx)
  92.                          )
  93.                      )
  94.                     )

  95.                     ((= pt "U") ;分支四:撤销上一步操作
  96.                      (command "_.undo" 1)
  97.                     )

  98.                     ((listp pt) ;分支五:对选中的对象进行修剪操作
  99.                      (if (ssget pt)
  100.                          (progn
  101.                              (setq s1 (list (ssname (ssget pt) 0) pt))
  102.                              (setq entl        (entget (car s1) '("*"))
  103.                                    LX        (dxf_let entl 0)
  104.                              )

  105.                              (cond ;对各种对象类型进行操作。
  106.                                  ((= LX "LINE")
  107.                                   (progn
  108.                                       (command "_.undo" "be")
  109.                                       (setq pt0_old (dxf_let entl 10)
  110.                                             pt1_old (dxf_let entl 11)
  111.                                       )
  112.                                       (command "_trim" s0 "" s1 "")
  113.                                       (setq entl (entget (car s1) '("*")))
  114.                                       (setq pt0        (dxf_let entl 10)
  115.                                             pt1        (dxf_let entl 11)
  116.                                       )
  117.                                       (if (and (equal pt0 pt0_old)
  118.                                                (equal pt1 pt1_old)
  119.                                           )
  120.                                           (princ "\n★对象未与边相交。")
  121.                                           (progn

  122.                                               (if (not (equal pt0 pt0_old))
  123.      ;检查起点
  124.                                                   (dxf_set
  125.                                                       entl
  126.                                                       10
  127.                                                       (polar pt0
  128.                                                              (angle pt0 pt0_old)
  129.                                                              EDGE_jl
  130.                                                       )
  131.                                                   )
  132.                                                   (if (not (equal pt1 pt1_old))
  133.      ;检查终点
  134.                                                       (dxf_set
  135.                                                           entl
  136.                                                           11
  137.                                                           (polar pt1
  138.                                                                  (angle        pt1
  139.                                                                         pt1_old
  140.                                                                  )
  141.                                                                  EDGE_jl
  142.                                                           )
  143.                                                       )
  144.                                                   )
  145.                                               )
  146.                                               (command "_.undo" "e")
  147.                                           )
  148.                                       )

  149.                                   )
  150.                                  )
  151.                                  ((= LX "ARC")
  152.                                   (princ (strcat "\n★对象类型为""
  153.                                                  LX
  154.                                                  "",暂不能处理。"
  155.                                          )
  156.                                   )
  157.                                  )
  158.                                  (T
  159.                                   (princ
  160.                                       (strcat "\n★对象类型""
  161.                                               LX
  162.                                               "",拒绝操作。"
  163.                                       )
  164.                                   )
  165.                                  )
  166.                              )
  167.                          )
  168.                          (princ "\n★未选择到对象。")
  169.                      )
  170.                     ) ;结束 分支五

  171.                 ) ;结束 cond 结束分支

  172.                 (setq S1 nil)
  173.             ) ;结束 while
  174.         )
  175.     ) ;结束 if

  176.     (Setvar "CMDECHO" CMDECHO_OLD)

  177.     (princ "\n★正常结束。谢谢使用。")
  178.     (princ)
  179. );结束 defun

  180. ;;;定义函数,用于提取属性。
  181. (defun dxf_let (ent n)
  182.     (if        (assoc n ent)
  183.         (cdr (assoc n ent))
  184.         nil
  185.     )
  186. );结束 defun

  187. ;;;定义函数,用于修改属性。
  188. (defun dxf_set (ent n nr)
  189.     (if        (assoc n ent)
  190.         (progn
  191.             (setq ent (subst (cons n nr) (assoc n ent) ent)
  192.             )
  193.             (entmod ent)
  194.         )
  195.         nil
  196.     ) ;结束 if
  197. );结束 defun

  198. (princ "\n\n★超级修剪。键入命令"TT"执行。")
  199. (princ)
  200.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-8 16:14:37 | 显示全部楼层
大侠,厉害,厉害啊。果然好用,只是有一点小小的问题,选择修剪对象的时候,选择框隐去了。另外能不能象TRIM一样加个F参数,可以以直线选取。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-1-7 19:51:57 | 显示全部楼层
果然好使,多谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-1-30 21:07:15 | 显示全部楼层
6l楼真是高手呀!  而且还热心帮助他人!感动ING。

支持!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-2-2 10:47:46 | 显示全部楼层
看看
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-10-17 09:03:04 | 显示全部楼层
有哪位高手,可以上传个,画线修剪那个程序,个人感觉用着挺方便的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-10-29 21:32:07 | 显示全部楼层
高手如云啦,学习了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-11-5 22:50:10 | 显示全部楼层
好久没来晓东了,zml84越来越厉害了啊。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-11-21 10:48:01 | 显示全部楼层
我现在在找一个能在lisp中生成的实体,用其中的一些实体剪掉一些的,一直没有做到.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1489个

财富等级: 财源广进

发表于 2008-11-22 22:11:22 | 显示全部楼层
程序很好!就是框选的时候 选框太小且不能一起选。不过能提供源码已经很感谢了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-28 05:10 , Processed in 0.563326 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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