近期关于autocad2007层合并的讨论热度持续攀升 ,我们通过多方渠道收集整理了相关资讯,并进行了系统化的梳理 。若这些内容恰好能为您提供参考,将是我们最大的荣幸。
AutoCAD合并图层命令laymrg
如果图纸用参照方法导入图元 ,图层名称会有$这样的内容添加,会造成图层很多的情况,如果把$后面名称相同的图层合并,手动的话就比较麻烦。
要合并相同后缀的图层 ,可以使用程序来解决,autolisp代码如下:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;一键所有图层去除#及$前缀的命名;;;;
(defun c:tes ( / ss5)
(setvar "cmdecho" 0) (setvar "blipmode" 0) (if (null vlax-dump-object) (vl-load-com) ) (setq ss5 (x1812031));检查图层是否有冻结,锁定或者关闭 (s1811301);修改图层名称 (if (car ss5) (x1812032 ss5) );还原图层 (princ))
;取得所有图层名称
(defun w1810232 (doc / doc lay obj ss tc)
(setq lay (vla-get-layers doc) ss '()) (vlax-for obj lay (setq tc (vla-get-name obj));取得图层名称 (setq ss (cons (list tc obj) ss)) ) ss)
;修改图层名称
(defun s1811301 ( / doc n obj s2 ss1 ss2 ss3 ss4 ss5 tc1 tc2 x y)
(setq doc (vla-get-activedocument (vlax-get-acad-object));取得当前所有对象集合msp (vla-get-ModelSpace doc);取得模型空间
;ss1 (s1811302 doc msp);取得所有对象
ss2 (w1810232 doc);图层集合
ss3 (mapcar 'strcase (mapcar 'car ss2));图层名称集合
;tc1 (getvar "clayer");取得当前图层名称
) ;(if (or (vl-string-search "\#" tc1 0) (vl-string-search "$" tc1 0)) (setvar "clayer" "0") );如果当前图层需要修改 ,就转换图层为"0" (setvar "clayer" "0") (while (setq s2 (car ss2));处理图层 (setq ss2 (cdr ss2) tc1 (car s2) tc2 tc1 obj (cadr s2)) (while (vl-string-search "\#" tc2 0) (setq tc2 (vl-string-subst "" "\#" tc2)));处理有#的图层名称 (while (setq n (vl-string-search "$" tc2 0)) (setq tc2 (substr tc2 (+ 2 n))));处理有$的图层名称 ;(while (setq n (vl-string-search "A-" tc2 0)) (setq tc2 (substr tc2 (+ 3 n))));处理有A-的名称 (if (= tc2 "") (setq tc2 "0") );如果是空就修改图层为"0" (if (/= tc2 tc1);如果名称发生变化(progn;;1
(if (member (strcase tc2) ss3);2;如果已经有这个图层名称
?(progn;;2
? (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-delete (list obj)));删除这个图层
(progn
(vl-catch-all-apply 'vl-cmdf (list "laymrg" "N" tc1 "" "N" tc2 "Y"))
;(Command "laymrg" "N" tc1 "" "N" tc2 "Y");如果图层不能删除就合并
)
? );if;4
?);progn;2-1
?(progn;;2-2
? (if (null (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-name (list obj tc2))));如果没有相同命名的图层就改变图层名称
(setq ss3 (cons (strcase tc2) ss3))
? );if;3
?);progn;2-2
);if;2
);progn;1
);if;1 );while)
;还原图层状态
(defun x1812032 (ss / ss x y)
(setq ss (vl-remove-if '(lambda (x) (vlax-erased-p (cadr x))) ss));排除已经删除的图层 (mapcar '(lambda (y) (vla-put-lock y :vlax-true));锁定 (mapcar 'cadr (vl-remove-if-not '(lambda (x) (= (car x) 1)) ss)) ) (mapcar '(lambda (y) (vla-put-Freeze y :vlax-true));冻结 (mapcar 'cadr (vl-remove-if-not '(lambda (x) (= (car x) 2)) ss)) ) (mapcar '(lambda (y) (vla-put-LayerOn y :vlax-false));关闭 (mapcar 'cadr (vl-remove-if-not '(lambda (x) (= (car x) 3)) ss)) ))
;;提取图层状态
(defun x1812031 ( / lay ss)
(setq ss '()) (vlax-for lay (vla-get-layers (vla-get-activedocument? (vlax-get-acad-object))) (if (= (vla-get-lock lay) :vlax-true);如果图层锁定(progn
(vla-put-lock lay :vlax-false) ;解锁
(setq ss (cons (list 1 lay) ss))
)
) (if (= (vlax-get-property lay "Freeze") :vlax-true);冻结(progn
(vla-put-Freeze lay :vlax-False);解冻
(setq ss (cons (list 2 lay) ss))
)
) (if (= (vlax-get-property lay "LayerOn") :vlax-false);关闭(progn
(vla-put-LayerOn lay :vlax-true);打开
(setq ss (cons (list 3 lay) ss))
)
) ) ss)
;;;;;;;;;;;;;;;;;;;;;;程序结束;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;复制以上代码,粘贴到记事本,以.lsp为后缀命名 ,在CAD里面,appload命令添加到启动组,输入命令TES ,就可以一键合并图层,TES命令可以自己修改 。
1 、打开CAD2007版本。
2、打开CAD后,画一个连续的线。
3、画好线后 ,输入命令PE,按空格键确定。
4 、确定PE命令后,输入Y确定转换为多段线 。
5、输入Y后,点击合并或者输入J。
6、点击合并后 ,选择对象,然后按空格键确定。
7、按空格键确定命令后,就合并为多段线了 。
关于autocad2007层合并的相关内容介绍到此告一段落 ,若这些信息对您有所启发,欢迎持续关注本站获取更多优质内容。
本文来自作者[稍册]投稿,不代表亚当斯立场,如若转载,请注明出处:https://vydsckz.cn/news/1392.html
评论列表(3条)
我是亚当斯的签约作者“稍册”
本文概览:近期关于autocad2007层合并的讨论热度持续攀升,我们通过多方渠道收集整理了相关资讯,并进行了系统化的梳理。若这些内容恰好能为您提供参考,将是我们最大的荣幸。AutoCA...
文章不错《autocad2007层合并》内容很有帮助