用新X替换外部参照
你好我正在寻找一个lisp例程,该例程可以用位于不同位置的新外部参照替换图形中的外部参照。情况是这样的。我们公司多年来一直在创建AutoCAD图形。当新项目进入时,我们使用创建一个新文件夹,并将边框复制到此文件夹中,并将其用作外部参照。直到现在,这还是老办法。
我需要完成的是,如果绘图人员打开旧图形,我希望他/她能够选择旧的外部参照并用特定的外部参照替换它。我已经知道外部参照的名称,也知道路径。这些事情永远不会改变。
我找到了这个lisp例程,它可以做我想做的事情,我要感谢曾经编写它的人。我唯一想更改的是-自动输入名称“XREF\u 1117.dwg”,而不是要求用户输入新名称
并自动输入外部参照“//srvfile/CAD/AutoCAD 2010/Xref”的位置。
我已经尝试过很多次了,但我对lisp的了解不允许我做到这一点。有人可以看看这个代码,让我知道我可以做什么使它工作?提前感谢您抽出时间。
=======================================================
(defun crch(/OLDERR B XRLIST XRCHANGE XRPATH XRNAME)
(setq olderr*error*)
(defun*错误*(msg)
(如果(/=msg“功能已取消”)
(princ(strcat“错误:”msg)))
(setvar“cmdecho”1)
(图表)
(setq*error*olderr)
(普林斯)
); 结束错误
(setvar“cmdecho”0)
(setq B(tblnext“block”1))
(B
(if(assoc 1 B);查找所有外部参照
(setq XRLIST(cons(cdr(assoc 2 B))XRLIST));在图纸中
(setq B(tblnext“块”))
(而不是XRCHANGE)
(文本SCR)
(重复10
(ERPI)
(原理“**图纸中的外部参考”;打印列表
(普林斯“-----------------------------------”);的外部参照
(mapcar的打印XRLIST);要查看的用户
(重复5次
(ERPI)
(setq XRCHANGE(getstring“\n输入旧的外部引用名称:”))
(如果(tblsearch“block”XRCHANGE)
(程序
(while(非XRPATH)
(setq XRNAME(getstring“\n输入新的外部引用名称:”);我们的文件夹结构已设置
(setq XRPATH(strcat(substr(getvar“dwgprefix”)1 1 XRNAME.dwg”);外部参照位于一个文件夹中
(if(findfile XRPATH);从图纸升级
(程序
(命令“-xref”“p”XRCHANGE XRPATH);设置新路径
(命令“-rename”“b”XRCHANGE XRNAME);设置新名称
);程序
(程序
(princ(strcat“\n无法在搜索路径中找到”(strcase XRNAME)”);在外部参照文件夹中找不到
(setq XRNAME nil)
(setq XRPATH nil)
);程序
);如果
);虽然
);程序
(程序
(princ(strcat“\n无法在图纸中找到”(strcase XRCHANGE)”);不是图形中的外部参照
(setq XRCHANGE nil)
);程序
);如果
);虽然
(图表)
(setvar“cmdecho”1)
(setq*error*olderr)
(普林斯)
);eof 请阅读代码发布指南 很抱歉。这是带标签的LISP
(defun c:xrch (/ OLDERR B XRLIST XRCHANGE XRPATH XRNAME )
(setq olderr *error*)
(defun *error* (msg)
(if (/= msg "Function cancelled")
(princ (strcat "Error: " msg)))
(setvar "cmdecho" 1)
(graphscr)
(setq *error* olderr)
(princ)
); end error
(setvar "cmdecho" 0)
(setq B (tblnext "block" 1))
(while B
(if (assoc 1 B) ;find all xrefs
(setq XRLIST (cons (cdr (assoc 2 B)) XRLIST))) ;in drawing
(setq B (tblnext "block")))
(while (not XRCHANGE)
(textscr)
(repeat 10
(terpri))
(princ "**External References in Drawing**\n") ;print out a list
(princ "----------------------------------") ;of xrefs for the
(mapcar 'print XRLIST) ;the user to see
(repeat 5
(terpri))
(setq XRCHANGE (getstring "\nEnter old external reference name: "))
(if (tblsearch "block" XRCHANGE)
(progn
(while (not XRPATH)
(setq XRNAME (getstring "\nEnter new external reference name: "));our folder structure is setup
(setq XRPATH (strcat (substr (getvar "dwgprefix") 1 18) XRNAME ".dwg"));that the xrefs reside one folder
(if (findfile XRPATH) ;level up from drawing
(progn
(command ".-xref" "p" XRCHANGE XRPATH) ;sets the new path
(command ".-rename" "b" XRCHANGE XRNAME) ;sets the new name
);progn
(progn
(princ (strcat "\nCould not find " (strcase XRNAME) " in search path.")) ;not found in xref folder
(setq XRNAME nil)
(setq XRPATH nil)
);progn
);if
);while
);progn
(progn
(princ (strcat "\nCould not find " (strcase XRCHANGE) " in drawing.")) ;not an xref in drawing
(setq XRCHANGE nil)
);progn
);if
);while
(graphscr)
(setvar "cmdecho" 1)
(setq *error* olderr)
(princ)
);eof
我终于解决了。下面是正确的例程。只需用红色填充区域。
对于文件名,只需键入不带扩展名的文件名。
(defun c:xrch (/ OLDERR B XRLIST XRCHANGE XRPATH XRNAME )
(setq olderr *error*)
(defun *error* (msg)
(if (/= msg "Function cancelled")
(princ (strcat "Error: " msg)))
(setvar "cmdecho" 1)
(graphscr)
(setq *error* olderr)
(princ)
); end error
(setvar "cmdecho" 0)
(setq B (tblnext "block" 1))
(while B
(if (assoc 1 B) ;find all xrefs
(setq XRLIST (cons (cdr (assoc 2 B)) XRLIST))) ;in drawing
(setq B (tblnext "block")))
(while (not XRCHANGE)
(textscr)
(repeat 10
(terpri))
(princ "**External References in Drawing**\n") ;print out a list
(princ "----------------------------------") ;of xrefs for the
(mapcar 'print XRLIST) ;the user to see
(repeat 5
(terpri))
(setq XRCHANGE (getstring "\nEnter old external reference name: "))
(if (tblsearch "block" XRCHANGE)
(progn
(while (not XRPATH)
(setq XRNAME "TYPE XREF FILE NAME")
(setq XRPATH (strcat "TYPE THE NETWORK PATH"xrname".dwg"))
(if (findfile XRPATH)
(progn
(command ".-xref" "p" XRCHANGE XRPATH) ;sets the new path
(command ".-rename" "b" XRCHANGE XRNAME) ;sets the new name
);progn
(progn
(princ (strcat "\nCould not find " (strcase XRNAME) " in search path.")) ;not found in xref folder
(setq XRNAME nil)
(setq XRPATH nil)
);progn
);if
);while
);progn
(progn
(princ (strcat "\nCould not find " (strcase XRCHANGE) " in drawing.")) ;not an xref in drawing
(setq XRCHANGE nil)
);progn
);if
);while
(graphscr)
(setvar "cmdecho" 1)
(setq *error* olderr)
(princ)
);eof
页:
[1]