明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1435|回复: 2

[讨论] 用lisp创建多重引线样式——希望有朋友可以一起交流【已解决】

[复制链接]
发表于 2022-4-10 23:29:25 | 显示全部楼层 |阅读模式
本帖最后由 天天问 于 2022-4-18 20:14 编辑

把300组码对应的字符串设为空,就可以正常使用了。
解决后的成果见我的另一个帖子
http://bbs.mjtd.com/thread-185240-1-1.html


===============以下是原帖:
===============
工作习惯问题,个人喜欢在标注的时候使用多重引线。

接触Lisp以后,一直想用lisp创建多重引线样式,这样在任何一个文档里可以随时一键新建想要的多重引线样式。


论坛里泡了很久,查找搜索了很多帖子,倒是有几个帖子里有源码,但是未达到预期效果。源码本身的可读性不高,修改起来比较难。而CAD帮助文件里关于多重引线样式的DXF介绍也非常简略,甚至有些组码与实际不符。郁闷!


经过一段时间研究,现在基本解决了用Lisp新建多重引线样式的问题,但还是有个地方需要完善:
在新建的样式下使用mleader命令创建多重引线时,在输入文字内容前需要先确定是否覆盖默认文字
而系统默认自带的多重引线样式不会有这个问题,都是直接允许输入文字内容


希望有经验的朋友可以一起交流,也希望大神们走过路过,进来指导一下。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-4-15 09:45:45 | 显示全部楼层
(defun mkmleader (ename1 p2 / pts)
  (if (not *lead)                        ;如果不存在创建mleader对象
    (progn (setq pts (list (trans p1 1 0) (trans p2 1 0))
                 pts (gc:3dPointListToVariant pts)
           )
           (setq *lead
                  (vla-AddMLeader
                    (vla-get-modelspace
                      (vla-get-activedocument (vlax-get-acad-object))
                    )                        ;获得模型空间对象
                    pts
                    0
                  )
           )
           (setq old_vmleader (vlax-ename->vla-object ename1))
           (setq a (vla-get-Layer old_vmleader))
           (setq e (vla-get-TextLineSpacingDistance old_vmleader))
           (setq g (vla-get-StyleName old_vmleader))
           (setq er (vla-get-TextHeight old_vmleader))
                                        ;(setq h(vla-get-TextStyleName old_vmleader))
           (setq o (vla-get-TrueColor old_vmleader))
                                        ;给目标保持一致属性
           (progn
             (vla-put-textstring *lead label)
             (vla-put-Layer *lead a)
;;;
             (vla-put-TextJustify *lead acAttachmentPointBottomCenter)
             (vla-put-TextLineSpacingStyle
               *lead
               acLineSpacingStyleExactly
             )                                ;行距为精确
             (vla-put-TextHeight *lead er)
                                        ;(vla-put-TextStyleName *lead h)
             (vla-put-TextLineSpacingDistance *lead e) ;文字行距e为整数
             (vla-put-StyleName *lead g)
             (vla-put-TrueColor *lead o)
           )
           (vla-rotate
             *lead
             (vlax-3d-point (trans p2 1 0))
             (angle (trans '(0 0 0) 1 0) (trans '(1 0 0) 1 0))
           )
    )                                        ;对象存在的情况下更新它
    (progn (setq pts (list (trans p1 1 0) (trans p2 1 0))
                 pts (gc:3dPointListToVariant pts)
           )
           (vla-SetLeaderLineVertices *lead 0 pts) ;重定义顶点
           (vla-SetDogLegDirection
             *lead
             0
             (vlax-3D-point
               (trans (list (if        (> (car p2) (car p1))
                              1
                              -1
                            )
                            0
                            0
                      )
                      1
                      0
                      T
               )
             )
           )
 楼主| 发表于 2022-4-15 11:00:58 | 显示全部楼层
qq1254582201 发表于 2022-4-15 09:45
(defun mkmleader (ename1 p2 / pts)
  (if (not *lead)                        ;如果不存在创建mleader对象
    (progn (setq ...

这段代码也不能用啊,括号好像都不够。加完括号以后,又提示参数太少
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-13 14:18 , Processed in 0.191378 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表