明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: mj0000

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

[复制链接]
发表于 2014-5-9 13:37:06 | 显示全部楼层
TOOLS-LAY-SKGNDJ
*** 选择视口前,请保持视口中有效图层开启 ***
需要设置的视口功能: 1-天花布置平面图 / 2-地面铺装平面图 / 3-平面布置图 /
4-定位平面图3

选择要冻结图层的视口:未知命令“TOOLS-LAY-SKGNDJ”。按 F1 查看帮助。
这个是指示信息!

;;;按功能在指定视口中冻结特定图层
(defun C:Tools-LAY-SKGNDJ (/ DjKeyN DjKey DjLst 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-TF-天花灯具布置*,*0-TF-天花尺寸标注*,*PUB_*,*SYMB*,*PUB_DIM*")) ;_总平面图
        ((= Key "2") (setq DjKey "*0-DM-地面布置*,*0-DM-地面家具配景*,*0-DM-地面尺寸标注*,*PUB_*,*PUB_DIM*")) ;_分区铺装索引平面图
        ((= Key "3") (setq DjKey "*填充*,*HATCH*,**,*IDEN*,*LEAD*,*SYMB*,*PUB_DIM*")) ;_竖向平面图
        ((= Key "4") (setq DjKey "*填充*,*HATCH*,*ELEV*,*IDEN*,*LEAD*,*SYMB*")) ;_定位平面图
      )
      (if (setq VP (entsel "\n选择要冻结图层的视口:"))
  (FreezLayInVPCmd (car VP) DjLst)
      )
    )
    (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*** 该命令仅允许在布局空间有效运行,请将鼠标切换到布局空间 ***")
  )
)
 楼主| 发表于 2014-5-9 14:03:55 | 显示全部楼层
小毛草 发表于 2014-5-9 13:37
TOOLS-LAY-SKGNDJ
*** 选择视口前,请保持视口中有效图层开启 ***
需要设置的视口功能: 1-天花布置平面图 ...

(command "_.vplayer" "F" LST "" "") ;_在模型空间中操作,冻结

(command "_.vplayer" "F" LST "")
再试一试
发表于 2014-5-9 19:58:21 | 显示全部楼层
改了试了,无什么效果,呵呵,真的不知是什么问题了!
发表于 2014-5-9 20:07:21 | 显示全部楼层
mj0000 发表于 2014-5-9 14:03
(command "_.vplayer" "F" LST "" "") ;_在模型空间中操作,冻结

(command "_.vplayer" "F" LST "") ...

LST 是什么,好像都没找到
发表于 2014-5-10 08:55:09 | 显示全部楼层
在视口中冻结与解冻,autocad中有命令:冻结是layfrz或vplayer并选F选项,解冻是vplayer并选T选项,其他按如下操作:1、若解冻某一具体图层,直接单击所在图层的图形;2、若解冻全部图层,则用通配符“*”并选全部(A)退出即可。注意:laythw只能解冻模型空间中的图层,不能用于视口中。
 楼主| 发表于 2014-5-10 14:25:02 | 显示全部楼层
無恒的地盘 发表于 2014-5-9 20:07
LST 是什么,好像都没找到

Lst是函数变量,在 C:Tools-LAY-SKGNDJ函数中的(FreezLayInVPCmd (car VP) DjLst)这句中的DjLst就等于lst。
 楼主| 发表于 2014-5-10 15:07:13 | 显示全部楼层
無恒的地盘 发表于 2014-5-9 20:07
LST 是什么,好像都没找到

有个变量错了,不好意思 (FreezLayInVPCmd (car VP) DjLst) 应该为  (FreezLayInVPCmd (car VP) DjKey)   再试试看
发表于 2014-5-10 20:00:54 | 显示全部楼层

修改一下可以用了,是点击视口冻结图层的,没有解冻图层功能。

本帖最后由 無恒的地盘 于 2014-5-10 20:05 编辑
mj0000 发表于 2014-5-10 15:07
有个变量错了,不好意思 (FreezLayInVPCmd (car VP) DjLst) 应该为  (FreezLayInVPCmd (car VP) DjKey)   ...
  1. ;;;按功能在指定视口中冻结特定图层
  2. (defun C:vb (/ DjKeyN DjKey DjLst VP)
  3.   (princ "\n*** 选择视口前,请保持视口中有效图层开启 ***")
  4.   (setvar "cmdecho" 0)
  5.   (if (= (getvar "tilemode") 0)
  6.     (progn
  7.       (setq DjKeyN (mycadgetkword
  8.            "\n①问墙定位图 ②平面布置图 ③平面家私开线图/索引图 ④天花平面布置图 ⑤天花灯具开线图 ⑥天花灯具指向图 ⑦地面材质铺贴图 ⑧地面材质开线图 :<1>"
  9.            '("1" "2" "3" "4" "5" "6" "7" "8" "9") "1")
  10.       )
  11. ;;;      (initget 7 "1 2 3 4")
  12. ;;;      (setq Key (getkword "\n需要设置的视口功能: 1_平面布置 / 2_平面家私开线图/索引图 / 3_天花平面布置图 / 4_天花灯具开线图"))
  13.       (cond
  14.         ((= DjKeyN "1") (setq DjKey "F-FL*,C-CE*,P-D*,P-W*,P-F*,P-L*,P-i*"))
  15.         ((= DjKeyN "2") (setq DjKey "C-CE*,F-FL*"))
  16.         ((= DjKeyN "3") (setq DjKey "C-CE*,P-D*,P-W*,P-F*,P-L*,P-i*"))
  17.         ((= DjKeyN "4") (setq DjKey "P-D*,P-W*,P-F*,P-L*,P-i*"))
  18.         ((= DjKeyN "5") (setq DjKey "P-D*,P-W*,P-F*,P-L*,P-i*"))
  19.         ((= DjKeyN "6") (setq DjKey "*填充*"))
  20.         ((= DjKeyN "7") (setq DjKey "*填充*"))
  21.         ((= DjKeyN "8") (setq DjKey "*填充*"))
  22.       )
  23.       (command "_PSPACE")
  24.       (if (setq VP (entsel "\n选择要冻结图层的视口:"))
  25.   (FreezLayInVPCmd (car VP) DjKey)
  26.       )
  27.     )
  28.     (princ "\n该命令仅允许在布局空间有效运行!")
  29.   )
  30.   (princ)
  31. )
  32. ;;;支持通配符
  33. (defun FreezLayInVPCmd (Ven Lst / ENT)
  34.   (if (and (= (getvar "tilemode") 0) (= (getvar "cvport") 1)) ;_判断鼠标是否在布局空间
  35.     (progn
  36.       (setq ENT (cdr (assoc 69 (entget Ven))))
  37.       (command "_.MSPACE") ;_切换到模型空间
  38.       (setvar "cvport" ENT)
  39.       (command "_.vplayer" "F" LST "" "") ;_在模型空间中操作,冻结
  40.       (command "_PSPACE") ;_切换到布局空间
  41.     )
  42.     (princ "\n*** 该命令仅允许在布局空间有效运行,请将鼠标切换到布局空间 ***")
  43.   )
  44. )
发表于 2014-5-23 21:13:19 | 显示全部楼层
兄弟,成功了!在AUTOCAD2004可以用了!多谢!
发表于 2014-5-25 00:20:06 | 显示全部楼层
在CAD2012还是不行,提示*** 选择视口前,请保持视口中有效图层开启 ***Error: no function definition: MYCADGE
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 16:20 , Processed in 0.152079 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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