一半家产求批量改图层名等程序一套!
工作中需求:有时候套结构专业的图纸,希望通过图层控制结构图的显示与否(用图块的话图纸会很卡!),通过图层管理器去一个个选图层不现实(图层名很乱,没规律,且各专业有同名的图层),如果在套图之前能给要套的图层批量加前缀就很方便控制了!如,结构图就加前缀JGLAY-,建筑图就加JZLAY-
希望程序能实现:
①批量加前缀;
②图层状态管理器----实现类似图层状态管理器的作用,如一键冻结/显示“JGLAY-”开头的图层(即控制结构图层的显示与否),参考附图
论坛里泡了不少时间,也找了很久,实在没找到比较理想的,希望得到各位高手的关注,谢谢!
本帖最后由 ZZXXQQ 于 2012-12-16 16:57 编辑
;;;批量层加前缀 明经 ZZXXQQ 2012.12.15 12.16改
(defun c:TE (/ lay lalst LAY_pre)
(setvar "CMDECHO" 0)
(setq lalst (list))
(while (setq lay (tblnext "LAYER" (not lay)))
(setq lalst (cons (cdr(assoc 2 lay)) lalst))
)
(setq LAY_pre (getstring "\n输入图层前缀 : "))
(foreach lay lalst
(if (not (member lay '("0" "Defpoints")))
(command "_.RENAME" "LA" lay (strcat LAY_pre lay))
)
)
(setvar "CMDECHO" 1)
(princ)
)
;;;批量层去前缀 明经 ZZXXQQ 2012.12.15 12.16改
(defun c:TS (/ lay lalst LAY_pre N)
(setvar "CMDECHO" 0)
(setq lalst (list))
(while (setq lay (tblnext "LAYER" (not lay)))
(setq lalst (cons (cdr(assoc 2 lay)) lalst))
)
(setq LAY_pre (getstring "\n输入去掉的图层前缀 : "))
(foreach lay lalst
(if (not (member lay '("0" "Defpoints")))
(if (= (vl-string-search lay_pre lay) 0)
(command "_.RENAME" "LA" lay (substr lay (1+ (strlen lay_pre))))
)
)
)
(setvar "CMDECHO" 1)
(princ)
)
图层控制,用VLA方法很容易!
现提供两个函数,一个是批量图层加前缀函数,一个是根据前缀开关图层!
有了这两个函数,剩下的就是根据自己需求写出自己需要的程序来了!这个需要你自己来写!
;;当前图形所有图层添加前缀,参数 prefix = 前缀字串
(defun addprefixAll (prefix / name)
(vlax-for lay (vla-get-layers
(vla-get-ActiveDocument (vlax-get-acad-object))
)
(if (/= "0" (setq name (vla-get-name lay)))
(vla-put-name lay (strcat prefix name)) ;_ 添加前缀
)
)
)
;;关闭/打开所有前缀图层,参数 prefix = 前缀字串 flag = t 打开图层 = nil 关闭图层
(defun prefixlayeron (prefix flag)
(if flag
(setq flag :vlax-true) ;_ 打开图层
(setq flag :vlax-false) ;_ 关闭图层
)
(setq prefix (strcase prefix))
(vlax-for lay (vla-get-layers
(vla-get-ActiveDocument (vlax-get-acad-object))
)
(if (WCMATCH (strcase (vla-get-name lay)) (strcat prefix "*"))
(vla-put-layeron lay flag)
)
)
)
本帖最后由 wowan1314 于 2013-6-8 11:15 编辑
先搞个加前缀的<0,DEFPOINTS>这两图层不可以改。
冻结解冻图层用command也是一句话。
(defun c:T1 ()
(command ".Layer" "F" "JGLAY-*" "" );;;冻结JGLAY-开头图层
)
(defun c:T2 ()
(command ".Layer" "t" "JGLAY-*" "Y" "");;解冻JGLAY-开头图层
)
有点象外部引用的 卸载 Gu_xl 发表于 2012-12-14 18:50 static/image/common/back.gif
图层控制,用VLA方法很容易!
现提供两个函数,一个是批量图层加前缀函数,一个是根据前缀开关图层!
有了 ...
有时vlisp很方便,可惜autodesk没有对vl进行扩展。 Gu_xl 发表于 2012-12-14 18:50 static/image/common/back.gif
图层控制,用VLA方法很容易!
现提供两个函数,一个是批量图层加前缀函数,一个是根据前缀开关图层!
有了 ...
有时vl很方便,可惜autodesk没有对vl进行扩展。 本帖最后由 半听可乐 于 2012-12-14 22:46 编辑
wowan1314 发表于 2012-12-14 18:58 http://bbs.mjtd.com/static/image/common/back.gif
先搞个批量加前缀的这两图层不可以改。
打开关闭图层用command就一句话。
朋友,跟我想要的效果有差距啊~~
1.你的程序不知道是不是我使用不当,bug见gif:①提示输入无效②只改了一个图层(第二次按程序提示输入)~③有几个层还被多次加前缀
2.加前缀不希望提示选择图元,而是直接把当前图纸中的所有图层(包括没显示的,0层和DEFPOINTS层除外)直接加前缀【最好能增加改前缀、删前缀】
3.图层控制我希望是在冻结与解冻之间切换 Gu_xl 发表于 2012-12-14 18:50 static/image/common/back.gif
图层控制,用VLA方法很容易!
现提供两个函数,一个是批量图层加前缀函数,一个是根据前缀开关图层!
有了 ...
感谢G版的再次关注!你这是要逼我在繁重的加班之余学习编程了,可现在实在是心有余力不足啊,见谅见谅~~ 本帖最后由 zzc83 于 2012-12-14 23:58 编辑
外部引用的 绑定,可以满足图层加前缀的要求,绑定了又是个块,放好图层 当然可以 一键冻结/显示。
我理解错了可乐的意思?