浴火鸟TYTYJ 发表于 2017-9-11 15:11:22

关于SSGET颜色筛选对像是BYLAYER无法选中

;自动筛选删除红色图元
(defun C:D1 ()
(setq SS1 (ssget '( (62 . 1)))) ;筛选红色图元
         (command "erase" ss1 "")
         (princ)
)

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

浴火鸟TYTYJ 发表于 2017-9-13 10:41:45

浴火鸟TYTYJ 发表于 2017-9-13 10:40


;按照颜色选取图元
;,| - - - - - - - - - - - - - - - - - - - -
;,| 函数编号:g0001
;,| - - - - - - - - - - - - - - - - - - - - -
;,|功能: 返回图元真实颜色
;,|参数:“ent”——图元名
;,|示例语句:   (color (car (entsel "\n选择: ")))
;,|示例返回:   颜色码

(DEFUN C:CV(/ co color enlst n s1 ss x)
(defun color (ent / c62 ent1)
(setq ent1 (entget ent))
(if (setq c62 (cdr (assoc 62 ent1)))
      (if (= 0 c62)
      7
      c62
      )
   (cdr (assoc62 (entget (tblobjname "layer" (cdr(assoc8 ent1))))))
)
)

(redraw (setq s1 (car (entsel "\n选择要筛选的目标对像颜色: "))) 3)
(setq co(color s1))
(setq enlst (ssadd))
(princ "\n选择目标窗口: ")
(if (setq ss (ssget ))
    (repeat (setq n(sslength ss)) ; fixed
      (cond ((= co (color (setq x (ssname ss (setq n (1- n)))))) (ssadd x enlst)))
    ))
(ssadd s1 enlst)
(sssetfirst nil enlst)
(COMMAND "ERASE" ENLST "" "")
(princ )
)

易云网络 发表于 2017-9-12 14:32:47

本帖最后由 易云网络 于 2017-9-12 14:37 编辑


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

;,| - - - - - - - - - - - - - - - - - - - -
;,| 函数编号:g0001
;,| - - - - - - - - - - - - - - - - - - - - -
;,|功能: 返回图元真实颜色
;,|参数:“ent”——图元名
;,|示例语句:   (color (car (entsel "\n选择: ")))
;,|示例返回:   颜色码
(defun color (ent / c62 ent1)
(setq ent1 (entget ent))
(if (setq c62 (cdr (assoc 62 ent1)))
      (if (= 0 c62)
      7
      c62
      )
   (cdr (assoc62 (entget (tblobjname "layer" (cdr(assoc8 ent1))))))
)
)

(redraw (setq s1 (car (entsel "\n选择: "))) 3)
(setq co(color s1))
(setq enlst (ssadd))
(if (setq ss (ssget))
    (repeat (setq n(sslength ss)) ; fixed
      (cond ((= co (color (setq x (ssname ss (setq n (1- n)))))) (ssadd x enlst)))
    ))
(ssadd s1 enlst)
(sssetfirst nil enlst)
(princ )
)

浴火鸟TYTYJ 发表于 2017-9-11 15:13:17

手工把图颜改为1号色后,可以用此方法筛选出来.
有没有方法,不用去改BYLAYER,可以筛选到颜色出来?

vectra 发表于 2017-9-11 15:53:54

你这问题听上去是要按层名来进行筛选

浴火鸟TYTYJ 发表于 2017-9-11 16:52:59

vectra 发表于 2017-9-11 15:53
你这问题听上去是要按层名来进行筛选

不层名来,是按颜色来删除图元.
主要是是建一个颜色筛选.
就像SSGET筛文字或标注这样类似的功能.
(setq e1 (ssget '
          ((-4 . "<OR") (0 . "TEXT") (0 . "MTEXT") (-4 . "OR>"))
                        )
              )

浴火鸟TYTYJ 发表于 2017-9-11 17:28:41

vectra 发表于 2017-9-11 15:53
你这问题听上去是要按层名来进行筛选

此处的BYLAYER,指的是颜色是随层的,假如当前随层颜色刚好是1号色,是选不中的.必需要手工把颜色改为1号色,才能被选中.

ll_j 发表于 2017-9-11 20:25:35

随块组码是1,随层是256

shh1980 发表于 2017-9-12 07:00:37

ll_j 大师笔误了

;;;dxf组码:
62颜色号(如果不是“BYLAYER”,则出现);零表示“BYBLOCK”(可变的)颜色;256 表示“BYLAYER”;负值表示层已关闭(可选)

浴火鸟TYTYJ 发表于 2017-9-12 11:59:24

shh1980 发表于 2017-9-12 07:00
ll_j 大师笔误了

问题就在这里,图元颜色是随层(BYLAYER),又刚好是红色,这里候(62.1)是无法选中这个BYLARER的红色图元的.

gzxl 发表于 2017-9-12 13:51:41

在ssget中单独处理

浴火鸟TYTYJ 发表于 2017-9-12 13:53:34

这么牛的选择器!
页: [1] 2
查看完整版本: 关于SSGET颜色筛选对像是BYLAYER无法选中