Author Topic: add mleader  (Read 2823 times)

0 Members and 1 Guest are viewing this topic.

FengK

  • Guest
add mleader
« on: June 23, 2009, 07:27:47 PM »
i was trying to add a MULTILEADER using the following code. in the image shown below, what seems odd to me is the one on the left should look like the one in the middle, which i manually created. i don't know how autocad determines which side to put the text. but the one on the right side was created by the code "correctly". if your acad version supports multileader, can you do a test? btw, i poked around the multileader style settings and didn't find a clue. thanks.

Code: [Select]
(defun C:AML (/ ms pt1 pt2 lstCoord arrCoord mld)
  (setq ms (vla-get-modelspace
     (vla-get-activedocument (vlax-get-acad-object))
   )
  )
  (setq pt1 (getpoint "\nPick 1st point: ")
pt2 (getpoint pt1 "\nPick 1st point: ")
  )
  (setq lstCoord (list (car pt1)
       (cadr pt1)
       (caddr pt1)
       (car pt2)
       (cadr pt2)
       (caddr pt2)
)
arrCoord (vlax-make-variant
   (vlax-safearray-fill
     (vlax-make-safearray vlax-vbdouble
  (cons 0 (1- (length lstCoord)))
     )
     lstCoord
   )
)
  )
  (setq mld (vla-addmleader ms arrCoord 0))
  (vla-put-textstring mld
      "WHAT IS GOING ON?\\PI WANT IT TO BE ON THE OTHER SIDE!"
  )
  (princ)
)

Lee Mac

  • Seagull
  • Posts: 12928
  • London, England
Re: add mleader
« Reply #1 on: June 23, 2009, 07:48:56 PM »
On a side note, you could change this:

Code: [Select]
(setq lstCoord (list (car pt1)
       (cadr pt1)
       (caddr pt1)
       (car pt2)
       (cadr pt2)
       (caddr pt2)
)

to this:

Code: [Select]
(setq lstCoord (apply 'append (list pt1 pt2)))

 :-)

Lee Mac

  • Seagull
  • Posts: 12928
  • London, England
Re: add mleader
« Reply #2 on: June 23, 2009, 08:05:14 PM »
Perhaps:

Code: [Select]
(defun c:AML (/ ms pt1 pt2 var ml)
  (vl-load-com)
  (setq ms (vla-get-modelspace
             (vla-get-activedocument
               (vlax-get-acad-object))))
  (while (and (setq pt1 (getpoint "\nPick 1st Point: "))
              (setq pt2 (getpoint "\nPick 2nd Point: " pt1)))
    (setq var (vlax-make-variant
                (vlax-safearray-fill
                  (safearray vlax-vbdouble '(0 . 5))
                    (apply 'append (list pt1 pt2)))))
    (setq ml (vla-addMleader ms var 0))
    (vla-put-TextString ml "Test")
    (vla-SetDogLegDirection ml 0
      (vlax-3D-point
        (list
          (if (<= (car pt1) (car pt2)) 1 -1) 0 0))))
  (princ))
             

FengK

  • Guest
Re: add mleader
« Reply #3 on: June 24, 2009, 02:45:59 AM »
Thanks Lee. I'll try it out.