ADSK2007 发表于 2022-7-6 09:06:28

用新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

SLW210 发表于 2022-7-6 09:40:53

请阅读代码发布指南

ADSK2007 发表于 2022-7-6 09:56:04

很抱歉。这是带标签的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

ADSK2007 发表于 2022-7-6 10:22:12

我终于解决了。下面是正确的例程。只需用红色填充区域。
对于文件名,只需键入不带扩展名的文件名。
 

(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]
查看完整版本: 用新X替换外部参照