注册 登录
明经CAD社区 返回首页

自贡黄明儒的个人空间 http://www.mjtd.com/?376881 [收藏] [复制] [分享] [RSS]

日志

减少图层----根据线型

热度 8已有 1675 次阅读2012-5-4 16:34 |系统分类:应用| ACET

;;;*******************************************************************************
;;;功能: 将同种线型归为同一层,目的是减少层的数量
(defun C:DecreaseLayers (/ *BLK CMDECHO1 LTYPES)
  ;;1 解冻 解锁 开 所有图层
  (defun HH:Mylayer ()
    (acet-layerp-mode T)
    (acet-layerp-mark T)
    (command "_.Layer" "Thaw" "*" "U" "*" "ON" "*" "")
  )
  ;;2  coaying______________________________________________________________________
  ;; ▓ (lt:layer-useable-restore)
  ;; [功能] 恢复图层状态
  (defun lt:layer-restore ()
    (acet-layerp-mark nil)
    (command "_.layerp")
  )
  ;;3  获得特定符号表的列表。
  ;;   有效符号表名称为Layer,Ltype,Viewx,Style,Block,Appid,Ucs,Dimstyle和Vport。
  (defun xyp-get-tblnext (table-name / lst d)
    (while (setq d (tblnext table-name (null d)))
      (setq lst (cons (cdr (assoc 2 d)) lst))
    )
    (reverse lst)
    lst
  )
  ;;4  功能:块随层 highflybird
  (defun BlockByLayerColor (/ *APP *BLK *DOC ENT I OBJ SEL)
    (defun change-Layer (obj / name blks currentLayer)
      (setq currentLayer (getvar "clayer"))
      (vla-put-layer obj currentLayer)
      ;(vla-put-color obj AcByLayer)
      (if (or
     (= (vla-get-objectname obj) "AcDbBlockReference")
     (= (vla-get-objectname obj) "AcDbMInsertBlock")
   ) 
 (progn
   (foreach Att (vlax-invoke Obj 'GetAttributes)
     (vla-put-Layer Att currentLayer)
     ;(vla-put-color Att AcByLayer)
   )
   (setq name (vla-get-name obj)) ; 取得块名
   (setq blks (vla-item *BLK name))
   (vlax-for n blks
     (change-Layer n)
   )
   (vla-update obj)  ; 用以更新数据,或程序完成后用Regen
 )
      )
    )
    (setq *App (vlax-get-acad-object))
    (setq *Doc (vla-get-ActiveDocument *APP))
    (setq *BLK (vla-get-blocks *DoC))
    (setq i 0)
    ;;(save_layer_status)
    ;;(unlock_all_layers)
    (if (setq sel (ssget "X" '((0 . "INSERT"))))
      (repeat (sslength sel)
 (setq ent (ssname sel i))
 (setq obj (vlax-ename->vla-object ent))
 (change-Layer obj)
 (setq i (1+ i))
      )
    )
    ;;(restore_layer_status)
    (princ)
  )
  ;;5  功能:根据线型改层
  (defun LayerByLtype (Ltypes / D LAYERNAME LAYERNAME0 LTYPE LTYPE0 SS)
    (repeat (length Ltypes)
      (setq LType0     (car Ltypes)
     Ltypes     (cdr Ltypes)
     LayerName0 nil
     d        nil
      )
      (while (setq d (tblnext "layer" (null d)))
 (setq LayerName (cdr (assoc 2 d)))
 (setq LType (cdr (assoc 6 d)))
 (if (equal LType0 LType)
   (if LayerName0
     (progn (setq ss (ssget "X" (list (cons 8 LayerName))))
     (if ss
       (vl-cmdf "_.Chprop" ss "" "layer" LayerName0 "")
     )
     )
     (progn (setq LayerName0 LayerName)
     (setq ss (ssget "X" (list (cons 6 LType0))))
     (if ss
       (vl-cmdf "_.Chprop" ss "" "layer" LayerName0 "")
     )
     )
   )
   nil
 )
      )
    )
  )
  ;;6  清理
  (defun HH:purge ()
    (repeat 3
      (vla-purgeall
 (vla-get-activedocument (vlax-get-acad-object))
      )
    )
  )
  ;;7  本程序主程序
  (setq cmdecho1 (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (vl-load-com)
  (command "_.UNDO" "BE")
  (HH:Mylayer)
  (BlockByLayerColor)
  (setq Ltypes (xyp-get-tblnext "Ltype"))
  (LayerByLtype Ltypes)
  (HH:purge)
  (lt:layer-restore)
  (command "_.UNDO" "E")
  (setvar "cmdecho" cmdecho1)
  (gc)
)
;;;*******************************************************************************

路过

雷人
7

握手

鲜花

鸡蛋

刚表态过的朋友 (7 人)

发表评论 评论 (1 个评论)

回复 longer1000 2012-7-11 08:33
   学习中

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

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

GMT+8, 2024-5-6 08:13 , Processed in 0.137976 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部