明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 21006|回复: 88

[源码] 隐藏隔离对象代码,感谢Gu_xl超级版主!

  [复制链接]
发表于 2013-11-12 09:43 | 显示全部楼层 |阅读模式
本帖最后由 flyfox1047 于 2013-11-13 12:50 编辑

此LISP代码可以隐藏选择到的对象,想求一段类似于CAD2012里的“隔离对象”功能的LISP,就是隐藏选择以外的对象,作为YC4
望大神们帮忙完善,谢谢!

  1.      ;YC1:隐藏选中的对象 ;YC2:隐藏同一颜色的对象 ;YC3:只显示选择颜色的对象 ;XS:显示所有隐藏的对象
  2. (defun c:yc1 (/ ss ssn n)
  3.   (princ "\n请选择需要隐藏的对象:")
  4.   (setq ss (ssget))
  5.   (command "undo" "be")
  6.   (setvar "cmdecho" 0)
  7.   (setq n 0)
  8.   (while (< n (sslength ss))
  9.     (setq ssn (ssname ss n))
  10.     (setq ssn (entget ssn))
  11.     (setq ssn (append ssn '((60 . 1))))
  12.                                         ;(setq ssn (cons '(60 . 1) ssn))
  13.     (entmod ssn)
  14.     (setq n (1+ n))
  15.   )
  16.   (command "undo" "e")
  17.   (princ)
  18. )
  19. (defun c:yc2 (/ ss ssn n cor m ss1 pd ssm)
  20.   (princ "\n请选择需要隐藏的颜色:")
  21.   (setq ss (nth 0 (entsel)))
  22.   (command "undo" "be")
  23.   (setvar "cmdecho" 0)
  24.   (setq cor (assoc 62 (entget ss)))        ;颜色如果随层,按图层颜色
  25.   (if (= cor nil)
  26.     (progn (setq tc (cdr (assoc 8 (entget ss))))
  27.            (setq tc (tblsearch "layer" tc))
  28.            (setq cor (assoc 62 tc))
  29.     )
  30.   )
  31. ;;;找出不是随层符合颜色的对象
  32.   (setq ss (ssget "x" (list cor)))
  33.   (if (/= ss nil)
  34.     (progn (setq n 0)
  35.            (while (< n (sslength ss))
  36.              (setq ssn (ssname ss n))
  37.              (setq ssn (entget ssn))
  38.              (setq ssn (append ssn '((60 . 1))))
  39.              (entmod ssn)
  40.              (setq n (1+ n))
  41.            )
  42.     )
  43.   )
  44. ;;;找出随层符合颜色的对象
  45.   (setq tc (tblnext "layer" "0"))
  46.   (while (/= tc nil)
  47.     (if        (equal cor (assoc 62 tc))
  48.       (progn (setq ss1 (ssget "x" (list (cons 8 (cdr (assoc 2 tc))))))
  49.              (if (/= ss1 nil)
  50.                (progn (setq m 0)
  51.                       (while (< m (sslength ss1))
  52.                         (setq ssm (entget (ssname ss1 m)))
  53.                         (setq pd (assoc 62 ssm))
  54.                         (if (= pd nil)
  55.                           (progn (setq ssm (append ssm '((60 . 1)))) ;
  56.                                  (setq ssm (cons '(60 . 1) ssm))
  57.                                  (entmod ssm)
  58.                           )
  59.                         )
  60.                         (setq m (1+ m))
  61.                       )
  62.                )
  63.              )
  64.       )
  65.     )
  66.     (setq tc (tblnext "layer"))
  67.   )
  68.   (command "undo" "e")
  69.   (princ)
  70. )
  71. (defun c:yc3 (/ corss ssn cor ss corl n tc)
  72.   (princ "\n请选择不隐藏颜色:")
  73.   (setq ss (ssget))
  74.   (command "undo" "be")
  75.   (setvar "cmdecho" 0)
  76.   (setq corss (list))
  77.   (setq n 0)
  78.   (while (< n (sslength ss))                ;找出不关闭的颜色
  79.     (setq ssn (ssname ss n))
  80.     (setq cor (assoc 62 (entget ssn)))        ;不随层
  81.     (if        (= cor nil)                        ;随层
  82.       (progn (setq tc (cdr (assoc 8 (entget ssn))))
  83.              (setq tc (tblsearch "layer" tc))
  84.              (setq cor (assoc 62 tc))
  85.       )
  86.     )
  87.     (setq cor (cdr cor))                ;得到颜色
  88.     (setq corl (list cor))
  89.     (if        (= nil (assoc cor corss))
  90.       (setq corss (cons corl corss))
  91.     )
  92.     (setq n (1+ n))
  93.   )
  94.   (princ "\n不隐藏颜色:")
  95.   (princ corss)
  96.   (setq ss (ssget "x" '()))
  97.   (setq n 0)
  98.   (while (< n (sslength ss))
  99.     (setq ssn (ssname ss n))
  100.     (setq cor (assoc 62 (entget ssn)))
  101.     (if        (= cor nil)
  102.       (progn (setq tc (cdr (assoc 8 (entget ssn))))
  103.              (setq tc (tblsearch "layer" tc))
  104.              (setq cor (assoc 62 tc))
  105.       )
  106.     )
  107.     (setq cor (cdr cor))                ;得到颜色
  108.     (if        (= nil (assoc cor corss))        ;如果不在表内隐藏
  109.       (progn (setq ssn (entget ssn))
  110.              (setq ssn (append ssn '((60 . 1))))
  111.              (entmod ssn)
  112.       )
  113.     )
  114.     (setq n (1+ n))
  115.   )
  116.   (command "undo" "e")
  117.   (princ)
  118. )
  119. (defun c:xs (/ ss ssn n)
  120.   (setq ss (ssget "x" (list (cons 60 1))))
  121.   (command "undo" "be")
  122.   (setvar "cmdecho" 0)
  123.   (setq n 0)
  124.   (while (< n (sslength ss))
  125.     (setq ssn (ssname ss n))
  126.     (setq ssn (entget ssn))
  127.     (setq ssn (subst (cons 60 0) (assoc 60 ssn) ssn))
  128.     (entmod ssn)
  129.     (setq n (1+ n))
  130.   )
  131.   (command "undo" "e")
  132. )





"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

  • · 学习|主题: 95, 订阅: 7
发表于 2013-11-13 12:08 | 显示全部楼层
游客,本帖隐藏的内容需要发帖数高于 30 才可浏览,你当前发帖数只有 0
回复 支持 1 反对 0

使用道具 举报

发表于 2023-8-14 23:58 | 显示全部楼层
flyfox1047 发表于 2013-11-12 14:13
版主,谢谢你的帮助,可是我试一下不行啊,显示 错误: no function definition: XYP-SUBUPD


版主,谢谢你的帮助,可是我试一下不行g啊,显示 错误: no function definition: XYP-SUBUPDt
发表于 2023-8-14 23:57 | 显示全部楼层
flyfox1047 发表于 2013-11-12 14:13
版主,谢谢你的帮助,可是我试一下不行啊,显示 错误: no function definition: XYP-SUBUPD


版主,谢谢你的帮助,可是我试一下不行啊,显示 错误: no function definition: XYP-SUBUPD
发表于 2013-11-12 13:22 | 显示全部楼层

  1. (defun c:yc4 ()
  2.   (princ "\n请选择需要隔离的对象: ")
  3.   (setq        ss  (ssget)
  4.         ss1 (ssget "x")
  5.   )
  6.   (command "select" ss1 "r" ss "")
  7.   (xyp-SubUpd (ssget "p") 60 1)
  8.   (princ)
  9. )
发表于 2013-11-12 13:55 | 显示全部楼层
yc2在我这里没反应
 楼主| 发表于 2013-11-12 14:13 | 显示全部楼层
xyp1964 发表于 2013-11-12 13:22

版主,谢谢你的帮助,可是我试一下不行啊,显示 错误: no function definition: XYP-SUBUPD
 楼主| 发表于 2013-11-12 14:17 | 显示全部楼层
hao3ren 发表于 2013-11-12 13:55
yc2在我这里没反应

YC2是隐藏同种颜色的对象
发表于 2013-11-12 15:33 | 显示全部楼层
是的,但是没反应,没有隐藏掉
发表于 2013-11-12 15:35 | 显示全部楼层
院长的简洁,好用,呵呵,装个xcad很方便
 楼主| 发表于 2013-11-12 15:43 | 显示全部楼层
emk 发表于 2013-11-12 15:35
院长的简洁,好用,呵呵,装个xcad很方便

可以XCAD其它功能用不上啊
发表于 2013-11-12 17:01 | 显示全部楼层
yc2在我这里没反应,选择了,但是没显示出来。
 楼主| 发表于 2013-11-12 19:15 | 显示全部楼层
[em0] 没有高手帮忙啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 11:10 , Processed in 0.832174 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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