找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: lijiao

[原创]:别开生面的TRIM

[复制链接]
发表于 2005-3-2 08:24:32 | 显示全部楼层

  1. ;;BY LUCAS
  2. ;;改了TRIM的寫法
  3. (defun C:XXX (/ PTLIST0 PT SS CMDECHO OSMODE)
  4.   (setq        CMDECHO        (getvar "cmdecho")
  5.         OSMODE        (getvar "osmode")
  6.   )
  7.   (setvar "cmdecho" 0)
  8.   (setvar "osmode" 0)
  9.   (while (and (setq PTLIST0 (GETPOINT_LIST))
  10.               (> (length PTLIST0) 1)
  11.          )
  12.     (command "_.trim" "a" "" "f")
  13.     (foreach PT        PTLIST0
  14.       (command PT)
  15.     )
  16.     (command "" "")
  17.     ;;樓主的程序剪不掉就刪除!!
  18.     (if        (setq SS (ssget "f" PTLIST0))
  19.       (command "erase" SS "")
  20.     )
  21.   )
  22.   (setvar "osmode" OSMODE)
  23.   (setvar "cmdecho" CMDECHO)
  24.   (princ)
  25. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-2 11:14:25 | 显示全部楼层
最初由 LUCAS 发布
[B][CODE]
;;BY LUCAS
;;改了TRIM的寫法
(defun C:XXX (/ PTLIST0 PT SS CMDECHO OSMODE)
  (setq        CMDECHO        (getvar "cmdecho")
        OSMODE        (getvar "osmode")
  )
  (setvar "cmdecho" 0)
  (setvar "osmode" 0)
... [/B]


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

使用道具 举报

 楼主| 发表于 2005-3-2 12:13:51 | 显示全部楼层
最初由 LUCAS 发布
[B][CODE]
;;BY LUCAS
;;改了TRIM的寫法
(defun C:XXX (/ PTLIST0 PT SS CMDECHO OSMODE)
  (setq        CMDECHO        (getvar "cmdecho")
        OSMODE        (getvar "osmode")
  )
  (setvar "cmdecho" 0)
  (setvar "osmode" 0)
... [/B]

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

使用道具 举报

发表于 2005-3-2 12:15:09 | 显示全部楼层
  GETPOINT_LIST  是原程序里的函数,LUCAS未写入自己修改的程序里,要用可以先加载原程序或加到LUCAS的程序中。定义如下:
[php]
(defun getpoint_list ( / DIS OUT PT)
  (setq pt (getpoint "\n开始:"))
  (princ "\n按任意键完成:")
  (if (= (type pt) 'LIST)
    (progn
      (setq out (list pt)
            dis (* 0.01 (getvar "viewsize")))
      (while (= 5 (car (setq pt (grread t 4 0))))
        (setq pt (cadr pt))
         (if (> (distance pt (car out)) dis)
           (progn
             (grdraw pt (car out) 1)
             (setq out (cons pt out))
             )
           )
        )
      )
    )
  (redraw)
  (reverse out)
  )
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2005-3-2 22:32:01 | 显示全部楼层
最初由 LUCAS 发布
[B]有些甚麼问题?? [/B]


实际运用中,80%以上是要选原对象的.
实际运用中,只trim一根线的比例也是很高的(反而多了一下)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2005-3-3 00:05:02 | 显示全部楼层
试试我改的:
1.有机会和trim一样,有选择的机会
2.如果点到实体,马上trim
3.如果在空的地方点下,自动拉出...

  如果在加入延伸方式等,应该可以取代cad的trim命令了吧.

[php]
;;;BY AEO
(defun c:xx( / cmdecho osmode pt pt0 pts ss)
  (setq        cmdecho        (getvar "cmdecho")
        osmode        (getvar "osmode")
  )
  (setvar "cmdecho" 0)
  (setvar "osmode" 0)
  (princ "\n选择剪切边...")
  (if (setq ss (ssget))(command ".select" ss))
  (princ"\n选择要修剪的对象: ")
  (grread t)
  (while(and(setq pt0(grread nil 12 2))
            (=(car pt0) 3)
            (setq pt0(cadr pt0))
        )
    (if(nentselp pt0)
       (progn
          (command """trim")
          (if ss(command ss))
          (command""pt0"")
          (if ss(command ".select" ss))
       )
       (if(and(setq pts(getpoint_list pt0))
              (>(length pts)1)
          )
         (progn
          (command"""trim")
          (if ss(command ss))(command"""f")
          (foreach pt pts (command pt))
          (command"""")
          (if ss(command ".select" ss))
       ))
   )
)(command)
  (setvar "osmode" osmode)
  (setvar "cmdecho" cmdecho)
  (princ)
)

(defun getpoint_list (pt / dis out)
  (if (= (type pt) 'LIST)
    (progn
      (setq out (list pt)
            dis (* 0.01 (getvar "viewsize")))
      (while (= 5 (car (setq pt (grread t 4 0))))
        (setq pt (cadr pt))
         (if (> (distance pt (car out)) dis)
           (progn
             (grdraw pt (car out) 1 1)
             (setq out (cons pt out))
             )
           )
        )
      )
    )
  (redraw)(grread t)
  (reverse out)
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-3 02:06:17 | 显示全部楼层
最初由 LUCAS 发布
[B]有些甚麼问题?? [/B]


我来回答: 用你的写法,当trim一条多义线的多个边的时候,只能trim一条边。

我改写的,完全囊括trim命令内容,包括p,e,uodo选项,支持shift延伸方式!

  1. ;; xtr = 超级剪切--by 狂刀
  2. ;;思路from lijiao  [url]http://www.xdcad.net/forum/showthread.php?postid=1686237#post1686237[/url]
  3. ;; 可替代trim.
  4. (defun c:xtr (/ cmd os roop dis ss gr ga gb sel pts pts2 )
  5.   (setq        cmd  (getvar "cmdecho")
  6.         os   (getvar "osmode")
  7.         roop T
  8.         dis  (* 0.01 (getvar "viewsize"))
  9.   )
  10.   (setvar "cmdecho" 0)
  11.   (setvar "osmode" 0)
  12.   (princ "\n 选择剪切边<all>")
  13.   (setq ss (ssget))
  14.   (if (not ss)(setq ss ""))
  15.   (princ"\n U-undo / E-edgemode / 选择要修剪的对象(按住Shift键延伸): ")
  16.   (while roop
  17.     (setq gr (grread nil 4 02)
  18.           ga (car gr)
  19.           gb (cadr gr))
  20.     (cond
  21.       ((= ga 3)
  22.        (cond
  23.          ((setq sel (nentselp gb))(command ".trim" ss sel ""))
  24.          (T (setq pts (getpts dis))
  25.           (if (setq pts2(cdr pts))
  26.             (progn (command ".trim" ss )
  27.               (mapcar '(lambda(x y)(command "f" x y "")) pts pts2)
  28.               (command "")
  29.             )
  30.            )
  31.           )
  32.        ))
  33.       ((member gr '((2 117)(2 85)));; "U"
  34.         (command ".u"))
  35.       ((member gr '((2 101)(2 69)));; "E"
  36.         (setvar "edgemode" (abs(- (getvar "edgemode") 1))))
  37.       ((member gr '((2 112)(2 80)));; "P"
  38.         (initget "0 1 2")
  39.         (setvar "PROJMODE" (atoi (getkword "[0 无 / 1 UCS / 2 视图]:"))))
  40.       ((member gr '((11 0)(2 32)));; "" or enter
  41.         (setq roop nil))
  42.    )
  43.   )
  44.   (setvar "cmdecho" cmd)
  45.   (setvar "osmode" os)
  46.   (princ)
  47. )
  48. ;; (getpts) = 取得grread跟踪点表,dis为控制精度的距离.
  49. (defun getpts (dis / gr pt pt0 pts)
  50.    (while (= 5 (car (setq gr (grread t 4 0))))
  51.      (setq pt (cadr gr))
  52.      (if (not pt0)(setq pt0 pt pts (cons pt0 pts)))
  53.      (if (> (distance pt pt0) dis)
  54.        (progn
  55.          (grdraw pt pt0 1 1)
  56.          (setq pts (cons pt pts)
  57.                pt0 pt)
  58.        )
  59.      )
  60.    )
  61.   (redraw)
  62.   (reverse pts)
  63. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-3 07:57:11 | 显示全部楼层
最初由 梦断江南 发布
[B]

那样还写什么啊,就一句
(command "t... [/B]


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

使用道具 举报

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

使用道具 举报

发表于 2005-3-3 11:42:38 | 显示全部楼层
最初由 狂刀 发布
[B]

我来回答: 用你的写法,当trim一条多义线的多个边的时候,只能trim一条边。

我改写的,完全囊括trim命令内容,包括p,e,uodo选项,支持sh... [/B]


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

使用道具 举报

发表于 2005-3-3 12:15:33 | 显示全部楼层
最初由 aeo 发布
[B]试试我改的:
1.有机会和trim一样,有选择的机会
2.如果点到实体,马上trim
3.如果在空的地方点下,自动拉出...

  如果在加入延伸方式等,应该可以取代cad的trim命令了吧.

[php]
;;;BY AEO
(defun c:xx( ... [/B]


有点小问题,选择剪切边后按esc退出的话,剪切边被删除了。另外,剪切成功后如果用esc退出的话,需要按两次。斑竹能再修修么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 12:27 , Processed in 0.222715 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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