xj6019 发表于 2021-1-6 08:57:09

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

本帖最后由 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(entgetE))) "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(entgetE))) "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))

      )

)

start4444 发表于 2021-1-6 10:24:52

思路不对,对了其实很简单

(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(entgetE))) lst) (= (cdr (assoc 62 (entgetE))) 8)) (setdxf e (cons 62 251)))
                        ((and (member (cdr(assoc 0(entgetE))) lst) (/= (cdr (assoc 62 (entgetE))) 8)) (setdxf e (cons 62 225)))
                        (t nil)                       
                )               
        )       
        (entupd en);更新显示
       
)

xj6019 发表于 2021-1-6 13:22:14

谢谢给改正思路,我再研究研究,好像对有的块管用,有的不管用,我再研究研究看看,是怎么回事

panliang9 发表于 2021-1-7 09:23:07

看这个贴:

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

xj6019 发表于 2021-1-7 10:21:20

panliang9 发表于 2021-1-7 09:23
看这个贴:

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

谢谢。
非常感谢分享经典好用的代码   好好研究研究
页: [1]
查看完整版本: 老大们帮看看 这个块内特定颜色的线 变换颜色 为什么不行