明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 9542|回复: 37

[源码] 按功能在指定视口中冻结特定图层

[复制链接]
发表于 2013-6-15 17:01:15 | 显示全部楼层 |阅读模式
本帖最后由 mj0000 于 2014-5-10 15:08 编辑

这两天在折腾出图的事,在布局中布图调整视口中图层显示太折腾人了,所以就有了这个东西
函数有参考龙版的代码,谢了
论坛中其他源码函数也试过,但是都不支持通配符操作,还是用command方式支持通配符,速度也不慢,可以接受
以下是源码,需要的自己改图层
  1. ;;;按功能在指定视口中冻结特定图层
  2. (defun C:Tools-LAY-SKGNDJ (/ DjKeyN DjKey VP)
  3.   (princ "\n*** 选择视口前,请保持视口中有效图层开启 ***")
  4.   (if (= (getvar "tilemode") 0)
  5.     (progn
  6.       (initget 7 "1 2 3 4")
  7.       (setq Key (getkword "\n需要设置的视口功能: 1-总平面图 / 2-分区铺装索引平面图 / 3-竖向平面图 / 4-定位平面图"))
  8.       (cond
  9.         ((= Key "1") (setq DjKey "*ELEV*,*COOR*,*IDEN*,*LEAD*,*SYMB*,*PUB_DIM*")) ;_总平面图
  10.         ((= Key "2") (setq DjKey "*ELEV*,*COOR*,*SYMB*,*PUB_DIM*")) ;_分区铺装索引平面图
  11.         ((= Key "3") (setq DjKey "*填充*,*HATCH*,*COOR*,*IDEN*,*LEAD*,*SYMB*,*PUB_DIM*")) ;_竖向平面图
  12.         ((= Key "4") (setq DjKey "*填充*,*HATCH*,*ELEV*,*IDEN*,*LEAD*,*SYMB*")) ;_定位平面图
  13.       )
  14.       (if (setq VP (entsel "\n选择要冻结图层的视口:"))
  15.   (FreezLayInVPCmd (car VP) DjKey)
  16.       )
  17.     )
  18.     (princ "\n该命令仅允许在布局空间有效运行!")
  19.   )
  20.   (princ)
  21. )
  22. ;;;支持通配符
  23. (defun FreezLayInVPCmd (Ven Lst / ENT)
  24.   (if (and (= (getvar "tilemode") 0) (= (getvar "cvport") 1)) ;_判断鼠标是否在布局空间
  25.     (progn
  26.       (setq ENT (cdr (assoc 69 (entget Ven))))
  27.       (command "_.MSPACE") ;_切换到模型空间
  28.       (setvar "cvport" ENT)
  29.       (command "_.vplayer" "F" LST "" "") ;_在模型空间中操作,冻结
  30.       (command "_PSPACE") ;_切换到布局空间
  31.     )
  32.     (princ "\n*** 该命令仅允许在布局空间有效运行,请将鼠标切换到布局空间 ***")
  33.   )
  34. )

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2019-5-25 16:27:57 | 显示全部楼层
(defun c:vd (/ ss n index lay ent ffg)
  (setvar "cmdecho" 0)
  (setq ffg (getvar "TILEMODE"))
  (if (= ffg 0)
    (progn
      (command "_.MSPACE")
      (prompt "\n请选择冻结物体所在的图层<退出>:")
      (setq ss (ssget))
      (if (/= ss nil)
        (progn
          (setq n (sslength ss))
          (setq index 0)
          (repeat n
            (setq ent (ssname ss index))
            (setq lay (cdr (assoc 8 (entget ent))))
            (command "_.vplayer" "F" lay "" "")
            (setq index (+ index 1))
          );_结束repeat
        );_结束progn
        (progn
          (princ "\n未选到物体。")
        );_结束progn
      );_结束if
    );_结束progn
    (progn
      (princ "\n请转到图纸空间再使用本命令。")
    );_结束progn
  );_结束if
  (command "_.PSPACE")
  (setvar "cmdecho" 1)
  (princ)
)
回复 支持 1 反对 0

使用道具 举报

发表于 2017-10-22 14:11:03 | 显示全部楼层
一看楼主就是做景观的....感谢分享!!!!
多发点这些,我等菜鸟也可以学习学习
发表于 2013-6-16 15:15:04 | 显示全部楼层
支持一下源码。
发表于 2013-7-15 21:15:52 | 显示全部楼层
用了没有效果,在CAD2012
发表于 2013-7-15 23:43:03 | 显示全部楼层
cad自带的这个功能吧?
 楼主| 发表于 2013-7-17 12:18:34 | 显示全部楼层
dongya1235 发表于 2013-7-15 23:43
cad自带的这个功能吧?

什么命令,提示下
 楼主| 发表于 2013-7-17 12:19:17 | 显示全部楼层
xieyanghui 发表于 2013-7-15 21:15
用了没有效果,在CAD2012

2008下面有效果,要在布局里面用的
发表于 2013-7-18 09:05:21 | 显示全部楼层
mj0000 发表于 2013-7-17 12:18
什么命令,提示下

在2012版cad中:
切换回模型空间。

命令:
命令: *取消*

命令:
命令:
命令: _layiso
当前设置: 隐藏图层, Viewports=视口冻结

选择要隔离的图层上的对象或 [设置(S)]: 找到 1 个

选择要隔离的图层上的对象或 [设置(S)]:

图层 DGX 已在该视口中隔离。

切换回模型空间。

命令:
命令:
命令: _layvpi
当前设置: 布局=当前布局,块嵌套级别=块
选择要在视口中隔离的图层上的对象或 [设置(S)/放弃(U)]: *取消*
 楼主| 发表于 2013-7-18 12:19:10 | 显示全部楼层
这个命令还真没用过,这个程序的目的就是图层设置规范化了之后,直接按视口作用设置,不考虑手动操作了
发表于 2014-4-12 15:50:37 | 显示全部楼层
mj0000 发表于 2013-7-18 12:19
这个命令还真没用过,这个程序的目的就是图层设置规范化了之后,直接按视口作用设置,不考虑手动操作了

我在07下,没反应。
发表于 2014-4-12 16:13:32 | 显示全部楼层
windowns456 发表于 2014-4-12 15:50
我在07下,没反应。

提示未知命令
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-14 14:30 , Processed in 0.245034 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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