明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4010|回复: 18

[讨论] 关于SSGET颜色筛选对像是BYLAYER无法选中

[复制链接]
发表于 2017-9-11 15:11:22 | 显示全部楼层 |阅读模式
;自动筛选删除红色图元
(defun C:D1 ()
(setq SS1 (ssget '( (62 . 1)))) ;筛选红色图元
           (command "erase" ss1 "")
           (princ)
  )

对于图档上图元颜色是BYLAYER的,颜色是红色的,是无法被筛选到的.

 楼主| 发表于 2017-9-13 10:41:45 | 显示全部楼层
  1. ;按照颜色选取图元
  2. ;,| - - - - - - - - - - - - - - - - - - - -
  3. ;,| 函数编号:g0001
  4. ;,| - - - - - - - - - - - - - - - - - - - - -
  5. ;,|功能: 返回图元真实颜色
  6. ;,|参数:“ent”——图元名
  7. ;,|示例语句:   (color (car (entsel "\n选择: ")))
  8. ;,|示例返回:   颜色码

  9. (DEFUN C:CV(/ co color enlst n s1 ss x)
  10. (defun color (ent / c62 ent1)
  11.   (setq ent1 (entget ent))
  12.   (if (setq c62 (cdr (assoc 62 ent1)))
  13.       (if (= 0 c62)
  14.         7
  15.         c62
  16.       )
  17.      (cdr (assoc  62 (entget (tblobjname "layer" (cdr(assoc  8 ent1))))))
  18.   )
  19. )
  20.   
  21.   (redraw (setq s1 (car (entsel "\n选择要筛选的目标对像颜色: "))) 3)
  22.   (setq co  (color s1))
  23.   (setq enlst (ssadd))
  24.   (princ "\n选择目标窗口: ")
  25.   (if (setq ss (ssget ))
  26.     (repeat (setq n  (sslength ss)) ; fixed
  27.       (cond ((= co (color (setq x (ssname ss (setq n (1- n)))))) (ssadd x enlst)))
  28.     ))
  29.   (ssadd s1 enlst)
  30.   (sssetfirst nil enlst)
  31.   (COMMAND "ERASE" ENLST "" "")
  32.   (princ )
  33. )
回复 支持 1 反对 0

使用道具 举报

发表于 2017-9-12 14:32:47 | 显示全部楼层
本帖最后由 易云网络 于 2017-9-12 14:37 编辑

  • 我以前写的自己用的
    1. ;按照颜色选取图元
    2. (DEFUN C:cff(/ co color enlst n s1 ss x)

    3. ;,| - - - - - - - - - - - - - - - - - - - -
    4. ;,| 函数编号:g0001
    5. ;,| - - - - - - - - - - - - - - - - - - - - -
    6. ;,|功能: 返回图元真实颜色
    7. ;,|参数:“ent”——图元名
    8. ;,|示例语句:   (color (car (entsel "\n选择: ")))
    9. ;,|示例返回:   颜色码
    10. (defun color (ent / c62 ent1)
    11.   (setq ent1 (entget ent))
    12.   (if (setq c62 (cdr (assoc 62 ent1)))
    13.       (if (= 0 c62)
    14.         7
    15.         c62
    16.       )
    17.      (cdr (assoc  62 (entget (tblobjname "layer" (cdr(assoc  8 ent1))))))
    18.   )
    19. )
    20.   
    21.   (redraw (setq s1 (car (entsel "\n选择: "))) 3)
    22.   (setq co  (color s1))
    23.   (setq enlst (ssadd))
    24.   (if (setq ss (ssget))
    25.     (repeat (setq n  (sslength ss)) ; fixed
    26.       (cond ((= co (color (setq x (ssname ss (setq n (1- n)))))) (ssadd x enlst)))
    27.     ))
    28.   (ssadd s1 enlst)
    29.   (sssetfirst nil enlst)
    30.   (princ )
    31. )

 楼主| 发表于 2017-9-11 15:13:17 | 显示全部楼层
手工把图颜改为1号色后,可以用此方法筛选出来.
有没有方法,不用去改BYLAYER,可以筛选到颜色出来?
发表于 2017-9-11 15:53:54 | 显示全部楼层
你这问题听上去是要按层名来进行筛选
 楼主| 发表于 2017-9-11 16:52:59 | 显示全部楼层
vectra 发表于 2017-9-11 15:53
你这问题听上去是要按层名来进行筛选

不层名来,是按颜色来删除图元.
主要是是建一个颜色筛选.
就像SSGET筛文字或标注这样类似的功能.
(setq e1 (ssget '
          ((-4 . "<OR") (0 . "TEXT") (0 . "MTEXT") (-4 . "OR>"))
                        )
              )
 楼主| 发表于 2017-9-11 17:28:41 | 显示全部楼层
vectra 发表于 2017-9-11 15:53
你这问题听上去是要按层名来进行筛选

此处的BYLAYER,指的是颜色是随层的,假如当前随层颜色刚好是1号色,是选不中的.必需要手工把颜色改为1号色,才能被选中.
发表于 2017-9-11 20:25:35 | 显示全部楼层
随块组码是1,随层是256
发表于 2017-9-12 07:00:37 | 显示全部楼层
ll_j 大师笔误了
  1. ;;;dxf组码:
  2. 62  颜色号(如果不是“BYLAYER”,则出现);零表示“BYBLOCK”(可变的)颜色;256 表示“BYLAYER”;负值表示层已关闭(可选)

评分

参与人数 1明经币 +1 金钱 +50 收起 理由
ll_j + 1 + 50 谢谢!好久不动了,凭感觉随手了

查看全部评分

 楼主| 发表于 2017-9-12 11:59:24 | 显示全部楼层

问题就在这里,图元颜色是随层(BYLAYER),又刚好是红色,这里候(62.1)是无法选中这个BYLARER的红色图元的.
发表于 2017-9-12 13:51:41 | 显示全部楼层
在ssget中单独处理

本帖子中包含更多资源

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

x
 楼主| 发表于 2017-9-12 13:53:34 | 显示全部楼层
这么牛的选择器!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 08:37 , Processed in 0.210687 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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