明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1484|回复: 5

[资源] 明经旧藏,改一切颜色,取之于明,用之于明。

[复制链接]
发表于 2021-1-7 09:21 | 显示全部楼层 |阅读模式
本帖最后由 panliang9 于 2021-1-7 09:26 编辑

龙龙仔老大的贴子,N年前得到的好东西,可惜的是,社区消失了很多贴子,包含这个。

我同事  “美生 ”在原贴上做了一些改进。

chn:选中的块名后面加后缀        
bb:改对象颜色,包含块,块中块等。        
cn:改对象的图层,按给定的新层名,如果没有该层即新建一个。        
chl:不清楚
chtl:将所有的虚线线型(hidden)对象变成隐藏线层,hidden里面。        
cct:将某种特定颜色的对象,改成指定的另一种颜色        

看到有人在问改块内对象颜色,就把它贴出来吧。

;;不知你会多少编程???
;;dwgblack程序还不能改属性&几何公差&引线的顏色(看谁有空补上)
;;By 龙龙仔(LUCAS)
;;将图中所有实体(包括块,嵌套块,尺寸中的无名块)变色
(defun C:chn (/ SS KEY NUM NUM0 N E LEN)
  (prompt "\\nSelect objects:")
  (if (not (setq SS (ssget)))
    (setq SS (ssget ))
  )
  (setq NUM  (getstring "\nEnter string add:")
        NUM0 2)
  (setq N 0)
  (setq LEN (sslength SS))
  (setq N 0)
  (repeat LEN
    (#CHG_NAME (setq E (ssname SS N)) NUM0 NUM)
    (entupd E)
    (setq N (1+ N))
  )
  (princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun #CHG_NAME (E CNUM0 CNUM / TF E1 BLKNA)
  (setq TF (DXF 0 E))
  (if (= TF "INSERT")
    (progn
             (MODREN E CNUM0 CNUM)
             (setq BLKNA (DXF 2 E))
             (setq BLKNA (tblsearch "block" BLKNA))
             (setq E (cdr (assoc -2 BLKNA)))
             (while E
               (setq TF (DXF 0 E))
               (if (= TF "INSERT")
                   (progn
              (MODREN E CNUM0 CNUM)
              (#CHG_NAME E CNUM0 CNUM)
                   )
                )
               (setq E (entnext E))
             )
    )
  )
)
(defun MODREN(E CNUM0 CNUM / orina newna orinaend)
  (setq orina(DXF 2 E))
  (setq newna(strcat orina "_" CNUM))
  (if (> (strlen orina) (strlen CNUM))
    (progn
      (setq orinaend(substr orina (- (strlen orina) (strlen CNUM))))
      (if (/= (strcat "_" CNUM)  orinaend)
        (command "-rename" "b" orina newna)
      )
    )
    (command "-rename" "b" orina newna)
  )
)
  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun #CHG_COLOR (E CNUM0 CNUM / TF E1 BLKNA)
  (setq TF (DXF 0 E))
  (cond
    ((or (= TF "INSERT")(= TF "DIMENSION"))
             (MODENT E CNUM0 CNUM)
             (setq BLKNA (DXF 2 E))
             (setq BLKNA (tblsearch "block" BLKNA))
             (setq E (cdr (assoc -2 BLKNA)))
             (while E
               (setq TF (DXF 0 E))
               (if (or (= TF "INSERT")(= TF "DIMENSION"))
                         (#CHG_COLOR E CNUM0 CNUM)
                         (MODENT E CNUM0 CNUM)
                )
               (setq E (entnext E))
             )
     )
     (t (MODENT E CNUM0 CNUM))
   )
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun #CHG_LINETYPE (E CNUM0 CNUM / TF E1 BLKNA)
  (setq TF (DXF 0 E))
  (cond
    ((or (= TF "INSERT")(= TF "DIMENSION"))
             ;(MODENT E CNUM0 CNUM)
             (setq BLKNA (DXF 2 E))
             (setq BLKNA (tblsearch "block" BLKNA))
             (setq E (cdr (assoc -2 BLKNA)))
             (while E
               (setq TF (DXF 0 E))
               (if (or (= TF "INSERT")(= TF "DIMENSION"))
                         (#CHG_LINETYPE E CNUM0 CNUM)
                         (if (or (= (DXF 6 E) "DOT1") (= (DXF 6 E) "DOT"))(MODENT E CNUM0 CNUM))
                )
               (setq E (entnext E))
             )
     )
     (t (if (or (= (DXF 6 E) "DOT1") (= (DXF 6 E) "DOT"))(MODENT E CNUM0 CNUM)))
   )
)
;;;;;;;;;;;;;;
(defun #CHG_HIDDEN_TO (E CNUM0 CNUM / TF E1 BLKNA)
  (setq TF (DXF 0 E))
  (cond
    ((or (= TF "INSERT")(= TF "DIMENSION"))
             (setq BLKNA (DXF 2 E))
             (setq BLKNA (tblsearch "block" BLKNA))
             (setq E (cdr (assoc -2 BLKNA)))
             (while E
               (setq TF (DXF 0 E))
               (if (or (= TF "INSERT")(= TF "DIMENSION"))
                         (#CHG_HIDDEN_TO E CNUM0 CNUM)
                         (if (or (= (DXF 6 E) "HIDDEN1") (= (DXF 6 E) "HIDDEN") (= (DXF 6 E) "HIDDEN2"))(MODENT E CNUM0 CNUM))
                )
               (setq E (entnext E))
             )
     )
     (t (if (or (= (DXF 6 E) "HIDDEN1") (= (DXF 6 E) "HIDDEN") (= (DXF 6 E) "HIDDEN2"))(MODENT E CNUM0 CNUM)))
   )
)
;;;;;;;;;;;;;;;;;
(defun #CHG_LAYER (E CNUM0 CNUM / TF E1 BLKNA)
  (setq TF (DXF 0 E))
  (cond
    ((or (= TF "INSERT")(= TF "DIMENSION"))
             (MODENT E CNUM0 CNUM)
             (setq BLKNA (DXF 2 E))
             (setq BLKNA (tblsearch "block" BLKNA))
             (setq E (cdr (assoc -2 BLKNA)))
             (while E
               (setq TF (DXF 0 E))
               (if (or (= TF "INSERT")(= TF "DIMENSION"))
                         (#CHG_LAYER E CNUM0 CNUM)
                         (MODENT E CNUM0 CNUM)
                )
               (setq E (entnext E))
             )
     )
     (t (MODENT E CNUM0 CNUM))
   )
)
;;;;;;;;;;;;;;;
(defun #CHG_COLOR_TO (E CNUM0 CNUM CNUM1 / TF E1 BLKNA)
  (setq TF (DXF 0 E))
  (cond
    ((or (= TF "INSERT")(= TF "DIMENSION"))
             (if (= (DXF 62 E) CNUM1)(MODENT E CNUM0 CNUM))
             (setq BLKNA (DXF 2 E))
             (setq BLKNA (tblsearch "block" BLKNA))
             (setq E (cdr (assoc -2 BLKNA)))
             (while E
               (setq TF (DXF 0 E))
               (if (or (= TF "INSERT")(= TF "DIMENSION"))
                         (#CHG_COLOR_TO E CNUM0 CNUM CNUM1)
                         (if (= (DXF 62 E) CNUM1)(MODENT E CNUM0 CNUM))
                )
               (setq E (entnext E))
             )
     )
     (t (if (= (DXF 62 E) CNUM1)(MODENT E CNUM0 CNUM)))
   )
)
;;;;;;;;;;;;;;;
(defun TABLE (S / D R)
  (while (setq D (tblnext S (null D)))
    (setq R (cons (cdr (assoc 2 D)) R))
  )
)

(defun SEL_LAY (/ LAY LAY1 ID)
  (setq LAY (acad_strlsort (TABLE "Layer")))
  (setq ID (load_dialog "lay.dcl"))
  (new_dialog "lay" ID)
  (start_list "lay")
  (mapcar \'add_list LAY)
  (end_list)
  (action_tile "lay" "(setq lay1 (nth (atoi $value) lay))")
  (start_dialog)
  (unload_dialog ID)
   LAY1
)


(defun MODENT (E EE COL)
  (setq E (entget E))
  (if (= (assoc EE E) NIL)
    (setq E (append E (list (cons EE COL))))
    (setq E (subst (cons EE COL) (assoc EE E) E))
  )
  (entmod E)
)


(defun DXF (CODE ENT)
  (cdr (assoc CODE (entget ENT)))
)


(defun C:bb (/ SS KEY NUM NUM0 N E LEN)
  ;(arxload "acetutil.arx" NIL)
  (prompt "\\nSelect objects:")
  (if (not (setq SS (ssget)))
    (setq SS (ssget ))
  )
  ;(initget "1 2")
  (setq KEY "1");(getstring "\\n[1 改顏色/2 改层]<1>: "))
  (if (or (= KEY "1")(= KEY ""))
    (setq NUM  (acad_colordlg 3) ; (acad_truecolordlg 7)
          NUM0 62)   ;真色彩很少用,程序留给你写吧!
    (setq NUM  (getstring "\nEnter linetype name:")
          NUM0 6)
;;;    (setq NUM  (SEL_LAY)
;;;          NUM0 8)
  )
  (setq N 0)
  ;(acet-ui-progress "已经完成:"
    (setq LEN (sslength SS))
  (setq N 0)
  (repeat LEN
    (#CHG_COLOR (setq E (ssname SS N)) NUM0 NUM)
    (entupd E)
    ;(acet-ui-progress -1)
    (setq N (1+ N))
  )
  ;(acet-ui-progress)
  (princ)
)

(defun C:cn (/ SS KEY NUM NUM0 N E LEN)
  (prompt "\\nSelect objects:")
  (if (not (setq SS (ssget)))
    (setq SS (ssget ))
  )
  (setq NUM  (getstring "\nEnter layer name:")
        NUM0 8)
  (setq N 0)
  (setq LEN (sslength SS))
  (setq N 0)
  (repeat LEN
    (#CHG_LAYER (setq E (ssname SS N)) NUM0 NUM)
    (entupd E)
    (setq N (1+ N))
  )
  (princ)
)

(defun C:chl (/ SS KEY NUM NUM0 NUM1 N E LEN)
  (prompt "\\nSelect objects:")
  (if (not (setq SS (ssget)))
    (setq SS (ssget ))
  )
  (setq NUM "HIDDEN2"
        NUM0 6)
  (setq N 0)
  (setq LEN (sslength SS))
  (setq N 0)
  (repeat LEN
    (#CHG_LINETYPE (setq E (ssname SS N)) NUM0 NUM)
    (entupd E)
    (setq N (1+ N))
  )
  (princ)
)

(defun C:chtl (/ SS KEY NUM NUM0 NUM1 N E LEN)
  (prompt "\\nSelect objects:")
  (if (not (setq SS (ssget)))
    (setq SS (ssget ))
  )
  (setq NUM "HIDDEN"; (getstring "\nEnter linetype name:")
        NUM0 8)
  (setq N 0)
  (setq LEN (sslength SS))
  (setq N 0)
  (repeat LEN
    (#CHG_HIDDEN_TO (setq E (ssname SS N)) NUM0 NUM)
    (entupd E)
    (setq N (1+ N))
  )
  (princ)
)

(defun C:cct (/ SS KEY NUM NUM0 N E LEN)
  (prompt "\nSelect objects:")
  (if (not (setq SS (ssget)))
    (setq SS (ssget ))
  )
  (prompt "\nSelect original colour:")
  (setq NUM1 (acad_colordlg 1)
        NUM0 62)
  (prompt "\nSelect colour change to:")
  (setq NUM (acad_colordlg 1))
  (setq N 0)
  (setq LEN (sslength SS))
  (setq N 0)
  (repeat LEN
    (#CHG_COLOR_TO (setq E (ssname SS N)) NUM0 NUM NUM1)
    (entupd E)
    (setq N (1+ N))
  )
  (princ)
)

;|
;;----lay.dcl档
lay : dialog {label="选取图层";
: list_box {
key = "lay";
height           = 20;
width            = 40;
fixed_width_font = true;
fixed_width      = true;
             }
ok_cancel;
}
|;

评分

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

查看全部评分

"觉得好,就打赏"
    共1人打赏
发表于 2021-1-7 09:26 | 显示全部楼层
谢谢楼主分享
发表于 2021-1-7 10:20 | 显示全部楼层
非常感谢分享经典好用的代码   好好研究研究
发表于 2021-1-7 12:41 | 显示全部楼层
谢谢楼主分享
发表于 2021-1-7 12:49 | 显示全部楼层
顶起来,谢谢楼主的分享
发表于 2021-1-7 14:16 | 显示全部楼层
错误: no function definition: HIDDEN,缺少函数.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-6 15:56 , Processed in 0.224146 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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