找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1637|回复: 17

[求助] [求助]:如何使选集S1,单击左键时,不被退出?

[复制链接]
发表于 2007-6-19 08:44:23 | 显示全部楼层 |阅读模式

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

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

×

  1.   [FONT=courier new]
  2. (defun c:w ()
  3.   (princ "\n*** 图元改层◆|颜色→Bylayer| ***")
  4.   (setq cm (getvar "cmdecho"))
  5.   (setq *error* cd_err)
  6.   (setvar "cmdecho" 1)
  7.   (princ "\n选择要更改图层的图元 <退出>:")
  8.   (setq ss (ssget))
  9.   (if ss
  10.     (progn
  11.            (if (setq s1 (car (entsel "\n拾取目标图层上的图元 或, <当前图层>:")))
  12.                (command ".laymch" ss "" s1)
  13.                (command ".laymch" ss "" "" "y")                         ;;;也可用(command ".laycur" ss "")
  14.            )
  15.                (while (/= 0 (getvar "cmdactive")) (command pause))
  16.                (setvar "cmdecho" 0)
  17.                (command ".chprop" ss "" "c" "bylayer" "")
  18.     )
  19.   )
  20.   (setvar "cmdecho" cm)
  21.   (princ)
  22. )

  23. (defun cd_err (s)
  24.   (setvar "cmdecho" cm)
  25.   (command "_.undo" "_e")
  26. )
  27.   [/FONT]


如何使上面的代码中的选集S1,在用户选择对象单击左键没有选择到对象时,不退出,而继续的提示点选对象。单击右键可以退出。

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

使用道具 举报

 楼主| 发表于 2007-6-19 12:22:11 | 显示全部楼层
用刷子当然能行。但是我还是想,用程序如何来解决?
这个程序可以将对象改在目标图层或者是当前图层上,但是刷子没有这个灵活?
而且laymch,在2007中已经集成到CAD中去了。所以想如何更能灵活的运用此命令?
救命呀!长老!
谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-6-19 13:56:37 | 显示全部楼层
1.laymch这个命令没有!我是2004的!
2.其实只要改组码8,就可以单独匹配图层了!
3.“如何使选集S1,单击左键时,不被退出? ”可以使用条件或循环语句!
比如:
  1. (setq s1 (car (entsel "\n拾取目标图层上的图元 或, <当前图层>:")))
  2.            (if (null s1) (setq s1 (car (entsel "\n拾取目标图层上的图元 或, <当前图层>:"))))
  3. 或者把if改while
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 10404个

财富等级: 富甲天下

发表于 2007-6-19 16:46:27 | 显示全部楼层
这样试试:
[php]
(defun c:w ()
  (princ "\n*** 图元改层◆|颜色→Bylayer| ***")
  (setq cm (getvar "cmdecho"))
  (setq *error* cd_err)
  (setvar "cmdecho" 1)
  (princ "\n选择要更改图层的图元 <退出>:")
  (setq ss (ssget))
  (if ss (progn
   (PRINC "\n拾取目标图层上的图元 或, <当前图层>:"
   (if (setq s1 (SSGET))
    (command ".laymch" ss "" (SSNAME s1 0))
    (command ".laymch" ss "" "" "y")           ;;;也可用(command ".laycur" ss "")
   )
   (while (/= 0 (getvar "cmdactive")) (command pause))
   (setvar "cmdecho" 0)
   (command ".chprop" ss "" "c" "bylayer" "")
  ))
  (setvar "cmdecho" cm)
  (princ)
)

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

使用道具 举报

已领礼包: 10404个

财富等级: 富甲天下

发表于 2007-6-19 16:53:22 | 显示全部楼层
这样试试:
[php]
(defun c:w ()
  (princ "\n*** 图元改层◆|颜色→Bylayer| ***")
  (setq cm (getvar "cmdecho"))
  (setq *error* cd_err)
  (setvar "cmdecho" 1)
  (princ "\n选择要更改图层的图元 <退出>:")
  (setq ss (ssget))
  (if ss (progn
   (PRINC "\n拾取目标图层上的图元 或, <当前图层>:"
   (if (setq s1 (SSGET))
    (command ".laymch" ss "" (SSNAME s1 0))
    (command ".laymch" ss "" "" "y")           ;;;也可用(command ".laycur" ss "")
   )
   (while (/= 0 (getvar "cmdactive")) (command pause))
   (setvar "cmdecho" 0)
   (command ".chprop" ss "" "c" "bylayer" "")
  ))
  (setvar "cmdecho" cm)
  (princ)
)

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

使用道具 举报

 楼主| 发表于 2007-6-19 17:17:21 | 显示全部楼层
楼主的代码还是不行,程序要求是,左键如果没有点选到图元的话,断续的提示点选图元。
而现在楼主的程序是,左键如果没有点选到图元的话,就会把已经选择的对象放到当前层。

正确的程序应该是,左键提示点选图元,如果没有点选到图元的话,循环的提示选择对象。只有点右键或者空格时,就略过左键点选图元这一步,直接把已经选择的对象放到当前层上。也就是要求程序能自己识别鼠标左、右键。

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

使用道具 举报

 楼主| 发表于 2007-6-19 17:31:07 | 显示全部楼层
楼主的代码还是不行,程序要求是,左键如果没有点选到图元的话,断续的提示点选图元。
而现在楼主的程序是,左键如果没有点选到图元的话,就会把已经选择的对象放到当前层。

正确的程序应该是,左键提示点选图元,如果没有点选到图元的话,循环的提示选择对象。只有点右键或者空格时,就略过左键点选图元这一步,直接把已经选择的对象放到当前层上。也就是要求程序能自己识别鼠标左、右键。

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

使用道具 举报

已领礼包: 10404个

财富等级: 富甲天下

发表于 2007-6-19 21:12:48 | 显示全部楼层
可上面的程序是左键如果选不到图元可以继续选择图元直到用右键或空格结束选择,已经接近目标了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-6-19 23:31:12 | 显示全部楼层
看楼主问题提的挺诚恳的,路过,顺便
[php]
(defun c:tt ()
  (while
    (if        (not (setq a (entsel)))
      (/= 52 (getvar "errno"))
    )
  )
  a
)[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2007-6-20 14:43:31 | 显示全部楼层
最初由 雨箭风刀 发布
[B]看楼主问题提的挺诚恳的,路过,顺便
[php]
(defun c:tt ()
  (while
    (if        (not (setq a (entsel)))
      (/= 52 (getvar "errno"))
    )
  )
  a
)[/php] [/B]

这个我喜欢,非常棒!
原来有错误(类型)的变量!厉害啊。

原先不懂,特此修正:
errno表示当 AutoCAD 探测出一个 AutoLISP 函数访问导致的错误时,显示其适当的错误编号。
错误编号52代表的意思: Entity selection: null response
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-21 08:57:21 | 显示全部楼层
真是惭愧,梁兄提供的代码不会运用呀!
梁兄能否直接帮忙更改一下程序?
谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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