Hi All
I am trying to alter the following code so that I can specify an angle that would be applied to all selected multileaders. Ideally, I want change the angle between point 1 and point two without changing the initial point. Also, I want the text to remain in its horizontal location. As it stands now, the routine is not moving the initial point but it is moving the text vertically. Any help is greatly appreciated.
Manuel
Code:
(defun c:mldrang (/ _angle _mlangle mleader_sset index line1 angle_negativity line1_point2)
(if (setq _mlangle (getangle "\nStart angle for leader or zero for none: "))
(progn
(setq _angle (read (angtos _mlangle)))
(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(if (not (zerop _angle)) (setq angle_negativity (/ _angle (abs _angle))))
(if (< 360 (abs _angle))
(* angle_negativity (setq _angle (- (abs _angle) (* (fix (/ (abs _angle) 360)) 360))))
)
(if (minusp _angle)
(setq _angle (/ (* (- 360 (abs _angle)) pi) 180))
(setq _angle (/ (* _angle pi) 180))
)
(if (setq mleader_sset (ssget '((0 . "multileader"))))
(repeat (setq index (sslength mleader_sset))
(setq line1 (vlax-invoke (setq mleader_object (vlax-ename->vla-object (ssname mleader_sset (setq index (1- index))))) 'getleaderlinevertices 0)
line1_point2 (polar (list (nth 0 line1) (nth 1 line1))
_angle (distance (list (nth 0 line1) (nth 1 line1)) (list (nth 3 line1) (nth 4 line1))))
)
(vlax-invoke mleader_object 'setleaderlinevertices 0 (list (nth 0 line1) (nth 1 line1) (nth 2 line1) (car line1_point2) (cadr line1_point2) (nth 2 line1)))
(if (< (car line1_point2) (car line1))
(vlax-invoke mleader_object 'setdoglegdirection 0 (list -1.0 0.0 0.0))
(vlax-invoke mleader_object 'setdoglegdirection 0 (list +1.0 0.0 0.0))
)
(vlax-invoke mleader_object 'setleaderlinevertices 0 (list (nth 0 line1) (nth 1 line1) (nth 2 line1) (car line1_point2) (cadr line1_point2) (nth 2 line1)))
(princ (strcat "\rMLeaders remain to process: " (itoa index)))
)
)
)
)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(princ)
)