明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 尒樣僮

[源码] 按颜色选择

[复制链接]
发表于 2022-5-20 22:39:20 | 显示全部楼层

这段程序挺好用的,但是有个问题: 我一般是先选择  ”选择集“,然后输入命令,回车执行,再点选 “过滤颜色对象”,此时就已经结束了,其实也已经筛选出来了,但是不亮显,只有使用regen或者鼠标随便在别的地方点一下,才亮显筛选结果。若程序里加上regen,又比较慢,请问怎么能改一下?
发表于 2022-5-31 19:49:05 | 显示全部楼层

请问楼主,加载后提示如下,怎么解决呢?
命令: (LOAD "C:/Users/asus/Desktop/xyc.lsp")
调用(*push-error-using-command*)前无法从 *error* 调用(command)。
建议将(command)调用转换为(command-s)。
发表于 2022-11-17 12:21:50 | 显示全部楼层

院长,这个就是牛逼
发表于 2022-11-17 22:45:04 | 显示全部楼层
Lee Mac写的,点选确定颜色,然后选择同色或相同色图层中颜色随层的对象
  1. ;;select by color
  2. ;;by Lee Mac - Cadtutor
  3. ;;https://www.cadtutor.net/forum/topic/60206-select-polyline-by-colour/
  4. (defun C:TT ( / Col Dxf e Lst )
  5.    (if (setq e (car (entsel)))
  6.        (progn
  7.            (setq Col
  8.                (cond
  9.                    ((cdr (assoc 62 (entget e)))   )
  10.                    ((abs (cdr (assoc 62 (tblsearch "LAYER" (cdr (assoc 8 (entget e)))))))   )
  11.                )
  12.            )                     
  13.            (while (setq Dxf (tblnext "LAYER" (null Dxf)))
  14.                (if (= Col (abs (cdr (assoc 62 Dxf))))
  15.                    (setq Lst (cons "," (cons (cdr (assoc 2 Dxf)) Lst)))
  16.                )
  17.            );获取颜色的图层
  18.            (sssetfirst nil
  19.               (ssget "_X"
  20.                     (if Lst
  21.                       (list
  22.                         (cons -4 "<OR")
  23.                         (cons -4 "<AND")
  24.                           (cons 62 Col)
  25.                           (if (= 1 (getvar 'cvport))
  26.                             (cons 410 (getvar 'ctab)) '(410 . "Model")
  27.                           )
  28.                         (cons -4 "AND>")
  29.                         (cons -4 "<AND")
  30.                           (cons 62 256)
  31.                           (cons 8 (apply 'strcat (cdr Lst)))
  32.                           (if (= 1 (getvar 'cvport))
  33.                             (cons 410 (getvar 'ctab)) '(410 . "Model")
  34.                           )
  35.                         (cons -4 "AND>")
  36.                         (cons -4 "OR>")
  37.                       )
  38.                       (list (cons 62 Col))
  39.                     )
  40.               )
  41.           )
  42.            
  43.        )
  44.    )
  45.    (princ)
  46. )



发表于 2022-11-17 23:27:21 | 显示全部楼层
本帖最后由 kucha007 于 2022-12-4 14:00 编辑
kucha007 发表于 2022-11-17 22:45
Lee Mac写的,点选确定颜色,然后选择同色或相同色图层中颜色随层的对象

改了一下,支持多选或者先选(但得先勾选“先选择后执行”)
PS:代码有误,还在想如何合并选择集= =
  1. (setvar "PICKFIRST" 1);勾选先选择后执行
  1. (defun c:TT (/ Old_Cmd Doc ss Cols co Dxf Lst sss)
  2.   (vl-load-com)
  3.   (if (not (setq ss (ssget "i")))
  4.       (setq ss (ssget))
  5.   )
  6.   (setq Old_Cmd (getvar "cmdecho"))
  7.   (setq Doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  8.   (vla-startundomark Doc) ;记录编组
  9.     (setvar "cmdecho" 0)
  10.     (if ss
  11.       (progn
  12.         (repeat (setq i (sslength ss))
  13.           (setq e (ssname ss (setq i (1- i))))
  14.           (setq Cols (cons
  15.                         (cond
  16.                             ((cdr (assoc 62 (entget e))))
  17.                             ((abs (cdr (assoc 62 (tblsearch "LAYER" (cdr (assoc 8 (entget e))))))))
  18.                         )
  19.                         Cols
  20.                     )
  21.           )
  22.         )
  23.         (foreach co Cols
  24.               (while (setq Dxf (tblnext "LAYER" (null Dxf)))
  25.                 (if (= co (abs (cdr (assoc 62 Dxf))))
  26.                   (setq Lst (cons "," (cons (cdr (assoc 2 Dxf)) Lst)))
  27.                 )
  28.               );获取颜色的图层
  29.               (setq sss
  30.                           (ssget "_X"
  31.                                 (if Lst
  32.                                   (list
  33.                                     (cons -4 "<OR")
  34.                                     (cons -4 "<AND")
  35.                                       (cons 62 co)
  36.                                       (if (= 1 (getvar 'cvport))
  37.                                         (cons 410 (getvar 'ctab)) '(410 . "Model")
  38.                                       )
  39.                                     (cons -4 "AND>")
  40.                                     (cons -4 "<AND")
  41.                                       (cons 62 256)
  42.                                       (cons 8 (apply 'strcat (cdr Lst)))
  43.                                       (if (= 1 (getvar 'cvport))
  44.                                         (cons 410 (getvar 'ctab)) '(410 . "Model")
  45.                                       )
  46.                                     (cons -4 "AND>")
  47.                                     (cons -4 "OR>")
  48.                                   )
  49.                                   (list (cons 62 co))
  50.                                 )
  51.                           )
  52.               )
  53.               (if (> (sslength sss) 0)(sssetfirst nil sss))
  54.         )
  55.       )
  56.     )
  57.     (setvar "cmdecho" Old_Cmd)
  58.   (vla-endundomark Doc) ;结束编组
  59.   (princ)
  60. )




回复 支持 0 反对 1

使用道具 举报

发表于 2022-11-21 10:46:30 | 显示全部楼层
kucha007 发表于 2022-11-17 23:27
改了一下,支持多选或者先选(但得先勾选“先选择后执行”)

只有红白?
发表于 2022-11-21 12:04:02 | 显示全部楼层

什么红白==
发表于 2022-11-21 13:50:06 | 显示全部楼层

多选颜色,只能红白颜色
发表于 2022-11-21 14:51:29 | 显示全部楼层
LYC688 发表于 2022-11-21 13:50
多选颜色,只能红白颜色

不应该啊。我这边测试没问题,也没有这么写。你检查一下自己的图纸吧。
发表于 2022-11-21 15:20:37 | 显示全部楼层
kucha007 发表于 2022-11-21 14:51
不应该啊。我这边测试没问题,也没有这么写。你检查一下自己的图纸吧。

上面那两个颜色,下面这三个颜色,任意选两个都不行

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-11-16 02:49 , Processed in 0.150157 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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