乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 73|回复: 3

[编程交流] 用新X替换外部参照

[复制链接]

10

主题

53

帖子

44

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 09:06:28 | 显示全部楼层 |阅读模式
你好
 
我正在寻找一个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
回复

使用道具 举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-6 09:40:53 | 显示全部楼层
请阅读代码发布指南
回复

使用道具 举报

10

主题

53

帖子

44

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 09:56:04 | 显示全部楼层
很抱歉。这是带标签的LISP
 
  1. (defun c:xrch (/ OLDERR B XRLIST XRCHANGE XRPATH XRNAME )
  2. (setq olderr *error*)
  3. (defun *error* (msg)
  4.    (if (/= msg "Function cancelled")
  5.      (princ (strcat "Error: " msg)))
  6.    (setvar "cmdecho" 1)
  7.    (graphscr)
  8.    (setq *error* olderr)
  9.    (princ)
  10.    ); end error
  11. (setvar "cmdecho" 0)
  12. (setq B (tblnext "block" 1))
  13. (while B
  14.    (if (assoc 1 B)     ;find all xrefs
  15.      (setq XRLIST (cons (cdr (assoc 2 B)) XRLIST))) ;in drawing
  16.    (setq B (tblnext "block")))
  17. (while (not XRCHANGE)     
  18.    (textscr)
  19.    (repeat 10
  20.      (terpri))
  21.    (princ "**External References in Drawing**\n") ;print out a list
  22.    (princ "----------------------------------") ;of xrefs for the
  23.    (mapcar 'print XRLIST)    ;the user to see
  24.    (repeat 5
  25.      (terpri))
  26.    (setq XRCHANGE (getstring "\nEnter old external reference name: "))
  27.    (if (tblsearch "block" XRCHANGE)
  28.      (progn
  29.        (while (not XRPATH)         
  30.          (setq XRNAME (getstring "\nEnter new external reference name: "))  ;our folder structure is setup
  31.          (setq XRPATH (strcat (substr (getvar "dwgprefix") 1 18) XRNAME ".dwg"))  ;that the xrefs reside one folder
  32.          (if (findfile XRPATH)             ;level up from drawing
  33.            (progn              
  34.              (command ".-xref" "p" XRCHANGE XRPATH) ;sets the new path
  35.              (command ".-rename" "b" XRCHANGE XRNAME) ;sets the new name
  36.              );progn
  37.            (progn
  38.              (princ (strcat "\nCould not find " (strcase XRNAME) " in search path.")) ;not found in xref folder
  39.              (setq XRNAME nil)
  40.              (setq XRPATH nil)
  41.              );progn
  42.            );if
  43.          );while
  44.        );progn
  45.        (progn
  46.          (princ (strcat "\nCould not find " (strcase XRCHANGE) " in drawing.")) ;not an xref in drawing
  47.          (setq XRCHANGE nil)
  48.          );progn
  49.        );if        
  50.      );while
  51.    (graphscr)
  52.    (setvar "cmdecho" 1)
  53.    (setq *error* olderr)
  54.    (princ)
  55.    );eof
回复

使用道具 举报

10

主题

53

帖子

44

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 10:22:12 | 显示全部楼层
我终于解决了。下面是正确的例程。只需用红色填充区域。
对于文件名,只需键入不带扩展名的文件名。
 
  1. (defun c:xrch (/ OLDERR B XRLIST XRCHANGE XRPATH XRNAME )
  2. (setq olderr *error*)
  3. (defun *error* (msg)
  4.    (if (/= msg "Function cancelled")
  5.      (princ (strcat "Error: " msg)))
  6.    (setvar "cmdecho" 1)
  7.    (graphscr)
  8.    (setq *error* olderr)
  9.    (princ)
  10.    ); end error
  11. (setvar "cmdecho" 0)
  12. (setq B (tblnext "block" 1))
  13. (while B
  14.    (if (assoc 1 B)     ;find all xrefs
  15.      (setq XRLIST (cons (cdr (assoc 2 B)) XRLIST))) ;in drawing
  16.    (setq B (tblnext "block")))
  17. (while (not XRCHANGE)     
  18.    (textscr)
  19.    (repeat 10
  20.      (terpri))
  21.    (princ "**External References in Drawing**\n") ;print out a list
  22.    (princ "----------------------------------") ;of xrefs for the
  23.    (mapcar 'print XRLIST)    ;the user to see
  24.    (repeat 5
  25.      (terpri))
  26.    (setq XRCHANGE (getstring "\nEnter old external reference name: "))
  27.    (if (tblsearch "block" XRCHANGE)
  28.      (progn
  29.        (while (not XRPATH)         
  30.          (setq XRNAME "[color=red]TYPE XREF FILE NAME[/color]")         
  31.          (setq XRPATH (strcat "[color=red]TYPE THE NETWORK PATH[/color]"xrname".dwg"))     
  32.          (if (findfile XRPATH)                 
  33.            (progn               
  34.              (command ".-xref" "p" XRCHANGE XRPATH) ;sets the new path
  35.              (command ".-rename" "b" XRCHANGE XRNAME) ;sets the new name
  36.              );progn
  37.            (progn
  38.              (princ (strcat "\nCould not find " (strcase XRNAME) " in search path.")) ;not found in xref folder
  39.              (setq XRNAME nil)
  40.              (setq XRPATH nil)
  41.              );progn
  42.            );if
  43.          );while
  44.        );progn
  45.        (progn
  46.          (princ (strcat "\nCould not find " (strcase XRCHANGE) " in drawing.")) ;not an xref in drawing
  47.          (setq XRCHANGE nil)
  48.          );progn
  49.        );if        
  50.      );while
  51.    (graphscr)
  52.    (setvar "cmdecho" 1)
  53.    (setq *error* olderr)
  54.    (princ)
  55.    );eof
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-7 08:29 , Processed in 0.362434 second(s), 60 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表