明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2725|回复: 10

命令完成后如何把对象从选择状态中取消

[复制链接]
发表于 2011-7-3 00:14:19 | 显示全部楼层 |阅读模式
这是一个改变图层的小程 式,但是命令完成后选中的对象还是在选择状态中,每次完成后都要按“esc",请各位修改一下命令完成后把对象从选择状态中取消。

;;;命令(change_layer "dim")


(Defun change_layer (find_layer / ss old_la)
(SETVAR "cmdecho" 0)
(VL-LOAD-COM)
(setq old_la (getvar "clayer"))
(Setq ss (SSGET "I"))  
(IF (= nil ss) (SETVAR "CLAYER" find_layer))
(if (/= nil ss)(change_obj find_layer))
;(Princ find_layer)
(Princ)
)

(defun change_obj( find_layer / i obj)
   (setq i 0)
   (repeat (sslength ss)
    (progn
    (setq obj (vlax-ename->vla-object (ssname ss i)))
    (vla-put-Layer obj find_layer)
    (vla-put-Linetype obj "ByLayer")
    (vla-put-LinetypeScale obj 1)
    (vla-put-Color obj acByLayer)
    (setq i (1+ i))
   )
  )
)



本帖子中包含更多资源

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

x
发表于 2011-7-3 01:33:27 | 显示全部楼层
(sssetfirst nil nil)
发表于 2011-7-3 08:28:22 | 显示全部楼层
楼上正解,功能可以实现
发表于 2011-7-3 08:29:01 | 显示全部楼层
也可以在程序的后面加上: (command)
发表于 2011-7-3 09:15:31 | 显示全部楼层
这是一个操作先后的问题,你是先选择物体,然后再执行程序,当然程序结束时还处于选择状态,可以把这句(Setq ss (SSGET "I"))  改为(Setq ss (SSGET ))  ,先运行程序再选择物体就不会出现这个问题了,一般程序设计基本上都是这样的

 楼主| 发表于 2011-7-3 09:31:55 | 显示全部楼层
多谢“淮上 ”与"LLXXZZ " 指点,问题已解决, 对于在程式后加command的用法在高版本的CAD上有时执行不了,我原来是用COMMAND做的,运行不了才改的。
 楼主| 发表于 2011-7-3 10:35:22 | 显示全部楼层
回复 ljpnb 的帖子

我的这个程式是点击工具条的图标执行的,如果没有选择对象的就把当前层指定为点击图标的层如下两句
(IF (= nil ss) (SETVAR "CLAYER" find_layer))
(if (/= nil ss)(change_obj find_layer))
有选择对象的就把选中的对象改为图标的层,把这句(Setq ss (SSGET "I"))  改为(Setq ss (SSGET ))就不能把图标的层定义为当前层了(或者有其它方法可以解决),故就先选择后执行。
发表于 2011-7-3 10:46:26 | 显示全部楼层
我试试效果一样啊
 楼主| 发表于 2011-7-3 11:17:05 | 显示全部楼层
回复 ljpnb 的帖子

我又修改了一下,我把完整的程式发上来给大家看看。
;;;(change_layer "螺丝层")
(Defun change_layer (find_layer / ss search_lay old_la i obj)
(SETVAR "cmdecho" 0)
(VL-LOAD-COM)
(setq old_la (getvar "clayer"))
(Setq ss (SSGET "I"))
(IF (= (setq search_lay (tblsearch "layer" find_layer)) nil)
(cond
((= find_layer "POLT")(new_lay "POLT"     7    "CONTINUOUS"))
((= find_layer "G1")(new_lay "G1"         7    "CONTINUOUS"))
((= find_layer "螺丝层")(new_lay "螺丝层"     3    "CONTINUOUS"))
((= find_layer "螺丝剖面层")(new_lay "螺丝剖面层" 3  "hidden"))
((= find_layer "中心线层")(new_lay "中心线层"   1    "CENTER"))
((= find_layer "短虚线层")(new_lay "短虚线层"   3    "HIDDEN"))
((= find_layer "长虚线层")(new_lay "长虚线层"   6    "DASHED"))
((= find_layer "尺寸线层")(new_lay "尺寸线层"   4    "CONTINUOUS"))
((= find_layer "文字层")(new_lay "文字层"     6    "CONTINUOUS"))
((= find_layer "顶出板层")(new_lay "顶出板层"   111  "HIDDEN"))
((= find_layer "线切割层")(new_lay "线切割层"   2    "CONTINUOUS"))
((= find_layer "线割虚线层")(new_lay "线割虚线层"   62    "hidden"))
((= find_layer "细实线层")(new_lay "细实线层"   2    "CONTINUOUS"))
((= find_layer "剖面线层")(new_lay "剖面线层"   40   "CONTINUOUS"))
((= find_layer "假想线层")(new_lay "假想线层"   8    "PHANTOM"))
((= find_layer "模仁水路层")(new_lay "模仁水路层" 171  "DASHED"))
((= find_layer "模板水路层")(new_lay "模板水路层" 141  "DASHED"))
((= find_layer "滑块水路层")(new_lay "滑块水路层" 31   "DASHED"))
((= find_layer "汽泡球层")(new_lay "汽泡球层"   241  "PHANTOM"))
((= find_layer "流道层")(new_lay "流道层"     2    "CONTINUOUS"))
((= find_layer "顶针平面层")(new_lay "顶针平面层"     7    "CONTINUOUS"))
((= find_layer nil)(princ "\n 没有定义的层"))
)
);;;end cond
(cond
((and (= search_lay nil)(= ss nil)) (princ "\n 没有定义的层"))
((and (/= search_lay nil)(= ss nil)) (SETVAR "CLAYER" find_layer))
((/= ss nil)
(progn
   (setq i 0)
   (repeat (sslength ss)
    (progn
    (setq obj (vlax-ename->vla-object (ssname ss i)))
    (vla-put-Layer obj find_layer)
    (vla-put-Linetype obj "ByLayer")
    (vla-put-LinetypeScale obj 1)
    (vla-put-Color obj acByLayer)
    (setq i (1+ i))
   )
  )
  (sssetfirst nil nil)
)
)
);;;end cond
;(Princ find_layer)
(Princ)
)

工具条如下图
e:\66.jpg
发表于 2012-6-2 23:32:01 | 显示全部楼层
怎么没有命令的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 07:50 , Processed in 0.172545 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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