为所有la添加前缀或后缀
我想看看我可以使用什么命令将“Exist”添加到图形中的所有图层。我理解基本的lisp命令,
谢谢 您可能可以使用“rename”命令来完成。在“重命名”对话框中,输入“*”作为旧层名称以应用于所有层,然后输入“前缀*”或“*后缀”作为新名称。 我已经做了一个小VBA函数来做到这一点,但不知道如何上传到这里。它有一个表单和编码。
窗口如下所示
http://img147.imageshack.us/my.php?image=screenshotqm4.jpg 您也可以尝试以下方法:
(defun c:layrename (/ adoc str)
(vl-load-com)
(initget "Prefix Suffix _ P S")
(setq adoc (vla-get-activedocument (vlax-get-acad-object))
answer (getkword "\nUse string like <Prefix> : ")
str (getstring "\nString to add <Exit> : ")
) ;_ end of setq
(vla-startundomark adoc)
(if (not answer)
(setq answer "P")
) ;_ end of if
(vlax-for item (vla-get-layers adoc)
(vl-catch-all-apply
'vla-put-name
(list
item
(cond
((= answer "P")
(strcat str (vla-get-name item))
)
(t
(strcat (vla-get-name item) str)
)
) ;_ end of cond
) ;_ end of list
) ;_ end of VL-CATCH-ALL-APPLY
) ;_ end of vlax-for
(vla-endundomark adoc)
(princ)
) ;_ end of defun 这是一个很好的惯例。你能做到你可以选择一个层或触摸和对象,只需将sufix默认为-extg或任何你想作为sufix的东西吗。我们正在使用aia标准,因此我们只需要添加一个-extg或-demo等的sufix。。 它是非常有用的lisp
但我认为,如果它能这样工作,它将更加有用和实用:
命令:选择图层(通过单击图形中的对象)
命令行中a层ppear的名称
然后单击另一个对象选择另一个图层
然后单击enter结束选择
命令:输入要添加到选定图层名称的后缀或前缀
然后所有选定层的名称都更改了
谢谢 这是我现在使用的,但它需要所有4个lisp例程。我有一种方法可以用宏或较短的lisp做同样的事情。我现在就是这样扣的。
^C^C(加载“NMELIST”);(加载“NCLTLIST”);(加载“ustr”);(加载“layerextg”)^C^Clayrn;
例行程序1
;此例程将重命名图形中的所有图层
;前缀为用户选择的后缀默认值“_BAK”。
;帮助插入接地
;
;使用它的一种方法是从
;建筑师。复制所有实体
(defun c:layrn()
(setq LsuffIX(ustr 1“Enter layer suffix”“-extg“nil))
(如果(非ncltlist)(加载“ncltlist”))
(setq文件(ncltlist)
外卖清单(汽车用品)
ENTS(cadr材料)
CNTR 0
)
(foreach LAYDAT LAYLIST(程序
(setq LAYNME2(strcat(car LAYDAT)LsufFIX))
(命令“layer”“m”LAYNME2“C”(cadr LAYDAT)“lt”(caddr LAYDAT)”“”)
(提示“-”)
)
)
(SETQ ALIS(SSGET))
(命令“CHANGE”ALIS““P”LT“hidden2”C“13”)
(重复(sslength ENTS)
(setq ENTDAT)
(subst
(缺点8
(strcat)
(cdr
(setq旧
(协会8)
(setq ENTDAT)
(entget)
(setq ENTNME)
(ssname ENTS CNTR)
)
)
)
)
)
)LsufFIX
)
)旧ENTDAT
)
)
(entmod ENTDAT)
(entupd ENTNME)
(setq CNTR(1+CNTR))
(提示“.”)
);重复
(普林斯)
)
例行程序2
;此例程列出所有(图层名称、颜色和线型)
;在选择中,PLUS返回表单中的选择集
;((N C LT)(N C LT)…)(选择集)
;
;要检索选择集,请使用(cadr(ncltlist))
;
;
(defun ncltlist()
(如果(非nmelist)(加载“nmelist”))
(setq STUFF(nmelist)
NCLT无
NLIST(汽车用品)
ss1(cdr材料)
)
(foreach LNAME NLIST(程序
(setq LDAT(tblsearch“layer”LNAME)
LCOLOR(cdr(ASSOC 62 LDAT))
LLTYPE(cdr(ASSOC 6 LDAT))
NCLT(CONS(list LNAME LCOLOR LLTYPE)NCLT)
)
)
)
(setq输出(cons NCLT ss1))
);德芬
例行程序3
;该例程列出了所有图层名称
;在选择中
(defun nmelist()
(setq cntr 0
NLIST'()
ss1(ssget)
)
(重复(sslength ss1)
(setq LYRNME(cdr(assoc 8(entget(ssname ss1 cntr 1070;))))
(如果(不是(成员LYRNME NLIST))
(setq NLIST(cons LYRNME NLIST))
)
(setq CNTR(1+CNTR))
);重复
(setq输出(list nlist ss1))
);德芬
例行程序4
;* USTR用户界面字符串
;* 如果位=1,则不允许输入null,0表示注释,如果存在DEF,则忽略位。
;* MSG是提示字符串,其中添加了一个默认字符串(nil)
;* 或“”表示无),并添加:号。如果SPFLAG T,则允许在
;* 一串
;*
(defun ustr(位msg def spflag/inp nval)
(如果(和def(/=def“”))
(setq msg(strcat“\n”msg”:)
inp(getstring msg spflag)
inp(if(=inp“”)def inp)
);setq公司
(程序
(setq msg(strcat“\n”msg”:)
(如果(=位1)
(while(=“”(setq inp(getstring msg spflag)))
(setq inp(getstring msg spflag))
) );编程和if
);如果
inp公司
);德芬
;* 这里有一个游戏:
;;CAB 03.09.07
;;LayerRename.lsp
;;Rename selected layers with prefix or suffix
(defun c:Lprefix()
(LayerRename t)
)
(defun c:Lsuffix()
(LayerRename nil)
)
;;Use these to change the string
(defun c:ChgPrefix ()
(while
(progn
(initget 1)
(setq *prefix (getstring t "\nEnter the prefix: "))
(= "" *prefix)
)
(princ)
)
)(defun c:ChgSuffix ()
(while
(progn
(initget 1)
(setq *suffix (getstring t "\nEnter the suffix: "))
(= "" *suffix)
)
)
(princ)
)
(defun LayerRename (pre / obj lyr newlyr str getlyr)
(defun GetLayer (Obj)
(vla-get-name (vla-item (vla-get-layers *doc*) (vla-get-layer Obj)))
)
(vl-load-com)
(or *acad* (setq *acad* (vlax-get-acad-object)))
(or *doc* (setq *doc* (vla-get-activedocument *acad*)))
(if Pre
(if (or (null *prefix) (= *prefix "")) (c:ChgPrefix))
(if (or (null *suffix) (= *suffix "")) (c:ChgSuffix))
)
(if Pre
(setq str *prefix)
(setq str *suffix)
)
(while (setq ent (entsel "\nSelect an object to rename the layer."))
(setq obj (vlax-ename->vla-object (car ent)))
(cond
((wcmatch (setq lyr (getlayer obj)) "*|*")
(prompt "\n**Can not rename a xref layer.")
)
((wcmatch lyr (strcat "*" str "*")) ; potential problems here
;;if the layer name inadvertenlt has the matching string
(prompt "\n**This layer is already renamed.")
)
(t
(if Pre (setq newlyr (strcat str lyr)) (setq newlyr (strcat lyr str)))
(if (vl-catch-all-error-p
(vl-catch-all-apply
'vla-put-name
(list (vla-item (vla-get-layers *doc*) (vla-get-layer Obj))
newlyr)))
(prompt (strcat "\n**Layer " lyr " could not be renamed."))
(prompt (strcat "\nLayer " lyr " has been renamed."))
)
)
)
)
(princ)
)
(prompt (strcat "\nLayer Rename loaded, Enter LaRn to run."
"\nEnter ChgSuffix to change the siffix."))
(princ) 你很棒,卡布先生
我尝试将2个路由组合在一起,以选择重命名所有层,或通过在一个命令中选择对象来逐个重命名,但我失败了,我这样做了
密码
(定义c:chlrnm(/*前缀)
(setq txtstle(getvar“textstyle”))
(initget 1“多单”)
(setq ser1(getkword“多层或单层(Single)”)
(如果(非ser1)
(程序
(setq ser1“单”)
)
)
(如果(=ser1“多”)
(程序
(vl load com)
(initget“前缀后缀_PS”)
(setq adoc(vla get activedocument(vlax get acad object))
答案(getkword)“\n使用类似字符串[前缀/后缀] : ")</prefix></p>
<p> str (getstring "\nString to add <exit> : ")</exit></p>
<p> ) ;_ end of setq</p>
<p>(vla-startundomark adoc)</p>
<p>(if (not answer)</p>
<p> (setq answer "P")</p>
<p> ) ;_ end of if</p>
<p>(vlax-for item (vla-get-layers adoc)</p>
<p> (vl-catch-all-apply</p>
<p> 'vla-put-name</p>
<p> (list</p>
<p> item</p>
<p> (cond</p>
<p> ((= answer "P")</p>
<p> (strcat str (vla-get-name item))</p>
<p> )</p>
<p> (t</p>
<p> (strcat (vla-get-name item) str)</p>
<p> )</p>
<p> ) ;_ end of cond</p>
<p> ) ;_ end of list</p>
<p> ) ;_ end of VL-CATCH-ALL-APPLY</p>
<p> ) ;_ end of vlax-for</p>
<p>(vla-endundomark adoc)</p>
<p> )</p>
<p> )</p>
<p>(if(= ser1 "Single")</p>
<p> (progn</p>
<p> </p>
<p>;;Use these to change the string</p>
<p>(defun c:ChgPrefix ()</p>
<p>(while</p>
<p> (progn</p>
<p> (initget 1)</p>
<p> (setq *prefix (getstring t "\nEnter the prefix: "))</p>
<p> (= "" *prefix)</p>
<p> )</p>
<p> (princ)</p>
<p>)</p>
<p>)(defun c:ChgSuffix ()</p>
<p>(while</p>
<p> (progn</p>
<p> (initget 1)</p>
<p> (setq *suffix (getstring t "\nEnter the suffix: "))</p>
<p> (= "" *suffix)</p>
<p> )</p>
<p>)</p>
<p> (princ)</p>
<p>)</p>
<p> </p>
<p> </p>
<p>(defun LayerRename (pre / obj lyr newlyr str getlyr)</p>
<p>(defun GetLayer (Obj)</p>
<p> (vla-get-name (vla-item (vla-get-layers *doc*) (vla-get-layer Obj)))</p>
<p>)</p>
<p>(vl-load-com)</p>
<p>(or *acad* (setq *acad* (vlax-get-acad-object)))</p>
<p>(or *doc* (setq *doc* (vla-get-activedocument *acad*)))</p>
<p>(if Pre</p>
<p> (if (or (null *prefix) (= *prefix "")) (c:ChgPrefix))</p>
<p> (if (or (null *suffix) (= *suffix "")) (c:ChgSuffix))</p>
<p>)</p>
<p>(if Pre</p>
<p> (setq str *prefix)</p>
<p> (setq str *suffix)</p>
<p>)</p>
<p>(while</p>
<p> (setq ent (entsel "\nSelect an object to rename the layer."))</p>
<p> (setq obj (vlax-ename->vla-object (car ent)))</p>
<p> (cond</p>
<p> ((wcmatch (setq lyr (getlayer obj)) "*|*")</p>
<p> (prompt "\n**Can not rename a xref layer.")</p>
<p> )</p>
<p> ((wcmatch lyr (strcat "*" str "*")) ; potential problems here</p>
<p> ;;if the layer name inadvertenlt has the matching string</p>
<p> (prompt "\n**This layer is already renamed.")</p>
<p> )</p>
<p> (t</p>
<p> (if Pre (setq newlyr (strcat str lyr)) (setq newlyr (strcat lyr str)))</p>
<p> (if (vl-catch-all-error-p</p>
<p> (vl-catch-all-apply</p>
<p> 'vla-put-name</p>
<p> (list (vla-item (vla-get-layers *doc*) (vla-get-layer Obj))</p>
<p> newlyr)))</p>
<p> (prompt (strcat "\n**Layer " lyr " could not be renamed."))</p>
<p> (prompt (strcat "\nLayer " lyr " has been renamed."))</p>
<p> )</p>
<p> )</p>
<p> )</p>
<p> </p>
<p> )</p>
<p>(princ)</p>
<p>)</p>
<p> )</p>
<p>)</p>
<p>)</p>
<p>;;;;;;;;;;;;</p>
<p>any help will be a ppreciated</p>
<p> </p>
<p>Hi gman,</p>
<p>test this code</p>
<p></p>
(defun table (s / d r) ; Michael Puckett
(while
(setq d (tblnext s (null d)))
(setq r (cons (cdr (assoc 2 d)) r))
)
)
(defun c:test (/ add lst xlay)
(setq lst (cdr (reverse (table "layer"))))
(setq add "Exist")
(foreach x lst
(setq xlay (strcat x " - " add))
(command "_rename" "layer" x xlay)
) ; foreach
(princ)
) ; defun
这很好,但我的目标是选择层,然后添加后缀。这个例程使所有后缀都存在。谢谢您的关注。
页:
[1]
2