明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2948|回复: 4

<求助>按颜色显示/隐藏对象 总是出现致命错误

[复制链接]
发表于 2011-10-31 20:31:31 | 显示全部楼层 |阅读模式
         加载下面这段代码没事,但是运行的时候总是致命错误退出,我用2008和10都试过了,都一样,不知道是哪里错了、、、
  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. )


"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2012-4-5 14:36:06 | 显示全部楼层
用着很好啊
发表于 2012-4-14 09:13:46 | 显示全部楼层
用着确实很好,没发现啥问题。
发表于 2013-6-14 21:04:03 | 显示全部楼层
测试一切OK啊
发表于 2024-7-14 17:22:53 | 显示全部楼层
隐藏选择颜色时(yc2),会有部分隐藏不掉,其他正常使用,实用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 11:41 , Processed in 0.179746 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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