乐筑天下

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

[编程交流] 将旧的外部参照文件替换为

[复制链接]

4

主题

20

帖子

16

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 06:32:12 | 显示全部楼层 |阅读模式
嗨,下午好,晚上好,早上好,
 
我正在寻找任何可能的帮助,从标题开始,我正在查看某种Lisp代码,对于多个图形上的多个X-Ref,该代码将X-Ref文件名从“X”更改为“y”。
 
我在2010年发现了一些指向一个线程的信息,我没有将代码复制到这个线程中,而是附加了下面的链接
 
http://www.cadtutor.net/forum/archive/index.php/t-38673.html
 
我希望有人确认上述线程中遇到的LISP代码是否有效,是否有人可以解释我将如何将其加载到我的计算机和autocad softaware中。
 
病史。。。。。
 
我们在汉堡的办公室有大量已创建的x-ref(3000),我们现在希望将我们全球办公室的x-ref文件名从基于德国的accronym更新为通用accronym。当我们打开包含x-ref的现有图形时,Lisp函数是否可以将x-ref重命名为新的x-ref文件名?
 
一旦我们重新命名了x-ref,我们希望将其重新定位到一个国际文件服务器上,供所有办公室使用,我相信reference manager可以用于此,这让我感到困惑的是x-ref文件名的重新命名
 
如果可能的话,我将不胜感激。。。。
 
非常感谢
 
 
亲切的问候
 
西蒙
回复

使用道具 举报

4

主题

27

帖子

23

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 06:42:46 | 显示全部楼层
 
在阅读了您提供的链接后,我相信通过一些小的编辑,代码将适合您使用。
 
要加载代码,请执行以下操作:
-将文件保存到公共目录(C:\ \u CADsetup\LiSP)
-在命令行中键入APPLOAD,然后继续在最初保存文件的目录中查找该文件。
-通过拖放将文件添加到启动套件(公文包)
-单击关闭按钮
 
要启动代码/命令:
-在显示为红色的代码中键入提供的命令别名(defun c:xrefnamechange(/b bcol path)
-遵循任何提示(如果有)
回复

使用道具 举报

4

主题

20

帖子

16

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 06:44:57 | 显示全部楼层
 
嗨,大卫,
 
我按照代码文本中的建议更改了代码,以反映新旧x-ref名称和文件夹位置:
 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>> 按此格式输入以下所有外部参照名称>>>>
;>>>>> (“OldXrefName”。“NewXrefName”)>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
(“GL”“EARTHSymbol”)
(“S”“Shield”)
(“VERT4992”“RS422”)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>> 外部路径更改。lsp在这里呼叫。>>>>
;>>> 以此格式输入要更改的所有外部参照路径。>>>
;>>> (xrefpathchange“c:\\Oldfolder\\Oldfolder”“c:\\newfolder\\newfolder”)>>>
;>>> 注意:如果新的外部参照路径不变,请删除代码。>>>
;>>> 添加在每行的前面加上块代码。>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
(xrefpathchange“Z:\\CADE\\SYM\\A”“S:\\AutoCAD自定义\\工作”)
(xrefpathchange“Z:\\CADE\\SYM\\A”“S:\\AutoCAD自定义\\工作”)
(xrefpathchange“Z:\\CADE\\SYM\\SONST”“S:\\AutoCAD自定义\\工作”)
 
我一步一步地遵循您的设置,然而,当我输入代码命令xrefnamechange时,我在命令框中得到了以下错误消息
 
命令:xrefnamechange
; 错误:自动化错误。文件访问错误
命令:
作为所有这些的初学者,我将在黑暗中尝试一下,并质疑在代码的(xrefpathchange“Z:\\CADE\\SYM\\a”“S:\\AutoCAD Customization\\Working”)部分中使用double\\n这可能是原因吗?
如果您有任何其他建议或建议,将不胜感激
非常感谢
西蒙
 
 
回复

使用道具 举报

48

主题

1073

帖子

1043

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
238
发表于 2022-7-6 06:48:58 | 显示全部楼层
我不是回答你问题的最佳人选,但万一没人来,我会尽力的。
 
双反斜杠是正确的。LISP将反斜杠解释为“后面有一些特别的东西,忘记你看到我了”。因此,需要两个反斜杠才能发送一个(IYSWIM)。
 
文件访问错误表明无法读取或写入文件。我不确定这是否会有所不同,但外部参照在新旧文件夹中都可用吗?
回复

使用道具 举报

4

主题

20

帖子

16

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 06:54:19 | 显示全部楼层
您好,谢谢您的回复,
 
我刚刚检查过,我确实对这两个文件夹都有读写权限,至于你回复的第二部分。。。。。不,X-ref仅在源目录Z中可用:\\CADE\\SYM\\A
目标目录S:\\AutoCAD Customization\\Working为空,我是否应该将“原始命名”X-Ref复制到目标文件夹中,然后LISP函数将其重新命名为“新名称”?
 
非常感谢
 
当做
 
西蒙
回复

使用道具 举报

48

主题

1073

帖子

1043

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
238
发表于 2022-7-6 07:03:44 | 显示全部楼层
我不知道,但值得一试
回复

使用道具 举报

4

主题

20

帖子

16

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 07:06:59 | 显示全部楼层
你好
 
试过了,还是没有快乐,。。。。如果我要破坏代码,只需使用X-Ref将代码的一部分重命名为绿色(代码的一半)。。。。如何、在何处以及如何成功停止代码?
 
;................................................. ..............................
;
; >
;
; >
;
; 注意:如果新外部参照位于其他文件夹中,则必须调出
; 外部路径更改。lsp来自下面的代码。
;
;................................................. ..............................
 
(defun c:xrefnamechange(/b bcol路径)
(vl load com)
(setq bcol(vla get blocks(vla get activedocument(vlax get acad object)))
(foreach blk'(
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>> 按此格式输入以下所有外部参照名称>>>>
;>>>>> (“OldXrefName”。“NewXrefName”)>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 
(“X-TEST-1a”,“X-TEST-1b”)
(“X-TEST-2a”,“X-TEST-2b”)
(“X-TEST-3a”,“X-TEST-3b”)
 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
)
(如果
(和
(not(vl-catch-all-error-p(setq b(vl catch all apply’vla item)(列出bcol(car blk)1072;а)а)))
(=(vla get isxref b):vlax true)
)
(progn(vla put name b(cdr blk))
(if(=(setq path(vl filename directory(vla get path b)))“”)
(vla put路径b(strcat(cdr blk)“.dwg”))
(vla put路径b(strcat路径“\\”(cdr blk)“.dwg”))
)
(vla重新加载b)
)
)
)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>> 外部路径更改。lsp在这里呼叫。>>>>
;>>> 以此格式输入要更改的所有外部参照路径。>>>
;>>> (xrefpathchange“c:\\Oldfolder\\Oldfolder”“c:\\newfolder\\newfolder”)>>>
;>>> 注意:如果新的外部参照路径不变,请删除代码。>>>
;>>> 添加在每行的前面加上块代码。>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 
(xrefpathchange“c:\\AutoCAD Customization”“c:\\AutoCAD Customization\\Working”)
(xrefpathchange“c:\\AutoCAD Customization”“c:\\AutoCAD Customization\\Working”)
(xrefpathchange“c:\\AutoCAD Customization”“c:\\AutoCAD Customization\\Working”)
 
(X重新加载)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
(普林斯)
);c结束:XrefNameChange
 
 
 
;................................................. ..........
;.... ronjonp的外部参照路径更改子程序。。。。
;................................................. ..........
(defun xrefpathchange(路径1路径2/newpath xrpath)
(vl load com)
(vlax地图集合
(vla get blocks(vla get activedocument(vlax get acad object)))
(功能
(λ(x)
(if(=(vla get isxref x):vlax true)
(progn(setq xrpath(strcase(vlax get x’path)t)
路径1(strcase path1 t)
路径2(strcase path2 t)
)
(如果(和(vl字符串搜索路径1 xrpath)
(setq newpath(vl string subst path2 path1 xrpath))
(findfile newpath)
)
(if(vl-catch-all-error-p(vl-catch-all-apply’vla put path(list x newpath)))
(princ(strcat“\n**找到了旧路径,但未更改!\n”xrpath))
(princ(strcat“\n”newpath))
)
)
)
)
)
)
)
(普林斯)
); 外部路径更改结束
 
 
;................................................. ............
;.... 外部参照重新加载子程序。。。。。。。
;................................................. ............
(defun XReload(/cObj cName);更新2007-10-1:添加错误陷阱
 
(defun*错误*(msg)
(setvar“modemacro.”)
(setvar“cmdecho”1)
(princ“\n…重新加载外部参照终止!!!”)
(普林斯)
); 结束*错误*
 
(setvar“modemacro”“重新加载加载的外部参照……请稍候……”)
(setvar“cmdecho”0)
(setq cObj(tblnext“BLOCK”T))
(而cObj
(setq cName(cdr(assoc 2 cObj)))
(如果
(和
(=(logand(cdr(assoc 70 cObj))32)32)
(=(logand(cdr(assoc 70 cObj))4)4)
); 结束和
(程序
(vl cmdf“.xref”“\u unload”cName)
(vl cmdf“.xref”“\u reload”cName)
); 结束程序
); wnd如果
(setq cObj(tblnext“块”))
); 结束时
(setvar“modemacro.”)
(setvar“cmdecho”1)
(提示“\n---外部参照更改完成!”)
(普林斯)
); XReload结束
回复

使用道具 举报

4

主题

20

帖子

16

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 07:11:10 | 显示全部楼层
抱歉,因为某种原因,它已被替换为一个十字脸和一个悲伤的脸
回复

使用道具 举报

4

主题

20

帖子

16

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 07:17:12 | 显示全部楼层
抱歉,因为某种原因,它已被替换为一个十字脸和一个悲伤的脸
回复

使用道具 举报

48

主题

1073

帖子

1043

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
238
发表于 2022-7-6 07:23:36 | 显示全部楼层
现在我已经不舒服了,但如果你运行VLISP编辑器,你可以设置断点或单步执行你的代码。希望知道他们在说什么的人很快就会出现。
 
关于另一个主题,请在你的代码周围使用代码标签,这样可以去掉脸,也可以阻止版主告诉你这样做。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 15:03 , Processed in 0.387600 second(s), 72 queries .

© 2020-2025 乐筑天下

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