外部参照代码
你好,我已经潜伏了一段时间的CADTutor论坛。大约几天前,我决定先潜入AutoLISP。通常我喜欢自己想办法解决问题,但现在把它砸在桌子上会让我头痛不已,所以我决定寻求一些专家建议。
我们有一个覆盖3个乡镇/地区的服务区。每个部分和某些区域的四分之一部分都是一个地图(图形),因此我一直在尝试在地图边缘获取一个文本实体,以便用户可以单击它们,然后单击一个按钮,该按钮运行lisp例程,该例程自动将正确的部分外部参照到位。这是我目前掌握的代码。
(vl-load-com)
(defun C:hyperload ( / ent p1)
(setq ent (entsel "\nSelect text at edge of drawing "))
(setq p1 (strcat "M:\\NewMaps\\"(vla-get-TextString (vlax-ename->vla-object (car ent)))))
(command "xref"
"a"
p1
"0,0"
""
""
"")
(princ)
)
(princ)
问题是当有人外部参照创建循环参照的地图时。它试图在问题中加上“0,0”,然后出错,因为它需要是或否。
为了解决这个问题,我将其从“附加”改为“覆盖”,并在代码中添加了“是”。如果有一个循环引用,并且出现了继续的问题,那么效果很好。
那么,我该如何让脚本停止,让用户输入yes或no,然后继续?
或
如果存在循环参照,我如何使外部参照自动覆盖?
关于我想尝试做的其他事情,我还有很多其他问题。但这是目前最大的一个。
谢谢你的回复。 暂时将专家系统变量设置为5可能允许您忽略循环引用问题。 谢谢你的回复
我将command expert 5放在xref命令之前,然后在之后返回到0。但循环引用问题仍然存在。只有当有人保存了一个带有外部参照的地图时,才会出现这种情况,这是他们一开始就不应该做的,所以也许我现在就不去管它了。 值得一试。我自己也有点好奇;可能需要做一些挖掘。 只是好奇。。。为什么有循环引用?
如果所有外部参照(用于地图)都被外部参照为覆盖,而不是附件(甚至在它们之间,即四分之一截面等),则此问题不存在。
相反,如果将地图作为附件外部参照到一个图形中(已卸载),则可以轻松使用ActiveX外部参照该参照,并根据选择加载/卸载后续外部参照。
无论如何,*至少*如果你不想全力以赴,我会使用类似的方法:
(defun C:hyperload(/ eName)
(vl-load-com)
(if (setq eName (car (entsel "\n>>Select Text at Edge of Drawing: ")))
(command
"._-xref"
"_attach"
(strcat
"M:\\NewMaps\\"
(vla-get-TextString (vlax-ename->vla-object eName)))
'(0 0 0)
1
1
0))
(princ))
请注意,如果用户选择了错误的文本,即任何不是地图名称的内容,这仍然不能防止出现错误 *轻微*缓解:
(defun C:hyperload(/ eName dwgName dir)
(vl-load-com)
(if (and (setq eName (car (entsel "\n>>Select Text at Edge of Drawing: ")))
(vl-position
(strcase (setq dwgName (vla-get-TextString (vlax-ename->vla-object eName))))
(vl-directory-files (setq dir "M:\\NewMaps\\") "*.dwg" 1)))
(command "._-xref" "_attach" (strcat dir dwgName ".dwg") '(0 0 0) 1 1 0))
(princ))
FindFile是你的朋友:眨眼:
(defun c:Foo (/ e l n)
(if (and (setq e (car (entsel "\nSelect text: ")))
(member (cdr (assoc 0 (setq l (entget e)))) '("MTEXT" "TEXT"))
(findfile (setq n (strcat "M:\\NewMaps\\" (cdr (assoc 1 l)) ".DWG")))
)
(command "._-xref" "_attach" n '(0 0 0) 1 1 0)
)
(princ)
) 是的,当然。
有趣的是,我已经编写了几行ActiveX代码来响应OP,并且只选择发布一个片段,因为我觉得这是一个重要的检查(验证选择的文本是否与其中一个图形匹配)。事实上,我这一头并不是这样写的。
编辑:我的原始代码是几行,因为我最初是在浏览blocks集合。 哇,谢谢,你们太棒了
页:
[1]