明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 810|回复: 4

[讨论] 求解:这段源码如何把点选改为框选?

[复制链接]
发表于 2024-7-19 17:52:21 | 显示全部楼层 |阅读模式
下面是从论坛发现的源码,可惜选择视口时只能点选,能否使其变为框选从而批量修改视口内的图层冻结。


  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. )




源码来源:按功能在指定视口中冻结特定图层
发表于 2024-7-19 21:13:26 | 显示全部楼层
里面有个entsel,想要框选就用ssget,再遍历图元循环执行。
发表于 2024-7-19 21:41:03 | 显示全部楼层
  • (if (setq VP (entsel "\n选择要冻结图层的视口:"))
  •   (FreezLayInVPCmd (car VP) DjKey)
  •       )
  • 改为
  • (if (setq VP (ssget))
  •   (progn
  •     (setq lst-ent (mapcar '(lambda (x) (cadr x)) (vl-remove-if-not '(lambda (x) (if (= (car x) (caar (ssnamex VP))) t)) (ssnamex VP))))
  •     (foreach x lst-ent (FreezLayInVPCmd x DjKey))
  •   )
  • )
不保熟,没试代码
发表于 2024-7-20 08:12:29 | 显示全部楼层
哦,原来是金牌会员啊。楼上的,你不给全部代码,他不会呀
 楼主| 发表于 2024-7-21 21:26:14 | 显示全部楼层
饼仲郎 发表于 2024-7-19 21:41
  • (if (setq VP (entsel "\n选择要冻结图层的视口:"))
  •   (FreezLayInVPCmd (car VP) DjKey)
  •    ...

  • 试了,可用。感谢!!
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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

    GMT+8, 2024-11-25 12:52 , Processed in 0.179832 second(s), 26 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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