AutoCAD 2007的图层状态
我发现图层状态非常有用。然而,来自ACAD帮助的信息非常有限。要访问层状态,我总是需要传递通常的层属性。。然后单击一些图标。是否可以使用LISP或快捷方式来轻松调用/恢复特定的保存图层状态?比如说一个命令,比如RL1(恢复名为1的层状态),等等。。或类似场景。谢谢! 你是说打开还是关闭图层?如果是这样
http://www.cadtutor.net/forum/showthread.php?t=45943
或者看看:
http://www.theswamp.org/index.php?topic=33764.msg391362#msg391362 我不使用LayerState,但:
(defun c:rl1 nil
(vl-load-com)
(layerstate-restore "1" nil nil)
(princ)
)
阅读layerstate函数的帮助文件,我相信你会有所收获。 谢谢你们的回复和代码,给你们更多的力量!
@李:谢谢,但我认为我的CAD有一个问题-错误消息“没有功能定义”(见附件)。我用的是2007版。你怎么认为?
http://img687.imageshack.us/img687/4999/rl1o.jpg
与ImageShack一起上载。我们 谢谢,不客气 我认为LayerState函数直到2009年才引入。 我在想我的档案文件夹里有一些这样的功能。。。
;;; Alan J. Thompson
;;; LayerStateSave Values
;;; Combine numeric values to use more than one (ie: 32+2+64)
;;; CONSTANT LAYER PROPERTY NUMERIC VALUE
;;; -----------------------------------------------------
;;; acLsAll All 65535
;;; acLsColor Color 32
;;; acLsFrozen Frozen or thawed 2
;;; acLsLineType Linetype 64
;;; acLsLineWeight Lineweight 128
;;; acLsLocked Locked or unlocked 4
;;; acLsNewViewport New viewport layers 16
;;; frozen or thawed
;;; acLsNone None 0
;;; acLsOn On or off 1
;;; acLsPlot Plotting on or off 8
;;; acLsPlotStyle Plot style 256
;;; LayerStateList
(defun LayerStateList (/ #List)
(vlax-for x
(vla-item (vla-getextensiondictionary
(vla-get-layers
(vla-get-activedocument (vlax-get-acad-object))
) ;_ vla-get-layers
) ;_ vla-getextensiondictionary
"ACAD_LAYERSTATES"
) ;_ vla-item
(setq #List (cons (vla-get-name x) #List))
) ;_ vlax-for
(reverse #List)
) ;_ defun
;;; LayerStateManager
(defun LayerStateManager (/)
(or *LayerStateManager*
(setq *LayerStateManager*
(vla-getinterfaceobject
(vlax-get-acad-object)
(strcat
"AutoCAD.AcadLayerStateManager."
(itoa (fix (atof (getvar "acadver"))))
) ;_ strcat
) ;_ vla-getinterfaceobject
) ;_ setq
) ;_ or
(vla-setdatabase
*LayerStateManager*
(vla-get-database
(vla-get-activedocument (vlax-get-acad-object))
) ;_ vla-get-database
) ;_ vla-setdatabase
) ;_ defun
;;; LayerStateRelease
(defun LayerStateRelease (/)
(not (vl-catch-all-error-p
(vl-catch-all-apply
'vlax-release-object
(list *LayerStateManager*)
) ;_ vl-catch-all-apply
) ;_ vl-catch-all-error-p
) ;_ not
) ;_ defun
;;; LayerStateSave
(defun LayerStateSave (#Name #Prop)
(LayerStateManager)
(if
(not
(vl-catch-all-error-p
(vl-catch-all-apply
'(lambda ()
(vlax-invoke-method *LayerStateManager* 'Save #Name #Prop)
) ;_ lambda
) ;_ vl-catch-all-apply
) ;_ vl-catch-all-error-p
) ;_ not
#Name
) ;_ if
) ;_ defun
;;; LayerStateRestore
(defun LayerStateRestore (#Name)
(LayerStateManager)
(if (not
(vl-catch-all-error-p
(vl-catch-all-apply
'(lambda ()
(vlax-invoke-method *LayerStateManager* 'Restore #Name)
) ;_ lambda
) ;_ vl-catch-all-apply
) ;_ vl-catch-all-error-p
) ;_ not
#Name
) ;_ if
) ;_ defun
;;; LayerStateDelete
(defun LayerStateDelete (#Name)
(LayerStateManager)
(if (not
(vl-catch-all-error-p
(vl-catch-all-apply
'(lambda ()
(vlax-invoke-method *LayerStateManager* 'Delete #Name)
) ;_ lambda
) ;_ vl-catch-all-apply
) ;_ vl-catch-all-error-p
) ;_ not
#Name
) ;_ if
) ;_ defun 我明白了,也许这就是为什么我现在的版本不起作用的原因。谢谢 不客气。尝试上述例程。我在运行旧版本的Acad时将它们放在一起。
谢谢Alan,很抱歉我是个新手,但我将如何使用它,我的意思是我应该在命令行键入什么?“defun”后面的单词是指命令吗?谢谢
页:
[1]
2