找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2399|回复: 21

[原创]:别开生面的TRIM第三版

[复制链接]
发表于 2005-3-30 17:44:45 | 显示全部楼层 |阅读模式

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

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

×
已经达到实用状态:
命令:XX
功能:右击:切换剪切与延伸
      Shift+右击:选择边界
      左击:选择操作实体
      回车:退出程序


  1.   [FONT=courier new]
  2. (defun c:xx (/ FANGSHI LOOP LOOP1 PT PT0 PTLIST PTLIST0 SIZE SS SS0)
  3. ;;;  (myerr)
  4. ;;;  (varset "cmdecho" 0)
  5. ;;;  (varset "osmode" 0)
  6.   (setq        loop t
  7.         fangshi        t
  8.         ss0 nil
  9.   )
  10.   (princ "\n右击:切换剪切与延伸/ Shift+右击:选择边界/左击:选择操作实体/回车:退出程序")
  11.   (while loop
  12.     (setq pt (grread t 4 1))
  13.     (cond
  14.       ((= 3 (car pt))
  15.        (setq ptlist (list (cadr pt)))
  16.        (setq loop1 t)
  17.        (while loop1
  18.          (setq pt (grread t 4 1))
  19.          (cond
  20.            ((= 3 (car pt))
  21.             (setq ptlist (cons (cadr pt) ptlist))
  22.             (setq loop1 nil)
  23.            )
  24.            ((= 5 (car pt))
  25.             (setq size (* (getvar "viewsize") 0.05))
  26.             (redraw)
  27.             (guangbiao fangshi size (cadr pt))
  28.             (setq pt0 (cadr pt))
  29.             (if        (> (length ptlist) 0)
  30.               (foreach pt1 ptlist
  31.                 (grdraw pt0 (setq pt0 pt1) 1)
  32.               )
  33.             )
  34.             (if        (> (distance (cadr pt) (car ptlist)) (* 0.5 size))
  35.               (setq ptlist (cons (cadr pt) ptlist))
  36.             )
  37.            )
  38.            ((= 25 (car pt))
  39.             (setq fangshi (not fangshi)
  40.                   ss0          nil
  41.             )
  42.            )
  43.            ((and (= 11 (car pt))
  44.                  (= 1000 (cadr pt))
  45.             )
  46.             (if ss0 (cs_redraw ss0 4))
  47.             (setq ss0 (ssget))
  48.             (setq loop1 nil)
  49.            )
  50.            ((= 2 (car pt))
  51.             (if        (or (= (cadr pt) 32)
  52.                     (= (cadr pt) 13)
  53.                 )
  54.               (setq loop nil
  55.                     loop1 nil
  56.               )
  57.             )
  58.            )
  59.          )
  60.        )
  61.        (setq ptlist (reverse ptlist))
  62.        (setq pt             (car ptlist)
  63.              ptlist0 (cdr ptlist)
  64.        )
  65.        (if fangshi
  66.          (if ss0
  67.            (command "trim" ss0 "")
  68.            (command "trim" "")
  69.          )
  70.          (if ss0
  71.            (command "EXTEND" ss0 "")
  72.            (command "EXTEND" "")
  73.          )
  74.        )
  75.        (foreach        pt0 ptlist0
  76.          (if (setq ss (ssget "f" (list pt pt0)))
  77.            (command "f" pt pt0 "")
  78.          )
  79.          (setq pt pt0)
  80.        )
  81.        (command "")
  82.        (if (and        fangshi
  83.                 (not ss0)
  84.                 (setq ss (ssget "f" ptlist))
  85.            )
  86.          (command "erase" ss "")
  87.        )
  88.        (princ "\n右击:切换剪切与延伸/ Shift+右击:选择边界/左击:选择操作实体/回车:退出程序")
  89.       )
  90.       ((= 5 (car pt))
  91.        (setq size (* (getvar "viewsize") 0.05))
  92.        (redraw)
  93.        (guangbiao fangshi size (cadr pt))
  94.       )
  95.       ((= 25 (car pt))
  96.        (setq fangshi (not fangshi)
  97.              ss0     nil
  98.        )
  99.       )
  100.       ((and (= 11 (car pt))
  101.             (= 1000 (cadr pt))
  102.        )
  103.        (if ss0 (cs_redraw ss0 4))
  104.        (setq ss0 (ssget))
  105.       )
  106.       ((= 2 (car pt))
  107.        (cond
  108.          ((or (= (cadr pt) 32)
  109.               (= (cadr pt) 13)
  110.           )
  111.           (setq loop nil)
  112.          )
  113.        )
  114.       )
  115.     )
  116.   )
  117.   (if ss0 (cs_redraw ss0 4))
  118.   (redraw)
  119. ;;;  (restore)
  120.   (princ)
  121. )
  122. (defun guangbiao (fangshi size pt0 /)
  123.   (if fangshi
  124.     (progn
  125.       (grdraw (polar pt0 (dtor 15) size)
  126.               (setq pt1 (polar pt0 (dtor -165) size))
  127.               7
  128.       )
  129.       (grdraw pt1
  130.               (setq pt1 (polar pt1 (dtor -90) (* 0.5 size)))
  131.               7
  132.       )
  133.       (grdraw pt1
  134.               (setq pt1 (polar pt0 (dtor -90) (* 0.5 size)))
  135.               7
  136.       )
  137.       (grdraw pt1 pt0 7)
  138.       (grdraw (polar pt0 (dtor -15) size)
  139.               (setq pt1 (polar pt0 (dtor 165) size))
  140.               7
  141.       )
  142.       (grdraw pt1 (setq pt1 (polar pt1 (dtor 90) (* 0.5 size))) 7)
  143.       (grdraw pt1 (setq pt1 (polar pt0 (dtor 90) (* 0.5 size))) 7)
  144.       (grdraw pt1 pt0 7)
  145.     )
  146.     (progn
  147.       (grdraw pt0 (polar pt0 (dtor 135) size) 7)
  148.       (grdraw pt0 (polar pt0 (dtor -135) size) 7)
  149.       (grdraw pt0 (polar pt0 (dtor 180) (* size 1.5)) 7)
  150.     )
  151.   )
  152. )
  153. (defun cs_redraw (ss mod / )
  154.   (foreach ss0 (ss->list ss)
  155.     (redraw ss0 mod)
  156.     )
  157.   )
  158. (defun ss->list         (ss / cs_i out)
  159.   (if (= (type ss) 'PICKSET)
  160.     (progn
  161.       (setq cs_i 0
  162.             out         '()
  163.             )
  164.       (repeat (sslength ss)
  165.         (setq out (cons (ssname ss cs_i) out))
  166.         (setq cs_i (1+ cs_i))
  167.         )
  168.       (setq out (reverse out))
  169.       )
  170.     )
  171.   )
  172.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-3-30 17:52:22 | 显示全部楼层
好好的TRIM,弄得有点复杂!
不过创意很好,可以学学斑竹grread函数的应用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-30 23:21:38 | 显示全部楼层
不用写那么长。
修改by狂刀

  1. (defun c:xx (/ cmde os ocs roop dis ss gr ga gb sel pt pt2 pts eg cmd)
  2.   (princ "\n自由剪切---修改by狂刀.2005.3")
  3.   (setq        cmde  (getvar "cmdecho")
  4.         os   (getvar "osmode")
  5.         roop T
  6.         dis  (* 0.01 (getvar "viewsize"))
  7.         cmd ".trim"
  8.   )
  9.   (setvar "cmdecho" 0)
  10.   (setvar "osmode" 0)
  11.   (setq ss (ssget "all"))
  12.   (while roop
  13.     (princ "\n shift+右键=选边界 / 右键=切换剪切延伸模式 / 左键=选实体 / 空格;回车=退出:")
  14.     (setq gr (grread nil 4 2)
  15.           ga (car gr)
  16.           gb (cadr gr))
  17.     (cond
  18.       ((= ga 3)
  19.        (princ "\n选剪切实体:")
  20.        (cond
  21.          ((setq sel (nentselp gb))(command cmd ss "" sel ""));;单选.
  22.          (T (setq pts (getpts dis))
  23.           (if (setq pts2(cdr pts))
  24.             (progn (command cmd ss "")
  25.               (mapcar '(lambda(x y)(command "f" x y "")) pts pts2)
  26.               (command "")
  27.             )
  28.            )
  29.           )
  30.        )
  31.       )
  32.       ((member gr '((11 0)(2 32))) ;; "" or enter
  33.         (setq roop nil))
  34.       ((= 25 ga)(if (= cmd ".trim") ;;切换.
  35.          (progn (princ "\n 模式: 延伸\n选实体:")(setq cmd ".extend"))
  36.         (progn (princ "\n 模式: 剪切\n选实体:")(setq cmd ".trim"))
  37.         )
  38.       )
  39.       ((member gr '((11 1000)))
  40.        (princ "\n 重选边界< all > :")
  41.        (or(setq ss (ssget))(setq ss  (ssget "all"))))
  42.    )
  43.   )
  44.   (setvar "cmdecho" cmde)
  45.   (setvar "osmode" os)
  46.   (setq *error* oe)
  47.   (princ)
  48. )
  49. (defun getpts (dis / gr pt pt0 pts)
  50.    (setq ocs (getvar "CURSORSIZE"))
  51.    (setvar "CURSORSIZE" 1)
  52.    (while (= 5 (car (setq gr (grread t 4 0))))
  53.      (setq pt (cadr gr))
  54.      (if (not pt0)(setq pt0 pt pts (cons pt0 pts)))
  55.      (if (> (distance pt pt0) dis)
  56.        (progn
  57.          (grdraw pt pt0 1 1)
  58.          (setq pts (cons pt pts)
  59.                pt0 pt)
  60.        )
  61.      )
  62.    )
  63.   (redraw)
  64.   (setvar "CURSORSIZE" ocs)
  65.   (reverse pts)
  66. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-30 23:59:29 | 显示全部楼层
狂刀的程序OK

斑竹的命令提示错误:
Command: xx
右击:切换剪切与延伸/
Shift+右击:选择边界/左击:选择操作实体/回车:退出程序; error: no function
definition: DTOR
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-31 07:33:40 | 显示全部楼层
试帮楼主补上dtor,不知道对否:)
(defun dtor (d)
  (* PI (/ d 180))
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-31 07:52:19 | 显示全部楼层
最初由 狂刀 发布
[B]试帮楼主补上dtor,不知道对否:)
(defun dtor (d)
  (* PI (/ d 180))
) [/B]


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

使用道具 举报

发表于 2005-4-18 18:56:05 | 显示全部楼层
狂刀的程序很好
不过可不可以再增加一些功能,我经常要在一张大图上(如道路平面图)选取一小快图形,并将选取图形以外的图形删除,我现在是这样做的:在一张大图上先画一个矩形,然后选这个矩形为剪切边界,将矩形以外的线剪切掉,再将矩形以外的所有图形全部删除,只剩下矩形筐内的图形。能否加一个这样的功能,使筐选的图形保留,而筐选以外的图形删除。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 13:49 , Processed in 0.234700 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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