如何向AddMLeader添加文本
我需要改进我的代码与MLEADER的工作方式。Entmake可以工作,但我最终得到了2000万行代码。执行mleader命令可以工作,但无法预测,因为其他用户的AutoCAD设置可能与我的不同。根据Lee Mac的建议,我尝试使用AddMLeader方法,但我只找到比entmake过程或代码长的示例,这些示例对我的需求没有用处。当然,当你在AutoCAD或AutoLISP帮助中寻找AddMLeader时,你得到的只是VBA代码。李·麦克在一篇旧帖子中提供了这个,至少我可以让它画一个多重引线,但我也需要一种添加多行文字的方法。此外,这总是将平台拉回左侧。我怎样才能控制那个财产。我的目标是能够调用这个例程,并将点作为变量传递给它。不需要用户输入,或者在我的情况下,不允许用户输入。
(defun c:test (); / p1 p2 )
(vl-load-com)
(if (and (setq p1 (getpoint "\nPick First Point: "))
(setq p2 (getpoint "\nPick Next Point: " p1))
)
(vlax-invoke
(vlax-get (vla-get-ActiveDocument (vlax-get-acad-object))
(if (= 1 (getvar 'CVPORT)) 'PaperSpace 'ModelSpace)
)
'AddMLeader (append p1 p2) 0
)
)
(princ)
)
(defun c:test (/ p1 p2 obj )
(vl-load-com)
(if (and (setq p1 (getpoint "\nPick First Point: "))
(setq p2 (getpoint "\nPick Next Point: " p1))
)
(progn
(setq obj
(vlax-invoke
(vlax-get (vla-get-ActiveDocument (vlax-get-acad-object))
(if (= 1 (getvar 'CVPORT))
'PaperSpace
'ModelSpace
)
)
'AddMLeader
(append p1 p2)
0
)
)
(vla-put-textstring obj "just an example")
)
)
(princ)
)
嘿,真漂亮。现在我还有两个问题。如何控制着陆方向?但更重要的是,究竟从哪里可以找到有关AddMLeader或AddCircle等的信息。。。。我所做的网络搜索只提供了这么多不相关的信息,AutoCAD中对这些命令的所有帮助都是针对VBA的,而不是VLISP。你能推荐一个好的来源吗?
我刚刚下载并搜索了Visual LISP Developers Bible 2003版。AddCircle这个词在描述反应堆的模糊代码块中只出现一次,而AddMLeader这个词甚至没有出现一次。。。。。在这份文件的所有183页中,AddMLeader完全不存在,也不知道原因。
谁在隐藏非常有用的命令的所有信息。。。。? 比尔,你真的需要经常使用vlax转储对象。英雄联盟
当您使用LISP的ActiveX组件时,是的,大多数文档都在VBA环境中。我仍然使用。。\帮助\ acad\U dev172。chm作为常见项目的ActiveX引用-不确定ActiveX引用是否发布在任何在线位置-我知道它不包括在此处的标准在线帮助中:
http://exchange.autodesk.com/autocad/enu/help 谢谢RenderMan。这显示了一些有趣的阅读。。。但这是我的名字。我正在做的项目是一个过程,用户将一些数据输入Excel电子表格。这些数据被转储到一个简单的ASCII文本文件中,然后我的VLISP代码读取该文件,并根据其中的信息动态准备一个新图形。没有选项进行选择,询问用户他/她想与哪位领导合作,等等。。。没有任何用户界面。我所要做的是绕开这段草率的代码:
这可以正常工作,直到用户的mleader命令设置首先获取引线或内容,当然这会破坏图形的创建。我还尝试提前创建mleader,然后进行属性转储,并使用所有这些来使用entmake创建mleader。这甚至更好,但它仅为一个mleader创建了大约20行代码。我要做的是创建一个函数,它包含两个点,mleader的文本和一些关于左或右角度、狗腿、箭头大小(如果可能)的基本信息,并使用AddMLeader方法创建mleader。
我只是想告诉你这对新手来说有多困难。。。上面列出的Exchange链接在AddMLeader方法上具有zip。我在搜索中加入了AddMLeader,这是我得到的结果:
Exchange无法找到包含“AddMLeader”的结果。
我开始相信有人阴谋隐藏所有AddMLeader信息。 别担心。
我当然很欣赏你在追求什么,你想要一个可行的子函数,你可以提供适用的参数,以产生所需的实体。我明白了。如果我熟悉使用MLEADER,我会尝试提供一些具体的帮助。
我和你一样对缺乏(或中断?)感到沮丧这就是我发布以下内容的原因:
...
我只是想告诉你这对新手来说有多困难。。。上面列出的Exchange链接在AddMLeader方法上具有zip。我在搜索中加入了AddMLeader,这是我得到的结果:
Exchange无法找到包含“AddMLeader”的结果。
我开始相信有人阴谋隐藏所有AddMLeader信息。
</blockquote> 账单
为了澄清:
据我所知,ActiveX属性和方法从来没有Visual LISP参考,只有Visual LISP IDE帮助文档(acadauto.chm)的ActiveX和VBA参考部分。
您可能也知道,此帮助文件与其他文件一起被删除。当Autodesk愚蠢地决定在2011年之后(包括2011年)的AutoCAD版本中在线移植帮助时,基于chm的帮助文件。然而,acadauto。chm仍然可以在这些更高版本的“C:\Program Files\Common Files\Autodesk Shared”下找到。
然而,VBA引用同样适用于Visual LISP,因为对于几乎每个函数,参数的数量、数据类型和顺序都与Visual LISP中使用的参数相同,因此翻译很简单。
关于多重引线着陆的方向,研究VLA多重引线对象的SetDogLegDirection特性。您需要对提供的点使用一个条件来测试它应该朝向哪个方向。
我希望这有帮助,
李 你好THARWAT:
你能选择任何方向吗, 似乎没有任何方法可以直接用lisp做到这一点。我在ActiveX中找不到任何内容(在线帮助版本可在此处找到:http://entercad.ru/acadauto.en/).
但DXF数据似乎显示了文本的插入点。因此,可以将文字放置在引线的左/右。以下是显示DXF代码与两条引线之间差异的屏幕截图(一条文本位于行的左侧,另一条文本位于行的右侧,两条引线的引线都指向相同两点之间的下方,因此唯一的差异是文本)。
页:
[1]