onzki 发表于 2022-7-6 10:47:05

AutoCAD 2007的图层状态

我发现图层状态非常有用。然而,来自ACAD帮助的信息非常有限。要访问层状态,我总是需要传递通常的层属性。。然后单击一些图标。是否可以使用LISP或快捷方式来轻松调用/恢复特定的保存图层状态?比如说一个命令,比如RL1(恢复名为1的层状态),等等。。或类似场景。
 
谢谢!

Lt Dan's l 发表于 2022-7-6 10:54:23

你是说打开还是关闭图层?如果是这样
 
http://www.cadtutor.net/forum/showthread.php?t=45943
 
或者看看:
 
http://www.theswamp.org/index.php?topic=33764.msg391362#msg391362

Lee Mac 发表于 2022-7-6 10:58:55

我不使用LayerState,但:
 

(defun c:rl1 nil
(vl-load-com)
(layerstate-restore "1" nil nil)
(princ)
)

 
阅读layerstate函数的帮助文件,我相信你会有所收获。

onzki 发表于 2022-7-6 11:06:13

谢谢你们的回复和代码,给你们更多的力量!
@李:谢谢,但我认为我的CAD有一个问题-错误消息“没有功能定义”(见附件)。我用的是2007版。你怎么认为?
http://img687.imageshack.us/img687/4999/rl1o.jpg
 
与ImageShack一起上载。我们

Lee Mac 发表于 2022-7-6 11:09:44

谢谢,不客气

alanjt 发表于 2022-7-6 11:12:31

我认为LayerState函数直到2009年才引入。

alanjt 发表于 2022-7-6 11:18:58

我在想我的档案文件夹里有一些这样的功能。。。
 
 
;;; 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

onzki 发表于 2022-7-6 11:26:02

我明白了,也许这就是为什么我现在的版本不起作用的原因。谢谢

alanjt 发表于 2022-7-6 11:31:04

不客气。尝试上述例程。我在运行旧版本的Acad时将它们放在一起。

onzki 发表于 2022-7-6 11:36:06

 
谢谢Alan,很抱歉我是个新手,但我将如何使用它,我的意思是我应该在命令行键入什么?“defun”后面的单词是指命令吗?谢谢
页: [1] 2
查看完整版本: AutoCAD 2007的图层状态