明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 575|回复: 4

老大们帮看看 这个块内特定颜色的线 变换颜色 为什么不行

[复制链接]
发表于 2021-1-6 08:57 | 显示全部楼层 |阅读模式
本帖最后由 xj6019 于 2021-1-6 08:58 编辑

我想实现的是按块内不同颜色先区分对象后再修改块内的颜色,将块内的8号色的线,换成251号色。
将不是8号色的线,换成225号色。并对嵌套块可行。

红色部分是我添加想修改的代码

求指教下面的改法为什么不行,搞不懂了。。

(defun c:tt8 ( / ss en x)
        (setq ss (ssget '((0 . "insert"))))
        (foreach en
                (vl-remove-if
                        '(lambda(x)(/= (type x) 'ENAME))
                        (mapcar 'cadr (ssnamex ss));栏选只要这句即可
                );图元名列表
                (setblk en)

        )

)

;修改块内文字、直线颜色(setblk)
(defun setblk (en / e)
        (setq e (TBLOBJNAME "block" (cdr(assoc 2(entget en)))))
        (while  (setq e (entnext e))
        (cond
                ((= (cdr(assoc 0(entget e))) "TEXT")
                        (setdxf e (cons 62 251));修改颜色

                )

                  ;  ((= (cdr(assoc 0(entget e))) "LINE")  原代码
                    ((= (cdr(assoc 0(entget  E))) "CIRCLE,ELLIPSE,*LINE,*POLYLINE,SPLINE,ARC,LWPOLYLINE")  
            (setq E (ssget "P"   '((0 . "CIRCLE,ELLIPSE,*LINE,*POLYLINE,SPLINE,ARC,LWPOLYLINE")        (-4 . "=") (62 . 8) )))
            (setdxf e (cons 62 251));将8号色所有的线修改颜色为251
                )
                                    ((= (cdr(assoc 0(entget  E))) "CIRCLE,ELLIPSE,*LINE,*POLYLINE,SPLINE,ARC,LWPOLYLINE")  
            (setq E (ssget "P"   '((0 . "CIRCLE,ELLIPSE,*LINE,*POLYLINE,SPLINE,ARC,LWPOLYLINE")        (-4 . "/=") (62 . 8) )))
            (setdxf e (cons 62 225));将不是8号色所有的线修改颜色为225
                )

                (t nil)

            )

    )

    (entupd en);更新显示

)

;按新的点对表修改组码表更新图元

;(setdxf (car(entsel)) (cons 62 1))
(defun setdxf(en xin / enb)
        (if  (assoc (car xin) (setq enb (entget en)))
           (entmod(subst xin (assoc (car xin) enb)enb))
           (entmod (cons xin enb))

        )

)

发表于 2021-1-6 10:24 | 显示全部楼层
思路不对,对了其实很简单

(defun setblk (en / e)
        (setq e (TBLOBJNAME "block" (cdr(assoc 2(entget en)))))
        (setq lst '("CIRCLE" "ELLIPSE" "LINE" "POLYLINE" "SPLINE"  "ARC" "LWPOLYLINE"))
        (while  (setq e (entnext e))
                (cond
                        ((= (cdr(assoc 0(entget e))) "TEXT")(setdxf e (cons 62 251)))
                        ((and (member (cdr(assoc 0(entget  E))) lst) (= (cdr (assoc 62 (entget  E))) 8)) (setdxf e (cons 62 251)))
                        ((and (member (cdr(assoc 0(entget  E))) lst) (/= (cdr (assoc 62 (entget  E))) 8)) (setdxf e (cons 62 225)))
                        (t nil)                       
                )               
        )       
        (entupd en);更新显示
       
)

评分

参与人数 1明经币 +1 收起 理由
xj6019 + 1 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-1-6 13:22 | 显示全部楼层
谢谢给改正思路,我再研究研究,好像对有的块管用,有的不管用,我再研究研究看看,是怎么回事
发表于 2021-1-7 09:23 | 显示全部楼层
 楼主| 发表于 2021-1-7 10:21 | 显示全部楼层
panliang9 发表于 2021-1-7 09:23
看这个贴:

http://bbs.mjtd.com/thread-182904-1-1.html

谢谢。
非常感谢分享经典好用的代码   好好研究研究
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 22:39 , Processed in 0.195534 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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