3dwannab 发表于 2022-7-21 07:33:38

用于锁定的Copytolayer命令

我希望能够使用COPYTOLAYER命令将锁定层复制到新层。
 
我试图通过在COPYTOLAYER命令之前和之后解锁层来解决这个问题。
 
当我尝试复制锁定层时,会出现这样的错误:

 
代码如下:
(vl-load-com)

;; PROBLEM
;; AutoCAD gives unhandled exception error with eOnLockedLayer.

;; TO ADD
;; Change this to have undo handling

(defun c:Lay_Copy_Locked (/ layUlist laydata ss)

(setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object)))

; Unlock all layers - https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/unlocking-layers-is-painfully-slow/m-p/2881866#M294136
(vlax-for item (vla-get-layers doc)
    (if (= (vlax-get-property item "Lock") :vlax-true)
      (progn
      (setq Locked_Layers (cons item Locked_Layers)) ; set variable "locked_layers" to all locked layers.
      (vlax-put-property item "Lock" :vlax-false) ; unlock each layer if it is locked.
      ) ; end progn
    ) ; end if
) ; end vlax

;; Copy to layer
(if (setq ss (ssget "_:L"))
    (command "._-copytolayer" ss "")
) ; end if

; If any layers were locked at the beginning, lock them again. -https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/unlocking-layers-is-painfully-slow/m-p/2881866#M294136
(if Locked_Layers
    (mapcar '(lambda (x) (vlax-put-property x "Lock" :vlax-true)) Locked_Layers)
) ; end if

(princ)
) ; defun

(c:Lay_Copy_Locked)
页: [1]
查看完整版本: 用于锁定的Copytolayer命令