明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1516|回复: 0

怎么把输入图层名改为用鼠标点选 ?

[复制链接]
发表于 2012-4-1 16:05:27 | 显示全部楼层 |阅读模式
(defun c:mlay ()
  (setq lay1 (getstring "\n请输入要合并的图层:")
lay2 (getstring "\n请输入要保留的图层:")
  )
  (MergeLayers lay1 lay2)
)
;; Usage: (MergeLayers "Layer1" "Layer2")
(defun MergeLayers (lay1 lay2 / i block countOfBlock1)
  (command "-layer" "u" lay1 "")
  (setq block (vla-get-blocks
  (vla-get-activedocument (vlax-get-acad-object))
       )
  )
  (setq i 0
countOfBlock1
  (vla-get-count block)
  )
  (while (< i countOfBlock1)
    (changeLayer block)
    (setq i (1+ i)
    )
  )
  (if (= (getvar "CLAYER") lay1)
    (setvar "CLAYER" lay2)
  )
  (command "_.purge" "lay" lay1 "_n")
  (princ)
)
(defun changeLayer (blocks / cnt space countOfBlock2)
;;;  (setq cnt 0
;;; countOfBlock2
;;;  (vla-get-count blocks);;;某些时候这句代码会出错,说vla-get-count不能用于blocks对象,不知为何?
;;;  )
;;;
;;;  (setq errobj (vl-catch-all-apply (vla-get-count blocks)))
;;;  (if (vl-catch-all-error-p errobj)
;;;    (setq cnt (1+ cnt))
;;;    (exit)
;;;  )
  (setq cnt 0
countOfBlock2
  (vla-get-count blocks)
  )
  (while (< cnt countOfBlock2)
    (setq space (vla-item blocks cnt))
    (vlax-for itm space
      (if (= (strcase (vla-get-layer itm)) (strcase lay1))
(vla-put-layer itm lay2)
      )
;;;如果是块,递归下去
      (if (and (= (vla-get-ObjectName itm) "AcDbBlockReference")
        (= (vla-get-HasAttributes itm) :vlax-true)
   )
(changeLayer itm)
      )
    )
    (setq cnt (1+ cnt))
  )
)



怎么把输入图层名改为用鼠标点选 ?


该贴已经同步到 9701519的微博
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-25 05:14 , Processed in 0.167886 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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