wudechao 发表于 2014-1-11 01:30:06

请问高手,为什么下面这个图层关闭在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

edata 发表于 2014-1-11 09:50:48

应该是你的电脑上的软件问题,和代码无关。。。
2013 win7 64bit可以关闭。

llsheng_73 发表于 2014-1-11 16:35:26

本帖最后由 llsheng_73 于 2014-1-11 16:37 编辑

不管在哪可以在哪不可以,对于可以确保存在的图层的处理不需要有这么复杂
(vla-put-layeron(vlax-ename->vla-object (tblobjname "LAYER" lay)):vlax-false)

wudechao 发表于 2014-4-12 00:42:15

经过不懈努力,终于找到原因了.是精简版本CAD的问题,精简版本把安装包里的x86\acad\Program Files\Common Files\Autodesk Shared\*.tlb清空为零字节文件.把这些*.tlb文件复制回去就命令就可以用了可以了!
页: [1]
查看完整版本: 请问高手,为什么下面这个图层关闭在Autocad2012下不能运行,而在Autocad2008可以,?