用lisp创建多重引线样式——希望有朋友可以一起交流【已解决】
本帖最后由 天天问 于 2022-4-18 20:14 编辑把300组码对应的字符串设为空,就可以正常使用了。
解决后的成果见我的另一个帖子http://bbs.mjtd.com/thread-185240-1-1.html
===============以下是原帖:===============
工作习惯问题,个人喜欢在标注的时候使用多重引线。
接触Lisp以后,一直想用lisp创建多重引线样式,这样在任何一个文档里可以随时一键新建想要的多重引线样式。
论坛里泡了很久,查找搜索了很多帖子,倒是有几个帖子里有源码,但是未达到预期效果。源码本身的可读性不高,修改起来比较难。而CAD帮助文件里关于多重引线样式的DXF介绍也非常简略,甚至有些组码与实际不符。郁闷!
经过一段时间研究,现在基本解决了用Lisp新建多重引线样式的问题,但还是有个地方需要完善:
在新建的样式下使用mleader命令创建多重引线时,在输入文字内容前需要先确定是否覆盖默认文字。
而系统默认自带的多重引线样式不会有这个问题,都是直接允许输入文字内容。
希望有经验的朋友可以一起交流,也希望大神们走过路过,进来指导一下。
(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
)
)
) qq1254582201 发表于 2022-4-15 09:45
(defun mkmleader (ename1 p2 / pts)
(if (not *lead) ;如果不存在创建mleader对象
(progn (setq ...
这段代码也不能用啊,括号好像都不够。加完括号以后,又提示参数太少
页:
[1]