乐筑天下

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

[编程交流] 如何向AddMLeader添加文本

[复制链接]

180

主题

639

帖子

463

银币

中流砥柱

Rank: 25

铜币
897
发表于 2022-7-6 07:55:31 | 显示全部楼层 |阅读模式
我需要改进我的代码与MLEADER的工作方式。Entmake可以工作,但我最终得到了2000万行代码。执行mleader命令可以工作,但无法预测,因为其他用户的AutoCAD设置可能与我的不同。根据Lee Mac的建议,我尝试使用AddMLeader方法,但我只找到比entmake过程或代码长的示例,这些示例对我的需求没有用处。当然,当你在AutoCAD或AutoLISP帮助中寻找AddMLeader时,你得到的只是VBA代码。李·麦克在一篇旧帖子中提供了这个,至少我可以让它画一个多重引线,但我也需要一种添加多行文字的方法。此外,这总是将平台拉回左侧。我怎样才能控制那个财产。
 
我的目标是能够调用这个例程,并将点作为变量传递给它。不需要用户输入,或者在我的情况下,不允许用户输入。
 
  1. (defun c:test (); / p1 p2 )
  2. (vl-load-com)
  3. (if (and (setq p1 (getpoint "\nPick First Point: "))
  4.           (setq p2 (getpoint "\nPick Next Point: " p1))
  5.      )
  6.    (vlax-invoke
  7.      (vlax-get (vla-get-ActiveDocument (vlax-get-acad-object))
  8.        (if (= 1 (getvar 'CVPORT)) 'PaperSpace 'ModelSpace)
  9.      )
  10.      'AddMLeader (append p1 p2) 0
  11.    )
  12. )
  13. (princ)
  14. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 08:07:09 | 显示全部楼层
  1. (defun c:test (/ p1 p2 obj )
  2. (vl-load-com)
  3. (if (and (setq p1 (getpoint "\nPick First Point: "))
  4.           (setq p2 (getpoint "\nPick Next Point: " p1))
  5.      )
  6.    (progn
  7.      (setq obj
  8.             (vlax-invoke
  9.               (vlax-get (vla-get-ActiveDocument (vlax-get-acad-object))
  10.                         (if (= 1 (getvar 'CVPORT))
  11.                           'PaperSpace
  12.                           'ModelSpace
  13.                         )
  14.               )
  15.               'AddMLeader
  16.               (append p1 p2)
  17.               0
  18.             )
  19.      )
  20.      (vla-put-textstring obj "just an example")
  21.    )
  22. )
  23. (princ)
  24. )
回复

使用道具 举报

180

主题

639

帖子

463

银币

中流砥柱

Rank: 25

铜币
897
发表于 2022-7-6 08:17:56 | 显示全部楼层
嘿,真漂亮。现在我还有两个问题。如何控制着陆方向?但更重要的是,究竟从哪里可以找到有关AddMLeader或AddCircle等的信息。。。。我所做的网络搜索只提供了这么多不相关的信息,AutoCAD中对这些命令的所有帮助都是针对VBA的,而不是VLISP。你能推荐一个好的来源吗?
 
我刚刚下载并搜索了Visual LISP Developers Bible 2003版。AddCircle这个词在描述反应堆的模糊代码块中只出现一次,而AddMLeader这个词甚至没有出现一次。。。。。在这份文件的所有183页中,AddMLeader完全不存在,也不知道原因。
 
谁在隐藏非常有用的命令的所有信息。。。。?
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 08:20:43 | 显示全部楼层
比尔,你真的需要经常使用vlax转储对象。英雄联盟
 
当您使用LISP的ActiveX组件时,是的,大多数文档都在VBA环境中。我仍然使用。。\帮助\ acad\U dev172。chm作为常见项目的ActiveX引用-不确定ActiveX引用是否发布在任何在线位置-我知道它不包括在此处的标准在线帮助中:
 
http://exchange.autodesk.com/autocad/enu/help
回复

使用道具 举报

180

主题

639

帖子

463

银币

中流砥柱

Rank: 25

铜币
897
发表于 2022-7-6 08:25:39 | 显示全部楼层
谢谢RenderMan。这显示了一些有趣的阅读。。。但这是我的名字。我正在做的项目是一个过程,用户将一些数据输入Excel电子表格。这些数据被转储到一个简单的ASCII文本文件中,然后我的VLISP代码读取该文件,并根据其中的信息动态准备一个新图形。没有选项进行选择,询问用户他/她想与哪位领导合作,等等。。。没有任何用户界面。我所要做的是绕开这段草率的代码:
 
这可以正常工作,直到用户的mleader命令设置首先获取引线或内容,当然这会破坏图形的创建。我还尝试提前创建mleader,然后进行属性转储,并使用所有这些来使用entmake创建mleader。这甚至更好,但它仅为一个mleader创建了大约20行代码。我要做的是创建一个函数,它包含两个点,mleader的文本和一些关于左或右角度、狗腿、箭头大小(如果可能)的基本信息,并使用AddMLeader方法创建mleader。
 
我只是想告诉你这对新手来说有多困难。。。上面列出的Exchange链接在AddMLeader方法上具有zip。我在搜索中加入了AddMLeader,这是我得到的结果:
 
Exchange无法找到包含“AddMLeader”的结果。
 
我开始相信有人阴谋隐藏所有AddMLeader信息。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 08:33:12 | 显示全部楼层
别担心。
 
我当然很欣赏你在追求什么,你想要一个可行的子函数,你可以提供适用的参数,以产生所需的实体。我明白了。如果我熟悉使用MLEADER,我会尝试提供一些具体的帮助。
 
我和你一样对缺乏(或中断?)感到沮丧这就是我发布以下内容的原因:
 
...
 
我只是想告诉你这对新手来说有多困难。。。上面列出的Exchange链接在AddMLeader方法上具有zip。我在搜索中加入了AddMLeader,这是我得到的结果:
 
Exchange无法找到包含“AddMLeader”的结果。
 
我开始相信有人阴谋隐藏所有AddMLeader信息。
</blockquote>
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:47:23 | 显示全部楼层
账单
 
为了澄清:
 
据我所知,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特性。您需要对提供的点使用一个条件来测试它应该朝向哪个方向。
 
我希望这有帮助,
 
回复

使用道具 举报

29

主题

84

帖子

55

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
145
发表于 2022-7-6 08:49:52 | 显示全部楼层
你好THARWAT:
你能选择任何方向吗,
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 09:02:19 | 显示全部楼层
似乎没有任何方法可以直接用lisp做到这一点。我在ActiveX中找不到任何内容(在线帮助版本可在此处找到:http://entercad.ru/acadauto.en/).
 
但DXF数据似乎显示了文本的插入点。因此,可以将文字放置在引线的左/右。以下是显示DXF代码与两条引线之间差异的屏幕截图(一条文本位于行的左侧,另一条文本位于行的右侧,两条引线的引线都指向相同两点之间的下方,因此唯一的差异是文本)。
085533yefyeo64exfoz6be.jpg
085535isqzxsmzbdbmks19.jpg
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-9 20:00 , Processed in 0.422920 second(s), 83 queries .

© 2020-2025 乐筑天下

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