明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 844|回复: 8

[源码] 反向冻结图层源码

[复制链接]
发表于 2019-10-9 17:30 | 显示全部楼层 |阅读模式
  1. (defun c:fxdj (/ :vlax-false :vlax-true  acadobj  dwgobj layersobj layn
  2.          mspace sobj)
  3.   (acad-activex-base)          ;fxdj=反向冻结
  4.   (defun acad-activex-base ()
  5.     (vl-load-com)
  6.     (setq acadobj (vlax-get-acad-object))
  7.     (setq dwgobj (vla-get-ActiveDocument acadobj))
  8.     (setq mspace (vla-get-ModelSpace dwgobj))
  9.   ) ;_ 结束defun
  10.   (setq layersobj (vla-get-layers dwgobj))
  11.   (vlax-for sobj layersobj
  12.     (setq layn (vla-get-Freeze sobj))
  13.     (if  (/= (vla-get-name sobj) "0")
  14.       (progn
  15.   (cond ((= layn :vlax-true) (vla-put-Freeze sobj :vlax-false))
  16.         ((= layn :vlax-false) (vla-put-Freeze sobj :vlax-true))
  17.   ) ;_ 结束cond
  18.       ) ;_ 结束progn
  19.     ) ;_ 结束if
  20.   ) ;_ 结束vlax-for
  21.   (acad-activex-exit)
  22.   (defun acad-activex-exit () (vlax-release-object acadobj))
  23.   (princ)
  24. )
源码有点缺陷。如下图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-5-14 18:29 | 显示全部楼层
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)
)

评分

参与人数 1明经币 +1 收起 理由
999999 + 1 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2019-10-9 18:02 | 显示全部楼层
直接命令就可以,不用那么复杂

(defun c:tt5 ()
(command "clayer" (cdr (assoc 8 (entget (car (entsel "\n选对象:"))))) "layer" "f" "*" ""))
(defun c:tt55 ()
(command  "layer" "t" "*" ""))
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-10-9 17:47 | 显示全部楼层
我必须re一下才能出现已经解锁图层的对象,求各位大佬告知一下如何才能优化这一步
 楼主| 发表于 2019-10-10 08:34 | 显示全部楼层
start4444 发表于 2019-10-9 18:02
直接命令就可以,不用那么复杂

(defun c:tt5 ()

我这个是直接冻结  不选对象的
发表于 2021-5-14 10:21 | 显示全部楼层
start4444 发表于 2019-10-9 18:02
直接命令就可以,不用那么复杂

(defun c:tt5 ()

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

点评

批量反冻结什么意思  发表于 2021-5-14 10:26
发表于 2021-5-14 10:37 | 显示全部楼层
999999 发表于 2021-5-14 10:21
您好,大神,请问是否可以实现批量反冻结呢,目前单选是很实用的,可否改成可以批量实现呢

就是您现在实现的这个代码的功能能否,改成批量框选,目前您的是单选的
发表于 2021-5-14 19:27 | 显示全部楼层
start4444 发表于 2021-5-14 18:29
用楼主的代码函数就能实现

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

谢谢大神,这个就是我想要的效果,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-5 08:25 , Processed in 0.544629 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表