找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 746|回复: 5

[求助] [求助]:如何使程序不选择对象的情况下,静默的退出?

[复制链接]
发表于 2006-7-27 13:51:27 | 显示全部楼层 |阅读模式

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

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

×

  1.   [FONT=courier new]
  2. (defun c:5()
  3.   (setvar "cmdecho" 1)
  4.   (setvar "offsetgaptype" 0)
  5.   (command "offset" "e" "n" "l" "s" pause (car (entsel)) "m")
  6.   (princ)
  7. )
  8.   [/FONT]


上面的这段代码,是加强CAD2006中的offset命令的。因为在CAD2006中,offset命令增加了一个M(多个)参数!

如何使上面的代码,在不选择任何对象时,程序能静默的退出不出错。也就是命令行不提示:m 未知命令“M”。按 F1 查看帮助。

命令: 5 offset
当前设置: 删除源=否  图层=源  OFFSETGAPTYPE=0
指定偏移距离或 [通过(T)/删除(E)/图层(L)] <500.00>:  e
要在偏移后删除源对象吗?[是(Y)/否(N)] <否>:  n
指定偏移距离或 [通过(T)/删除(E)/图层(L)] <500.00>:  l
输入偏移对象的图层选项 [当前(C)/源(S)] <源>:  s
指定偏移距离或 [通过(T)/删除(E)/图层(L)] <500.00>:

选择要偏移的对象,或 [退出(E)/放弃(U)] <退出>:
选择对象:

命令: m 未知命令“M”。按 F1 查看帮助。

命令:


谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-7-27 17:21:05 | 显示全部楼层
  1. (defun c:5 ()
  2.     (setvar "cmdecho" 1)
  3.     (setvar "offsetgaptype" 0)
  4.     (command "offset" "e" "n" "l" "s" pause)
  5.     (if        (setq en (entsel))
  6.         (command (car en) "m")
  7.         (command "")
  8.     )
  9.     (princ)
  10. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-27 20:26:12 | 显示全部楼层
太感谢楼上的了!
谢谢!鞠躬!

楼上的能否再改改,在指定偏移距离时,如果用户用鼠标来指定的话,程序还是会出错。这知道这个原因是后面的pause引起的,有没有什么好的方法给予解决?
谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-7-31 16:30:10 | 显示全部楼层
  1. (defun c:5 (/ l en sn)
  2.     (setvar "cmdecho" 1)
  3.     (setvar "offsetgaptype" 0)
  4.     (command "offset" "e" "n" "l" "s" (if (setq l (getdist)) l (getvar "OFFSETDIST")))
  5.     (initget "Exit")
  6.     (setq en (entsel "\n选择要偏移的对象,或 [退出(E)] <退出>:"))
  7.     (if        (= (type en) 'list)
  8.         (if (wcmatch (cdr (assoc 0 (entget (car en))))
  9.                      "*LINE,ARC,CIRCLE,ELLIPSE"
  10.             )
  11.             (command (car en) "m")
  12.             (progn (command "") (setq sn -1))
  13.         )
  14.         (command "")
  15.     )
  16.     (princ)
  17. )
  18. ;(c:5)很简单,自己用的话还可以,但是有些小问题,操作的时候需要注意


  19. (defun c:6 (/ e l en sn si tt dist e1 l1)
  20.     (setvar "cmdecho" 0)
  21.     (setvar "offsetgaptype" 0)
  22.     (setq e "n")
  23.     (setq l "s")
  24.     (princ "\n当前设置: 删除源=否  图层=源  OFFSETGAPTYPE=0")
  25.     (setq sn 0)
  26.     (while (zerop sn)
  27.         (setq tt (strcat "\n指定偏移距离或 [通过(T)/删除(E)/图层(L)]<" (if (= (setq n (getvar "OFFSETDIST")) -1.0) "通过" (rtos n)) ">:" ))
  28.         (initget "Through Erase Layer")
  29.         (setq dist (getdist tt))
  30.         (cond ((= dist nil) (setq sn 1))
  31.               ((= (type dist) 'real) (setvar "OFFSETDIST" dist) (setq sn 1))
  32.               ((= dist "Through") (setvar "OFFSETDIST" -1.0) (setq sn 1))
  33.               ((= dist "Erase") (initget "Yes No")
  34.                                       (setq e1  (getkword
  35.                                                    (strcat
  36.                                                        "\n要在偏移后删除源对象吗?[是(Yes)/否(No)] <"
  37.                                                        (if (= e "n")
  38.                                                            "否"
  39.                                                            "是"
  40.                                                        )
  41.                                                        ">:"
  42.                                                    )
  43.                                                )
  44.                                             
  45.                                       )
  46.                                       (if e1 (if (= e1 "Yes") (setq e "y") (setq e "n")))                                      
  47.               )
  48.               ((= dist "Layer") (initget "Current Sourse")
  49.                                       (setq l1  (getkword
  50.                                                    (strcat
  51.                                                        "\n输入偏移对象的图层选项 [当前(C)/源(S)] <"
  52.                                                        (if (= l "c")
  53.                                                            "当前"
  54.                                                            "源"
  55.                                                        )
  56.                                                        ">:"
  57.                                                    )
  58.                                                )
  59.                                             
  60.                                       )
  61.                                       (if l1 (if (= l1 "Current") (setq l "c") (setq l "s")))
  62.                )
  63.               (t (setq sn 1))
  64.               )
  65.         )
  66.     (setq sn 0)
  67.     (setq si 0)
  68.     (while (zerop sn)
  69.         (command "offset" "e" e "l" l "")
  70.         (initget "Exit Undo")
  71.         (setq en (entsel "\n选择要偏移的对象,或 [退出(E)/放弃(U)] <退出>:"))
  72.         (if (= (type en) 'list)
  73.             (if        (wcmatch (cdr (assoc 0 (entget (car en))))
  74.                          "*LINE,ARC,CIRCLE,ELLIPSE"
  75.                 )
  76.                 (command (car en) "m")
  77.                 (progn (command "") (setq sn -1))
  78.             )
  79.             (progn
  80.                 (command "")
  81.                 (if (and (zerop si) (= en "Undo")) (progn (princ "\n命令已全部放弃。") (setq sn -1 si -1)))
  82.             )
  83.         )
  84.         (setq sn (1+ sn))
  85.         (setq si (1+ si))
  86.     )
  87.     (princ)
  88. )
  89. ;建议使用(c:6)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 06:25 , Processed in 0.445468 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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