【已解决】用LISP如何创建多重引线?
本帖最后由 newer 于 2019-2-10 15:58 编辑各位大师,用LISP如何创建多重引线?
;;
;; 返回3d点的variant
;;
;; 变量 3d点表-type (x y z)-
(defun gc:3dPointListToVariant (lst)
(vlax-make-variant
(vlax-safearray-fill
(vlax-make-safearray vlax-VbDouble (cons 0 (1- (* 3 (length lst)))))
(apply 'append lst)
)
)
)
(defun mkmleader (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
)
)
(vla-put-textstring *lead label)
(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
)
)
)
;相对于起点,根据鼠标位置设置dogleg方向
(vla-update *lead)
)
)
)
下面是具体应用上面函数结合grread写的动态拖动生成mleader的写法
**** Hidden Message *****
动态要学习一下..谢谢分享
谢谢大师分享!!! 感谢“marting”的作品!!! xuexixuexi 回复学习学习
动态真有魅力 回复学习。 马丁版主
两个疑问:
1=如果多重引线的文字部分是一个属性块呢?如何获取引注里的集成的属性块的属性,并可进行编辑。
2=如果在布局里做多重引线,vla-get-modelspace改成vla-get-paperspace,却只能在一个布局里注释,到第二个,第三第四****就注释不了。测试时,不知道是CAD问题还是怎么回事。理想化是,自动判别当前的空间。 学刁。。。。。。。 动态要学习一下..谢谢分享 多谢分享! 动态要学习一下..谢谢分享 学习一下分享{:1_12:}{:1_12:}