pw_design 发表于 2019-10-9 17:30:38

反向冻结图层源码

(defun c:fxdj (/ :vlax-false :vlax-trueacadobjdwgobj layersobj layn
         mspace sobj)
(acad-activex-base)          ;fxdj=反向冻结
(defun acad-activex-base ()
    (vl-load-com)
    (setq acadobj (vlax-get-acad-object))
    (setq dwgobj (vla-get-ActiveDocument acadobj))
    (setq mspace (vla-get-ModelSpace dwgobj))
) ;_ 结束defun
(setq layersobj (vla-get-layers dwgobj))
(vlax-for sobj layersobj
    (setq layn (vla-get-Freeze sobj))
    (if(/= (vla-get-name sobj) "0")
      (progn
(cond ((= layn :vlax-true) (vla-put-Freeze sobj :vlax-false))
      ((= layn :vlax-false) (vla-put-Freeze sobj :vlax-true))
) ;_ 结束cond
      ) ;_ 结束progn
    ) ;_ 结束if
) ;_ 结束vlax-for
(acad-activex-exit)
(defun acad-activex-exit () (vlax-release-object acadobj))
(princ)
)源码有点缺陷。如下图

start4444 发表于 2021-5-14 18:29:22

999999 发表于 2021-5-14 10:37
就是您现在实现的这个代码的功能能否,改成批量框选,目前您的是单选的

用楼主的代码函数就能实现

(defun c:tt5 (/ acadobj dwgobj en i layersobj layson mspace ss);;反向冻结所选图层
        (vl-load-com)
        (setq acadobj (vlax-get-acad-object))
        (setq dwgobj (vla-get-ActiveDocument acadobj))
        (setq mspace (vla-get-ModelSpace dwgobj))
        (setq layersobj (vla-get-layers dwgobj))
        (setq ss (ssget))
        (command "clayer" (cdr (assoc 8 (entget (ssname ss 0)))))
        (setq i -1 layson '())
        (while (setq en (ssname ss (setq i (1+ i))))
                (setq layson (cons (cdr (assoc 8 (entget en))) layson))
        )
        (vlax-for sobj layersobj
    (if(not (member (vla-get-name sobj) layson))
                        (vla-put-Freeze sobj :vlax-true)
    )
)
        (princ)
)

start4444 发表于 2019-10-9 18:02:20

直接命令就可以,不用那么复杂

(defun c:tt5 ()
(command "clayer" (cdr (assoc 8 (entget (car (entsel "\n选对象:"))))) "layer" "f" "*" ""))
(defun c:tt55 ()
(command"layer" "t" "*" ""))

pw_design 发表于 2019-10-9 17:47:31

我必须re一下才能出现已经解锁图层的对象,求各位大佬告知一下如何才能优化这一步

pw_design 发表于 2019-10-10 08:34:29

start4444 发表于 2019-10-9 18:02
直接命令就可以,不用那么复杂

(defun c:tt5 ()


我这个是直接冻结不选对象的

999999 发表于 2021-5-14 10:21:23

start4444 发表于 2019-10-9 18:02
直接命令就可以,不用那么复杂

(defun c:tt5 ()


您好,大神,请问是否可以实现批量反冻结呢,目前单选是很实用的,可否改成可以批量实现呢

999999 发表于 2021-5-14 10:37:30

999999 发表于 2021-5-14 10:21
您好,大神,请问是否可以实现批量反冻结呢,目前单选是很实用的,可否改成可以批量实现呢

就是您现在实现的这个代码的功能能否,改成批量框选,目前您的是单选的

999999 发表于 2021-5-14 19:27:08

start4444 发表于 2021-5-14 18:29
用楼主的代码函数就能实现

(defun c:tt5 (/ acadobj dwgobj en i layersobj layson mspace ss);;反向 ...

谢谢大神,这个就是我想要的效果,
页: [1]
查看完整版本: 反向冻结图层源码