请问高手,为什么下面这个图层关闭在Autocad2012下不能运行,而在Autocad2008可以,?
本帖最后由 wudechao 于 2014-1-12 00:41 编辑;############################关闭图层###########################
(defun c:tb (/ ss ent index old_lay lay1 temp ffg fyf laylst layer layers)
(vl-load-com)
(setvar "cmdecho" 0)
(setq old_lay (getvar "clayer"))
(setq layers (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))))
(if (not (setq ss (ssget "i")))
(progn
(prompt "\n选取要关闭物体所在的图层: ")
(setq ss (ssget))
);_ 结束progn
);_ 结束if
(if (= ss nil)
(princ "\n没有选到要关闭的物体.")
(progn
(setq index 0
tmq ""
temp ""
laylst '()
)
(repeat (sslength ss)
(setq ent (ssname ss index))
(setq lay1 (cdr (assoc 8 (entget ent))))
(if (not (member lay1 laylst))
(progn
(setq laylst (cons lay1 laylst))
(setq layer (vla-get-layer (vlax-ename->vla-object ent)))
(vla-put-layeron (vla-item layers layer) :vlax-false)
(setq ffg (strcase lay1))
(setq ffg (strcat "*" ffg "*"))
(setq temp (strcat temp ffg))
);_ 结束progn
);_ 结束if
(setq index (+ index 1))
);_ 结束repeat
(prompt (strcat "\n图层《 " temp " 》已经被关闭."))
);_ 结束progn
);_ 结束if
(setvar "cmdecho" 1)
(princ)
);_ 结束defun
应该是你的电脑上的软件问题,和代码无关。。。
2013 win7 64bit可以关闭。 本帖最后由 llsheng_73 于 2014-1-11 16:37 编辑
不管在哪可以在哪不可以,对于可以确保存在的图层的处理不需要有这么复杂
(vla-put-layeron(vlax-ename->vla-object (tblobjname "LAYER" lay)):vlax-false) 经过不懈努力,终于找到原因了.是精简版本CAD的问题,精简版本把安装包里的x86\acad\Program Files\Common Files\Autodesk Shared\*.tlb清空为零字节文件.把这些*.tlb文件复制回去就命令就可以用了可以了!
页:
[1]