半听可乐 发表于 2012-12-14 18:11:17

一半家产求批量改图层名等程序一套!

工作中需求:
有时候套结构专业的图纸,希望通过图层控制结构图的显示与否(用图块的话图纸会很卡!),通过图层管理器去一个个选图层不现实(图层名很乱,没规律,且各专业有同名的图层),如果在套图之前能给要套的图层批量加前缀就很方便控制了!如,结构图就加前缀JGLAY-,建筑图就加JZLAY-

希望程序能实现:
①批量加前缀;
②图层状态管理器----实现类似图层状态管理器的作用,如一键冻结/显示“JGLAY-”开头的图层(即控制结构图层的显示与否),参考附图

论坛里泡了不少时间,也找了很久,实在没找到比较理想的,希望得到各位高手的关注,谢谢!

ZZXXQQ 发表于 2012-12-14 18:11:18

本帖最后由 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)
)

Gu_xl 发表于 2012-12-14 18:50:45

图层控制,用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 发表于 2012-12-14 18:58:25

本帖最后由 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-开头图层

)

zzc83 发表于 2012-12-14 21:57:19

有点象外部引用的 卸载

NetBee 发表于 2012-12-14 22:30:53

Gu_xl 发表于 2012-12-14 18:50 static/image/common/back.gif
图层控制,用VLA方法很容易!
现提供两个函数,一个是批量图层加前缀函数,一个是根据前缀开关图层!
有了 ...

有时vlisp很方便,可惜autodesk没有对vl进行扩展。

NetBee 发表于 2012-12-14 22:32:10

Gu_xl 发表于 2012-12-14 18:50 static/image/common/back.gif
图层控制,用VLA方法很容易!
现提供两个函数,一个是批量图层加前缀函数,一个是根据前缀开关图层!
有了 ...

有时vl很方便,可惜autodesk没有对vl进行扩展。

半听可乐 发表于 2012-12-14 22:45:30

本帖最后由 半听可乐 于 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.图层控制我希望是在冻结与解冻之间切换

半听可乐 发表于 2012-12-14 22:50:09

Gu_xl 发表于 2012-12-14 18:50 static/image/common/back.gif
图层控制,用VLA方法很容易!
现提供两个函数,一个是批量图层加前缀函数,一个是根据前缀开关图层!
有了 ...

感谢G版的再次关注!你这是要逼我在繁重的加班之余学习编程了,可现在实在是心有余力不足啊,见谅见谅~~

zzc83 发表于 2012-12-14 23:56:59

本帖最后由 zzc83 于 2012-12-14 23:58 编辑

外部引用的 绑定,可以满足图层加前缀的要求,绑定了又是个块,放好图层 当然可以 一键冻结/显示。
我理解错了可乐的意思?
页: [1] 2 3 4 5
查看完整版本: 一半家产求批量改图层名等程序一套!