找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 5790|回复: 17

[求助] [求助]:如何改变ssget的提示词?

[复制链接]
发表于 2007-3-4 13:52:28 | 显示全部楼层 |阅读模式

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

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

×
在Autolisp中使用(setq ss1(ssget))时,出来的提示总是“选择对象:”,好象ssget的参数当中也没有一个是改变提示词的。
不知道有没办法把“选择对象:”改成别的提示词?或是还有其它构建选择集的函数可以做到这一点?请各位高手赐教!谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 2个

财富等级: 恭喜发财

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

使用道具 举报

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

使用道具 举报

已领礼包: 24个

财富等级: 恭喜发财

发表于 2007-3-4 15:52:05 | 显示全部楼层
如果什么都不显示就用(setvar "nomutt" 1)
如果希望显示其他文字就需要用grread来模拟选取,用grread模拟还可以改变选取框的颜色
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-4 17:14:05 | 显示全部楼层
十分感谢fools。
我把代码改成如下就可以了:
(princ "提示词:")
(setvar "nomutt" 1)
(setq ss1 (ssget))
(setvar "nomutt" 0)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-3-4 18:19:20 | 显示全部楼层
呵呵,常犯ssget的这个毛病。看来熟悉系统变量也是精通cad的必要呀。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2007-3-5 08:42:38 | 显示全部楼层
[PHP]
(defun my-ssget(str / ss1)
        (if        (or        (= str nil)
                        (= str "")
                )
                (princ "\n选择对象:")
                (princ (strcat "\n" str)
        )
        (setvar "nomutt" 1)
        (setq ss1 (ssget))
        (setvar "nomutt" 0)
        ss1
)
[/PHP]
系统变量就好比CAD这部机器上的一些功能开关,要用好机器,就必须要熟悉它的开关。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-5 15:13:31 | 显示全部楼层
新问题:
如5楼代码,如果选择集选择过程中临时决定退出函数而使用ESC键,则nomutt系统变量就得不到恢复。
请问有没有什么方法拦截ESC,使得函数在退出前做一些必要的恢复工作?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 24个

财富等级: 恭喜发财

发表于 2007-3-5 17:01:19 | 显示全部楼层
[php]
(DEFUN my-ssget        (str / ss1)
  (IF (OR (= str nil) (= str ""))
    (PRINC "\n选择对象:")
    (PRINC (STRCAT "\n" str))
  )
  (SETVAR "nomutt" 1)
  (SETQ ss1 (VL-CATCH-ALL-APPLY 'SSGET))
  (SETVAR "nomutt" 0)
  (IF (VL-CATCH-ALL-ERROR-P ss1)
    nil
    ss1
  )
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 24个

财富等级: 恭喜发财

发表于 2007-3-5 22:02:29 | 显示全部楼层
To 楼上:你的用法错误出在传递给VL-CATCH-ALL-APPLY 的第二个参数是list,不是string
[PHP]
(DEFUN my-ssget        (str lst / ss1)
  (IF (OR (= str nil) (= str ""))
    (PRINC "\n选择对象:")
    (PRINC (STRCAT "\n" str))
  )
  (SETVAR "nomutt" 1)
  (SETQ ss1 (VL-CATCH-ALL-APPLY 'SSGET lst))
  (SETVAR "nomutt" 0)
  (IF (VL-CATCH-ALL-ERROR-P ss1)
    nil
    ss1
  )
)
[/php]


  1. 示例:
  2. 选择全部兰色直线
  3. (my-ssget "test:" '("X" ((0 . "LINE")(62 . 5))))
  4. 窗选
  5. (my-ssget "test:" nil)
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-5 22:18:37 | 显示全部楼层
不好意思,刚刚调试,发现前面我修改的代码好象能运行,但无法调用不带任何参数的(ssget),因此把帖子删了,准备另外提问。
看了上面帖子才知要用(my-ssget "提示词:" nil)进行调用,再次感谢fools。
为使帖子连惯,以便别人查看,把所删帖子再帖上,内容如下:
-------------------------------------------------------------------------------------------------------------------

感谢以上几位的帮助,尤其感谢fools老兄,兄弟确是高手!

9楼老兄的方法较简单,也可行,但是如果重定义*error*的话,如果自己编的lisp不卸载,则其它所有命令或程序的出错全部会转到重定义的error函数。
我最近编的一个程序有两处用到ssget,一处是(ssget),另一处用(ssget ":s"),因此把fools兄的代码更改如下:
(DEFUN my-ssget    (str str1 / ss1)
  (IF (OR (= str nil) (= str ""))
    (PRINC "\n选择对象:")
    (PRINC (STRCAT "\n" str))
  )
  (SETVAR "nomutt" 1)
  (SETQ ss1 (VL-CATCH-ALL-APPLY 'ssget (list  str1)))
  (SETVAR "nomutt" 0)
  (IF (VL-CATCH-ALL-ERROR-P ss1)
    nil
    ss1
  )
)
但不知为何运行总是不对,对于VL-CATCH-ALL-APPLY的用法,我始终没搞清楚,还清fools兄或其它高手再次赐教!谢谢!

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

使用道具 举报

发表于 2007-3-6 18:50:13 | 显示全部楼层
查看函数说明,试了下还是不大明白。譬如以下该怎么修改?谢谢!
  (prompt "\n请选择第一列乘数(单长):")
   (setvar "nomutt" 1)
   (setq ss1 (ssget '((0 . "*TEXT"))))
   (setvar "nomutt" 0)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 24个

财富等级: 恭喜发财

发表于 2007-3-6 19:28:55 | 显示全部楼层
To 楼上
[php]
(my-ssget "\n请选择第一列乘数(单长):" '(((0 . "*TEXT"))))
;;或者
(my-ssget "\n请选择第一列乘数(单长):" (list '((0 . "*TEXT"))))
[/php]
道理很简单,还不能理解的朋友,我告诉你们一种简单的方法:
下面这句是传统用法,大家比较熟悉
(ssget '((0 . "*TEXT")))
将ssget替换为list就是第二个参数了
(list '((0 . "*TEXT")))

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

使用道具 举报

发表于 2007-3-7 09:28:47 | 显示全部楼层
还请帮忙看下,下面代码直接跳过选择了,提示:
命令: gjcd
请选择第一列乘数(单长):
请选择第二列乘数(根数):
输入小数点位数[2]:*取消*
[PHP]
(DEFUN my-ssget (str lst / ss)
  (IF (OR (= str nil) (= str ""))
    (PRINC "\n选择对象:")
    (PRINC (STRCAT "\n" str))
  )
  (SETVAR "nomutt" 1)
  (SETQ ss (VL-CATCH-ALL-APPLY 'SSGET lst))
  (SETVAR "nomutt" 0)
  (IF (VL-CATCH-ALL-ERROR-P ss)
    nil
    ss
  )
)
(defun c:gjcd ()
   (setvar "cmdecho" 0)
   (setq odim (getvar "dimzin"))
   (setvar "dimzin" 1)
   (setq ortho (getvar "orthomode"))
   (setvar "orthomode" 1)
   (setvar "nomutt" 1)
   (setq ss1 (my-ssget "请选择第一列乘数(单长):" '((0 . "*TEXT"))))
   (setvar "nomutt" 0)
   (setvar "nomutt" 1)
   (setq ss2 (my-ssget "请选择第二列乘数(根数):" '((0 . "*TEXT"))))
   (setvar "nomutt" 0)
   (if (null (setq ent_f (getreal "\n输入小数点位数[2]:")))
       (setq ent_f 2)
   )
   (setq pt1 (getpoint "\n选择基点:"))   
   (setq ent1 (entlast))   
   (command "copy" ss2 "" pt1 pause)
   (setq ss3 (ssadd))
   (while (setq ent1 (entnext ent1))
          (ssadd ent1 ss3)
   )
   (setq ss1n (sslength ss1)
         ss2n (sslength ss2)
   )
   (setq htxt (cdr (assoc 40 (entget (ssname ss1 0)))))
   (setq i 0)
   (if (= ss1n ss2n)
       (repeat ss1n
           (setq ent3 (entget (ssname ss3 i)))
           (setq y3 (caddr (assoc 10 ent3)))
           (setq ii 0)
           (repeat ss1n
                   (if (< (abs (- y3 (caddr (assoc 10 (entget (ssname ss1 ii)))))) htxt)
                       (setq text1 (atof (cdr (assoc 1 (entget (ssname ss1 ii))))))
                   )
                   (if (< (abs (- y3 (caddr (assoc 10 (entget (ssname ss2 ii)))))) htxt)
                       (setq text2 (atof (cdr (assoc 1 (entget (ssname ss2 ii))))))
                   )
                   (setq ii (1+ ii))
           )
           (setq text3 (rtos (/ (* text1 text2) 1000) 2 (fix ent_f)))
           (setq ent3 (subst (cons 1 text3) (assoc 1 ent3) ent3))
           (entmod ent3)
           (setq i (1+ i))           
       )
   )           
   (setvar "dimzin" odim)
   (setvar "orthomode" ortho)
   (princ)
)
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 17:50 , Processed in 0.220369 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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