明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1391|回复: 3

[提问] 求一个把图中所有的块都统一的移动到0图层的代码或者思路??

[复制链接]
发表于 2014-7-26 11:25:31 | 显示全部楼层 |阅读模式
求一个把图中所有的块都统一的移动到0图层的代码或者思路??
发表于 2014-7-26 12:14:53 | 显示全部楼层
忘了出自哪里了。
  1. ;;;运行命令test
  2. (defun c:test (/ i ent sel obj lst LayLst)
  3.    (setq *App (vlax-get-acad-object))
  4.    (setq *Doc (vla-get-ActiveDocument *APP))
  5.    (setq *BLK (vla-get-blocks *DoC))
  6.    (setq i 0)
  7.    (setq LayLst (Get_Layer_Status *Doc))
  8.    (UnLock_All_Layers *DOC)
  9.    (UnFreeze_All_Layers *DOC)
  10.    (if (setq sel (ssget '((0 . "INSERT"))))
  11.      (repeat (sslength sel)
  12.        (setq ent (ssname sel i))
  13.        (setq obj (vlax-ename->vla-object ent))
  14.        (setq lst (entget ent))
  15.        (change-color obj)
  16.        (setq i (1+ i))
  17.      )
  18.      (princ "\n你没有选择物体!")
  19.    )
  20.    (Restore_Layer_Status LayLst)
  21.    (princ)
  22. )
  23. ;;;主要函数
  24. (defun change-color (obj / name blks)
  25.    (vla-put-color obj AcByLayer)  ; 要加出错处理,因为有的可能被锁定
  26.    (if (or
  27.   (= (vla-get-objectname obj) "AcDbBlockReference")
  28.   (= (vla-get-objectname obj) "AcDbMInsertBlock")
  29.        )
  30.      (progn
  31.        (foreach Att (vlax-invoke Obj 'GetAttributes)
  32.   (vla-put-layer Att "0")
  33.          ;(setq vlxt :vlax-true)
  34.          ;(princ (vlax-property-available-p Att 'LockPosition))
  35.          ;(vlax-put-property Att 'LockPosition :vlax-true)
  36.   ;(vlax-put-property Att 'LockPosition vlxt)
  37.          
  38.          ;(princ (vlax-get-property Att 'LockPosition ))
  39.   (vla-put-Color Att AcByLayer) ; 这一行用于处理属性随层
  40.        )
  41.        (setq name (vla-get-name obj)) ; 取得块名
  42.        (setq blks (vla-item *BLK name))
  43.        (vlax-for n blks
  44.   (change-color n)  ; 递归进去,用于处理嵌套
  45.        )
  46.      )
  47.      (vla-put-layer obj "0")  ; 如果不改为0层,则有的可能不变色
  48.    )
  49. )
  50. ;;; 以下函数仅仅为防止出错用
  51. ;;; 得到图层状态
  52. (defun Get_Layer_Status (*DOC / V_LIST L_LIST C_LIST T_LIST W_LIST)
  53.    (vlax-for n (vla-get-layers *DOC)
  54.      (setq V_List (cons (cons n (vla-get-LayerOn n)) V_List)
  55.     L_List (cons (cons n (vla-get-Lock n)) L_List)
  56.     C_List (cons (cons n (vla-get-TrueColor n)) C_List)
  57.     T_List (cons (cons n (vla-get-Linetype n)) T_List)
  58.     W_List (cons (cons n (vla-get-LineWeight n)) W_List)
  59.     F_List (cons (cons n (vla-get-Freeze n)) F_List)
  60.      )
  61.    )
  62.    (List V_List L_List C_List T_List W_List F_List)
  63. )
  64. ;;;恢复图层状态
  65. (defun Restore_Layer_status (LayLst)
  66.    (mapcar
  67.      (function
  68.        (lambda (x y)
  69.   (foreach n X
  70.     (if (/= (strcase (setq name (vla-get-name (car n))))
  71.      (strcase (getvar "clayer"))
  72.         )    ;非当前层
  73.       (vlax-put-property (car n) y (cdr n))
  74.       ;;对于当前层
  75.       (if (/= y "Freeze")  ;排除冻结操作,以防出错
  76.         (vlax-put-property (car n) y (cdr n))
  77.       )
  78.     )
  79.   )
  80.        )
  81.      )
  82.      LayLst
  83.      (list "Layeron" "Lock" "TrueColor" "LineType" "LineWeight" "Freeze")
  84.    )
  85. )
  86. ;;;解锁所有图层
  87. (defun UnLock_All_Layers (*DOC)
  88.    (vlax-for n (vla-get-layers *DOC)
  89.      (vla-put-lock n :vlax-false)
  90.    )
  91. )
  92. ;;;解冻所有图层
  93. (defun UnFreeze_All_Layers (*DOC)
  94.    (vlax-for n (vla-get-layers *DOC)
  95.      (if (/= (strcase (vla-get-name n))
  96.       (strcase (getvar "clayer"))
  97.   )
  98.        (vla-put-Freeze n :vlax-false)
  99.      )
  100.    )
  101. )
发表于 2014-7-26 15:45:04 | 显示全部楼层
(Defun C:gb (/ ss)
  (setvar 'cmdecho 0)
  (vl-cmdf "layer" "m" "图块" "")
  (ssget "X" '((0 . "INSERT")))
  (Vl-cmdf "chprop" "p" "" "la" "图块" "")
)简单的移动到一个层
发表于 2014-7-26 16:50:31 | 显示全部楼层
(xyp-SubUpd (ssget "x" '((0 . "insert"))) 8 "0")
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-24 09:23 , Processed in 0.171620 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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