明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1858|回复: 5

[已解答] 关于sssetfirst实现“夹点亮显”的问题

[复制链接]
发表于 2015-12-20 19:12:39 | 显示全部楼层 |阅读模式
本帖最后由 言社长 于 2015-12-20 19:38 编辑

以下是@lucas_3333写的一段代码,功能是“隐藏相同颜色的图元,包括随层图层颜色”。
我想用sssetfirst实现“夹点亮显相同颜色的图元,包括随层图层颜色,应该怎么改呢?
本人初接触LISP,还望各位包涵,请赐教!
  1. (defun c:test (/ ss ssn n cor m ss1 pd ssm)
  2.   (princ "\n请选择需要隐藏的颜色:")
  3.   (setq ss (nth 0 (entsel)))
  4.   (command "undo" "be")
  5.   (setvar "cmdecho" 0)
  6.   (setq cor (assoc 62 (entget ss)))        ;颜色如果随层,按图层颜色
  7.   (if (= cor nil)
  8.     (progn (setq tc (cdr (assoc 8 (entget ss))))
  9.            (setq tc (tblsearch "layer" tc))
  10.            (setq cor (assoc 62 tc))
  11.     )
  12.   )
  13. ;;;找出不是随层符合颜色的对象
  14.   (setq ss (ssget "x" (list cor)))
  15.   (if (/= ss nil)
  16.     (progn (setq n 0)
  17.            (while (< n (sslength ss))
  18.              (setq ssn (ssname ss n))
  19.              (setq ssn (entget ssn))
  20.              (setq ssn (append ssn '((60 . 1))))
  21.              (entmod ssn)
  22.              (setq n (1+ n))
  23.            )
  24.     )
  25.   )
  26. ;;;找出随层符合颜色的对象
  27.   (setq tc (tblnext "layer" "0"))
  28.   (while (/= tc nil)
  29.     (if        (equal cor (assoc 62 tc))
  30.       (progn (setq ss1 (ssget "x" (list (cons 8 (cdr (assoc 2 tc))))))
  31.              (if (/= ss1 nil)
  32.                (progn (setq m 0)
  33.                       (while (< m (sslength ss1))
  34.                         (setq ssm (entget (ssname ss1 m)))
  35.                         (setq pd (assoc 62 ssm))
  36.                         (if (= pd nil)
  37.                           (progn (setq ssm (append ssm '((60 . 1)))) ;
  38.                                  (setq ssm (cons '(60 . 1) ssm))
  39.                                  (entmod ssm)
  40.                           )
  41.                         )
  42.                         (setq m (1+ m))
  43.                       )
  44.                )
  45.              )
  46.       )
  47.     )
  48.     (setq tc (tblnext "layer"))
  49.   )
  50.   (command "undo" "e")
  51.   (princ)
  52. )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2015-12-20 19:33:19 | 显示全部楼层
  1. (defun  c:tt()
  2. (setq lay (cdr(assoc 8(entget(car(entsel"点取图层"))))))
  3.   (setq ss_x (ssget"x" (list (cons 8 lay))))
  4.   (sssetfirst  nil ss_x)

  5.   )
 楼主| 发表于 2015-12-20 19:42:16 | 显示全部楼层
434939575 发表于 2015-12-20 19:33

你好,可能我没表达清楚,我的原代码是隐藏相同颜色的图元,我想改成夹显相同颜色的图元。我搞不懂sssetfirst后面要跟哪个量才是正确。
你的代码是夹显相同图层,可能不是我想要的
发表于 2015-12-20 21:06:09 | 显示全部楼层
言社长 发表于 2015-12-20 19:42
你好,可能我没表达清楚,我的原代码是隐藏相同颜色的图元,我想改成夹显相同颜色的图元。我搞不懂sssetf ...

后面跟选择集
发表于 2015-12-25 21:36:13 | 显示全部楼层
  1. (defun c:ts (/ co en en1 ent n ss ss1 tc)
  2.   (if (setq ent (entsel "\n请选择需要隐藏的颜色:"))
  3.                 (progn
  4.                         (setq en (car ent))
  5.                         ;;颜色如果随层,按图层颜色
  6.                         (if (not (setq co (assoc 62 (entget en))))
  7.                                 (progn
  8.                                         (setq tc (cdr (assoc 8 (entget en))))
  9.                                         (setq tc (tblsearch "layer" tc))
  10.                                         (setq co (assoc 62 tc))
  11.                                 )
  12.                         )
  13.                         ;;找出不是随层符合颜色的对象
  14.                         (if (null (setq ss (ssget "x" (list co))))
  15.                                 (setq ss (ssadd))
  16.                         )
  17.                         ;;找出随层符合颜色的对象
  18.                         (setq tc (tblnext "layer" "0"))
  19.                         (while tc
  20.                                 (if (equal co (assoc 62 tc))
  21.                                         (progn
  22.                                                 (if (setq ss1 (ssget "x" (list (cons 8 (cdr (assoc 2 tc))))))
  23.                                                         (repeat (setq n (sslength ss1))
  24.                                                                 (setq en1 (ssname ss1 (setq n (1- n))))
  25.                                                                 (if (not (assoc 62 (entget en1)))
  26.                                                                         (ssadd en1 ss)
  27.                                                                 )
  28.                                                         )
  29.                                                 )
  30.                                         )
  31.                                 )
  32.                                 (setq tc (tblnext "layer"))
  33.                         )
  34.                         (sssetfirst nil ss)
  35.                 )
  36.         )
  37.         (princ)
  38. )
我改改试试

评分

参与人数 1金钱 +20 收起 理由
言社长 + 20 很好,感谢!

查看全部评分

发表于 2015-12-25 23:14:46 | 显示全部楼层
本帖最后由 llsheng_73 于 2015-12-25 23:24 编辑

  1. (defun c:ts(/ e co la);;亮显全图中与所拾取图元颜色一样的图元(所有正常显示图层)
  2.   (While(SetQ e(TblNext "layer"(not la)))(SetQ la(Cons(mapcar'(lambda(x)(assoc x e))'(2 62))la)))
  3.   (if(setq e(car(entsel"拾取要亮显的颜色")))
  4.     (sssetfirst'nil(setq e(entget e)
  5.                          co(assoc 62 e)
  6.                          co(if co co(assoc 62(tblsearch"layer"(cdr(assoc 8 e)))))
  7.                          e(ssget"X"(list'(-4 . "<or")co
  8.      '(-4 . "<and")'(62 . 256)
  9.      (cons 8(apply'strcat(mapcar'(lambda(x)(if(member co x)(strcat","(cdar x))""))la)))
  10.      '(-4 . "and>")'(-4 . "or>")))))))

点评

代码够紧凑!感谢  发表于 2015-12-26 12:03
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 18:28 , Processed in 0.188625 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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