命令完成后如何把对象从选择状态中取消
这是一个改变图层的小程 式,但是命令完成后选中的对象还是在选择状态中,每次完成后都要按“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))
)
)
)
(sssetfirst nil nil) 楼上正解,功能可以实现 也可以在程序的后面加上: (command) 这是一个操作先后的问题,你是先选择物体,然后再执行程序,当然程序结束时还处于选择状态,可以把这句(Setq ss (SSGET "I"))改为(Setq ss (SSGET )),先运行程序再选择物体就不会出现这个问题了,一般程序设计基本上都是这样的
多谢“淮上 ”与"LLXXZZ " 指点,问题已解决, 对于在程式后加command的用法在高版本的CAD上有时执行不了,我原来是用COMMAND做的,运行不了才改的。 回复 ljpnb 的帖子
我的这个程式是点击工具条的图标执行的,如果没有选择对象的就把当前层指定为点击图标的层如下两句
(IF (= nil ss) (SETVAR "CLAYER" find_layer))
(if (/= nil ss)(change_obj find_layer))
有选择对象的就把选中的对象改为图标的层,把这句(Setq ss (SSGET "I"))改为(Setq ss (SSGET ))就不能把图标的层定义为当前层了(或者有其它方法可以解决),故就先选择后执行。 我试试效果一样啊 回复 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
怎么没有命令的?
页:
[1]
2