明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2033|回复: 5

[已解答] 求同色图元隐藏和显示

[复制链接]
发表于 2014-6-19 17:32 | 显示全部楼层 |阅读模式
50明经币
求同色图元隐藏和显示

最佳答案

查看完整内容

新秀哥又出来啦? 为什么无视版规呢?  你真有勇气……
发表于 2014-6-19 17:32 | 显示全部楼层
新秀哥又出来啦? 为什么无视版规呢? 
你真有勇气……

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

点评

我一直在认真学习,知道自已可能不是这块的料,所以经常厚着脸皮求这求好,非常感谢楼主帮助  发表于 2014-6-19 19:39
回复

使用道具 举报

 楼主| 发表于 2014-6-19 19:52 | 显示全部楼层
如果再区分一下,同色文字图元和同色非文字图元隐藏就更好了
回复

使用道具 举报

 楼主| 发表于 2014-6-19 20:48 | 显示全部楼层
自已根据高手的程序改了一个(defun c:yc11 (/ ss ssn n)
  (princ "\n请选择需要隐藏的对象:")
;  (setq ss (ssget "x" (list '(0 . "text") (assoc 1 (entget en)))))
  (setq ss (ssget(list '(0 . "text,mtext") )))
  (command "undo" "be")
  (setvar "cmdecho" 0)
  (setq n 0)
  (while (< n (sslength ss))
    (setq ssn (ssname ss n))
    (setq ssn (entget ssn))
    (setq ssn (append ssn '((60 . 1))))
                                        ;(setq ssn (cons '(60 . 1) ssn))
    (entmod ssn)
    (setq n (1+ n))
  )
  (command "undo" "e")
  (setvar "cmdecho" 1)
  (princ)
)
(defun c:yc12 (/ ss ssn n)
  (princ "\n请选择需要隐藏的对象:")
;  (setq ss (ssget "x" (list '(0 . "text") (assoc 1 (entget en)))))
  (setq ss (ssget(list '(0 . "line,lwpolyline,lwpolyline,arc,solid,circle") )))
  (command "undo" "be")
  (setvar "cmdecho" 0)
  (setq n 0)
  (while (< n (sslength ss))
    (setq ssn (ssname ss n))
    (setq ssn (entget ssn))
    (setq ssn (append ssn '((60 . 1))))
                                        ;(setq ssn (cons '(60 . 1) ssn))
    (entmod ssn)
    (setq n (1+ n))
  )
  (command "undo" "e")
  (setvar "cmdecho" 1)
  (princ)
)
回复

使用道具 举报

发表于 2014-6-20 15:37 来自手机 | 显示全部楼层
新秀哥,厉害哦
回复

使用道具 举报

发表于 2019-5-19 20:51 | 显示全部楼层
lucas_3333 发表于 2014-6-19 17:32
新秀哥又出来啦? 为什么无视版规呢? 
你真有勇气……

好程序,谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-8 12:18 , Processed in 0.243947 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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