乐筑天下

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

[编程交流] 外部参照代码

[复制链接]

4

主题

10

帖子

6

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:25:58 | 显示全部楼层 |阅读模式
你好,我已经潜伏了一段时间的CADTutor论坛。大约几天前,我决定先潜入AutoLISP。
 
通常我喜欢自己想办法解决问题,但现在把它砸在桌子上会让我头痛不已,所以我决定寻求一些专家建议。
 
我们有一个覆盖3个乡镇/地区的服务区。每个部分和某些区域的四分之一部分都是一个地图(图形),因此我一直在尝试在地图边缘获取一个文本实体,以便用户可以单击它们,然后单击一个按钮,该按钮运行lisp例程,该例程自动将正确的部分外部参照到位。这是我目前掌握的代码。
 
  1. (vl-load-com)                                                
  2. (defun C:hyperload ( / ent p1)                                    
  3. (setq ent (entsel "\nSelect text at edge of drawing "))
  4.        (setq p1 (strcat "M:\\NewMaps\"(vla-get-TextString (vlax-ename->vla-object (car ent)))))
  5.                                                       
  6.    (command "xref"                                            
  7.    "a"                                                
  8.    p1                                                                                 
  9.    "0,0"                                                        
  10.    ""
  11.    ""
  12.    "")
  13.      
  14.   (princ)
  15. )
  16. (princ)

问题是当有人外部参照创建循环参照的地图时。它试图在问题中加上“0,0”,然后出错,因为它需要是或否。
为了解决这个问题,我将其从“附加”改为“覆盖”,并在代码中添加了“是”。如果有一个循环引用,并且出现了继续的问题,那么效果很好。
 
那么,我该如何让脚本停止,让用户输入yes或no,然后继续?

如果存在循环参照,我如何使外部参照自动覆盖?
 
关于我想尝试做的其他事情,我还有很多其他问题。但这是目前最大的一个。
谢谢你的回复。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 10:33:43 | 显示全部楼层
暂时将专家系统变量设置为5可能允许您忽略循环引用问题。
回复

使用道具 举报

4

主题

10

帖子

6

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:46:44 | 显示全部楼层
谢谢你的回复
我将command expert 5放在xref命令之前,然后在之后返回到0。但循环引用问题仍然存在。只有当有人保存了一个带有外部参照的地图时,才会出现这种情况,这是他们一开始就不应该做的,所以也许我现在就不去管它了。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 10:52:15 | 显示全部楼层
值得一试。我自己也有点好奇;可能需要做一些挖掘。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 11:00:30 | 显示全部楼层
只是好奇。。。为什么有循环引用?
 
如果所有外部参照(用于地图)都被外部参照为覆盖,而不是附件(甚至在它们之间,即四分之一截面等),则此问题不存在。
 
相反,如果将地图作为附件外部参照到一个图形中(已卸载),则可以轻松使用ActiveX外部参照该参照,并根据选择加载/卸载后续外部参照。
 
无论如何,*至少*如果你不想全力以赴,我会使用类似的方法:
 
  1. (defun C:hyperload  (/ eName)
  2. (vl-load-com)
  3. [color=blue](if [/color](setq eName [color=blue](car [/color](entsel "\n  >>  Select Text at Edge of Drawing: ")[color=blue])[/color])
  4.    (command
  5.      "[color=blue]._-[/color]xref"
  6.      "[color=blue]_attach[/color]"
  7.      (strcat
  8.        "M:\\NewMaps\"
  9.        (vla-get-TextString (vlax-ename->vla-object eName)))
  10.      [color=blue]'(0 0 0)
  11.      1
  12.      1
  13.      0[/color]))
  14. (princ))

 
请注意,如果用户选择了错误的文本,即任何不是地图名称的内容,这仍然不能防止出现错误
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 11:10:21 | 显示全部楼层
*轻微*缓解:
 
  1. (defun C:hyperload  (/ eName dwgName dir)
  2. (vl-load-com)
  3. (if [color=red](and[/color] (setq eName (car (entsel "\n  >>  Select Text at Edge of Drawing: ")))
  4.           [color=red](vl-position
  5.             (strcase (setq dwgName (vla-get-TextString (vlax-ename->vla-object eName))))
  6.             (vl-directory-files (setq dir "M:\\NewMaps\") "*.dwg" 1)))[/color]
  7.    (command "._-xref" "_attach" (strcat dir dwgName ".dwg") '(0 0 0) 1 1 0))
  8. (princ))
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:13:42 | 显示全部楼层
 
FindFile是你的朋友:眨眼:
 
  1. (defun c:Foo (/ e l n)
  2. (if (and (setq e (car (entsel "\nSelect text: ")))
  3.           (member (cdr (assoc 0 (setq l (entget e)))) '("MTEXT" "TEXT"))
  4.           (findfile (setq n (strcat "M:\\NewMaps\" (cdr (assoc 1 l)) ".DWG")))
  5.      )
  6.    (command "._-xref" "_attach" n '(0 0 0) 1 1 0)
  7. )
  8. (princ)
  9. )
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 11:24:48 | 显示全部楼层
是的,当然。
 
有趣的是,我已经编写了几行ActiveX代码来响应OP,并且只选择发布一个片段,因为我觉得这是一个重要的检查(验证选择的文本是否与其中一个图形匹配)。事实上,我这一头并不是这样写的。
 
编辑:我的原始代码是几行,因为我最初是在浏览blocks集合。
回复

使用道具 举报

4

主题

10

帖子

6

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 11:26:25 | 显示全部楼层
哇,谢谢,你们太棒了
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 20:51 , Processed in 0.596104 second(s), 81 queries .

© 2020-2025 乐筑天下

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