品茗新秀 发表于 2014-6-19 17:32:01

求同色图元隐藏和显示

求同色图元隐藏和显示

lucas_3333 发表于 2014-6-19 17:32:02

新秀哥又出来啦? 为什么无视版规呢? 
你真有勇气……

;YC1:隐藏选中的对象 ;YC2:隐藏同一颜色的对象 ;YC3:只显示选择颜色的对象 ;XS:显示所有隐藏的对象
(defun c:yc1 (/ ss ssn n)
(princ "\n请选择需要隐藏的对象:")
(setq ss (ssget))
(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")
(princ)
)
(defun c:yc2 (/ ss ssn n cor m ss1 pd ssm)
(princ "\n请选择需要隐藏的颜色:")
(setq ss (nth 0 (entsel)))
(command "undo" "be")
(setvar "cmdecho" 0)
(setq cor (assoc 62 (entget ss)))      ;颜色如果随层,按图层颜色
(if (= cor nil)
    (progn (setq tc (cdr (assoc 8 (entget ss))))
         (setq tc (tblsearch "layer" tc))
         (setq cor (assoc 62 tc))
    )
)
;;;找出不是随层符合颜色的对象
(setq ss (ssget "x" (list cor)))
(if (/= ss nil)
    (progn (setq n 0)
         (while (< n (sslength ss))
             (setq ssn (ssname ss n))
             (setq ssn (entget ssn))
             (setq ssn (append ssn '((60 . 1))))
             (entmod ssn)
             (setq n (1+ n))
         )
    )
)
;;;找出随层符合颜色的对象
(setq tc (tblnext "layer" "0"))
(while (/= tc nil)
    (if      (equal cor (assoc 62 tc))
      (progn (setq ss1 (ssget "x" (list (cons 8 (cdr (assoc 2 tc))))))
             (if (/= ss1 nil)
               (progn (setq m 0)
                      (while (< m (sslength ss1))
                        (setq ssm (entget (ssname ss1 m)))
                        (setq pd (assoc 62 ssm))
                        (if (= pd nil)
                        (progn (setq ssm (append ssm '((60 . 1)))) ;
                                 (setq ssm (cons '(60 . 1) ssm))
                                 (entmod ssm)
                        )
                        )
                        (setq m (1+ m))
                      )
               )
             )
      )
    )
    (setq tc (tblnext "layer"))
)
(command "undo" "e")
(princ)
)
(defun c:yc3 (/ corss ssn cor ss corl n tc)
(princ "\n请选择不隐藏颜色:")
(setq ss (ssget))
(command "undo" "be")
(setvar "cmdecho" 0)
(setq corss (list))
(setq n 0)
(while (< n (sslength ss))                ;找出不关闭的颜色
    (setq ssn (ssname ss n))
    (setq cor (assoc 62 (entget ssn)))      ;不随层
    (if      (= cor nil)                        ;随层
      (progn (setq tc (cdr (assoc 8 (entget ssn))))
             (setq tc (tblsearch "layer" tc))
             (setq cor (assoc 62 tc))
      )
    )
    (setq cor (cdr cor))                ;得到颜色
    (setq corl (list cor))
    (if      (= nil (assoc cor corss))
      (setq corss (cons corl corss))
    )
    (setq n (1+ n))
)
(princ "\n不隐藏颜色:")
(princ corss)
(setq ss (ssget "x" '()))
(setq n 0)
(while (< n (sslength ss))
    (setq ssn (ssname ss n))
    (setq cor (assoc 62 (entget ssn)))
    (if      (= cor nil)
      (progn (setq tc (cdr (assoc 8 (entget ssn))))
             (setq tc (tblsearch "layer" tc))
             (setq cor (assoc 62 tc))
      )
    )
    (setq cor (cdr cor))                ;得到颜色
    (if      (= nil (assoc cor corss))      ;如果不在表内隐藏
      (progn (setq ssn (entget ssn))
             (setq ssn (append ssn '((60 . 1))))
             (entmod ssn)
      )
    )
    (setq n (1+ n))
)
(command "undo" "e")
(princ)
)
(defun c:xs (/ ss ssn n)
(setq ss (ssget "x" (list (cons 60 1))))
(command "undo" "be")
(setvar "cmdecho" 0)
(setq n 0)
(while (< n (sslength ss))
    (setq ssn (ssname ss n))
    (setq ssn (entget ssn))
    (setq ssn (subst (cons 60 0) (assoc 60 ssn) ssn))
    (entmod ssn)
    (setq n (1+ n))
)
(command "undo" "e")
)

品茗新秀 发表于 2014-6-19 19:52:42

如果再区分一下,同色文字图元和同色非文字图元隐藏就更好了

品茗新秀 发表于 2014-6-19 20:48:32

自已根据高手的程序改了一个(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)
)

lpl 发表于 2014-6-20 15:37:59

新秀哥,厉害哦

sdls 发表于 2019-5-19 20:51:52

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

好程序,谢谢!
页: [1]
查看完整版本: 求同色图元隐藏和显示