2564277832 发表于 2013-10-7 19:20:40

按顏色分層(紅色指定到0層並將色改為紅色)

請教 highflybir龙龙仔 板主
以下內容是兩位所提供的內容,
在下若是想把1號色的"1"號層搬到"0"並將顏色改成1號色的紅色。
該如何著手修改
請指教。

在下用很笨的方法
(command "-layer" "color" 1"0" "")
(if (setq ss (ssget "X"'((8 . "1"))))
(command ".chprop" ss "" "LA" "0" "c" "1" "")
將圖搬到0層改顏色為紅,但是此方法無法在圖塊中搬動
(defun C:DDDD (/ *DOC *OBJ *LAY blocks layers)
   (setvar "CMDECHO" 0)
(vl-load-com)
(setq *OBJ (vlax-get-acad-object))
(setq *DOC (vla-get-activedocument *OBJ))
(setq *LAY (vla-get-layers *DOC))            ;取得層集合
(table)
(setq blocks (vla-get-blocks *DOC))            ;取得塊集合
(vlax-for block blocks         ;遍歷塊集合
    (vlax-for n block            ;遍歷單個塊
      (ccb n)
    )
)

(setvar "CMDECHO" 1)
(princ)
)
(defun ccb (object / colour laynam laycol)
(setq colour (itoa (vla-get-color object)))    ;取得物體顏色號
(cond            
    ( (or (= colour "256") (= colour "0"))       ;如果物體顏色隨層或隨塊
      (setq laynam (vla-get-layer object))       ;取得物體所在層名
      (setq laycol (cdr (assoc laynam layers)));取得層顏色
      (setq colour (itoa laycol))            
      (ML)                                    
    )
    ( (ML)
      (vla-put-color object 256)               ;否則改變物體顏色為隨層
    )
)
(vla-put-layer object colour)                  ;對物體改層到顏色號層
)
(defun ML (/ layobj)
   (if (not (assoc colour layers))                ;如果顏色號不在圖層表中
   (progn
   (setq layers (cons (cons colour laycol) layers))
      
                                                         ;重新構造圖層表
      (setq layobj (vla-add *LAY colour )    )   ;創建顏色號圖層
      
      (vla-put-color layobj colour)
             ;對顏色號層賦色

   
)

)
)
(defun table (/ name color Nname)
(vlax-for n *LAY                               ;遍歷層集合
    (setq name (vla-get-name n))               ;取得層名
    (setq color (vla-get-color n))               ;取得層顏色
    (setq layers (cons (cons name color) layers));獲得層名和顏色號表
    (setq Nname (read name))
    (if (= (type Nname) (type 1))                ;如果層名是整數
      (if (= (strlen (itoa Nname)) (strlen name))
      (if (and (> Nname 0) (< Nname 256))      ;並且>0,<256
          (if (/= color Nname)                   ;如果層顏色不等於層名
            (vla-put-color n Nname)            ;則改層顏色為層名

          )
      )
      )
    )
)
)
页: [1]
查看完整版本: 按顏色分層(紅色指定到0層並將色改為紅色)