明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2824|回复: 16

[源码] 获取指定视口中冻结的图层列表

  [复制链接]
发表于 2017-10-22 18:04 | 显示全部楼层 |阅读模式
本帖最后由 zjh2785 于 2017-10-22 18:06 编辑

函数单独的用法:(LA:GetFreezeLayerForView  (vlax-ename->vla-object (car(entsel))))
返回值: "layer1,layer2",如果没有冻结的图层返回 ""
返回值可直接用于CAD自带的命令恢复图层状态,
具体用法:
  1. (defun C:TT (/ ssent laList i)
  2.   (if (= (getvar "tilemode") 1)
  3.     (setvar "tilemode" 0)
  4.   )
  5.   (if (/= (getvar "cvport") 1)
  6.     (command "_PSPACE")
  7.   )
  8.   (if (setq ssent (ssget '((0 . "VIEWPORT"))))
  9.     (progn
  10.       (setq i 0)
  11.       (repeat (sslength ssent)
  12.         (if (/=        ""
  13.                 (setq laList (LA:GetFreezeLayerForView
  14.                                (vlax-ename->vla-object (ssname ssent i))
  15.                              )
  16.                 )
  17.             )
  18.           (command "_.vplayer" "T" laList "S" (ssname ssent i) "" "")
  19.         )
  20.         (setq i (1+ i))
  21.       )
  22.     )
  23.   )
  24.   (princ)
  25. )



  26. (defun LA:GetFreezeLayerForView  (VpObj / xt xd lyrlst a b)
  27.   (vla-getxdata VpObj "ACAD" 'xt 'xd)
  28.   (mapcar 'set
  29.     '(xt xd)
  30.     (list (safearray-value xt) (safearray-value xd))
  31.   )
  32.   (setq lyrlst "")
  33.   (mapcar '(lambda (a b)
  34.        (if (= a 1003)
  35.          (setq lyrlst (strcat lyrlst (strcase (variant-value b))  ","))
  36.        )
  37.      )
  38.     xt
  39.     xd
  40.   )
  41.   lyrlst
  42. )



评分

参与人数 1明经币 +1 收起 理由
USER2128 + 1 赞一个!

查看全部评分

发表于 2024-5-10 10:34 | 显示全部楼层
;;;按功能在指定视口中冻结特定图层
(defun C:DDT (/ DjKeyN DjKey VP)
  (princ "\n*** 选择视口前,请保持视口中有效图层开启 ***")
  (if (= (getvar "tilemode") 0)
    (progn
      (initget 7 "1 2 3 4")
      (setq Key (getkword "\n需要设置的视口功能: 1-平面布置图 / 2-地面铺装平面图 / 3-天花布置平面图 / 4-立面图"))
      (cond
        ((= Key "1") (setq DjKey "*0-TF-*,*0-DM-*,*FC-Hatch*")) ;_平面布置图
        ((= Key "2") (setq DjKey "*0-TF-*,*0-PM-固定家具*,*DOOR-NAME*,*PUB_TEXT*,*DOOR*,*LVTRY*,*DOOR-NAME*,*PUB_HATCH*,*PUB_SYMB*,*AREA*,*PUB_SYMB*,*WINDOW_GROUND*,*DOTE*")) ;_地面铺装平面图
        ((= Key "3") (setq DjKey "*0-DM-*,*0-PM-固定家具*,*DOOR-NAME*,*PUB_TEXT*,*stair*,*DOOR*,*LVTRY*,*DOOR-NAME*,*PUB_HATCH*,*PUB_SYMB*,*AREA*,*WINDOW_GROUND*,*DOTE*,*FC-Hatch*")) ;_天花布置平面图
        ((= Key "4") (setq DjKey "*填充*,*HATCH*,*ELEV*,*IDEN*,*LEAD*,*SYMB*")) ;_立面图
      )
      (if (setq VP (entsel "\n选择要冻结图层的视口:"))
  (FreezLayInVPCmd (car VP) DjKey)
      )
    )
    (princ "\n该命令仅允许在布局空间有效运行!")
  )
  (princ)
)
;;;支持通配符
(defun FreezLayInVPCmd (Ven Lst / ENT)
  (if (and (= (getvar "tilemode") 0) (= (getvar "cvport") 1)) ;_判断鼠标是否在布局空间
    (progn
      (setq ENT (cdr (assoc 69 (entget Ven))))
      (command "_.MSPACE") ;_切换到模型空间
      (setvar "cvport" ENT)
      (command "_.vplayer" "F" LST "" "") ;_在模型空间中操作,冻结
      (command "_PSPACE") ;_切换到布局空间
    )
    (princ "\n*** 该命令仅允许在布局空间有效运行,请将鼠标切换到布局空间 ***")
  )
)
发表于 2023-8-25 00:17 | 显示全部楼层
flowerson 发表于 2019-10-9 14:42
用LWPOLYLINE来做视口的怎么办?

我也遇到这个问题了,好多是LWPOLYLINE做的视口,没法解决呢
发表于 2023-1-18 13:45 | 显示全部楼层
请问大神、怎么获取到视口内所有未冻结图层的集合啊
发表于 2018-1-30 21:40 | 显示全部楼层
貌似只能解冻哦
发表于 2018-2-1 02:04 | 显示全部楼层
只能解冻哦
发表于 2019-10-9 14:42 | 显示全部楼层
用LWPOLYLINE来做视口的怎么办?
发表于 2019-10-31 22:43 | 显示全部楼层
Thanks for sharing ^^
发表于 2020-3-1 07:29 | 显示全部楼层
不错,这是个指定视口中解冻全部图层的程序。
发表于 2020-5-12 13:54 | 显示全部楼层
非常不错!赞一个!
发表于 2022-12-15 11:05 | 显示全部楼层
请问大神、怎么获取到视口内所有未冻结图层的集合啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-1 10:39 , Processed in 0.163166 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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