Author Topic: [XDrX-PlugIn(143)] Import coordinates from EXCEL to generate Mleader  (Read 162 times)

0 Members and 1 Guest are viewing this topic.

xdcad

  • Swamp Rat
  • Posts: 504
https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/insert-mleader-on-x-y-with-number-from-excel/td-p/12691597

Code: [Select]
(defun c:tt (/ arrowlen basept box el inx l loglen lst maxsum ml pl pt pt2 pts range ratio ss str txth x x1
       xy y1
    )
  (defun _makemleader (basept pt2 str)
    (setq ml (xdrx_mleader_make basept pt2 str #xd-var-global-text-height
#xd-var-global-mleader-dogleg-length
     )
    )
    (xdrx_setpropertyvalue ml "arrowsize" 0.0 "textattachmenttype" 6)
    ml
  )
  (defun xd::string:alignformat (el / maxsum)
    (setq maxsum (apply
   'max
   (mapcar
     '(lambda (x)
(strlen x)
      )
     el
   )
)
    )
    (mapcar
      '(lambda (x)
(setq l (strlen x))
(if (< l maxsum)
   (repeat (- maxsum l)
     (setq x (strcat " " x))
   )
   x
)
       )
      el
    )
  )
  (if (and
(or
  *XD:excel*
  (setq *XD:excel* (vlax-get-or-create-object "excel.application"))
)
(setq range (vlax-get *XD:excel* 'selection))
(setq lst (xd::excel:readrange range))
      )
    (progn
      (xd::doc:getdouble (xdrx-string-multilanguage "\n文字高" "\nText Height") "#xd-var-global-text-height"
4.0
      )
      (xd::doc:getdouble (xdrx-string-multilanguage "\n引线长度" "\nLeader Line Length")
"#xd-var-global-mleader-line-length" 10.0
      )
      (xd::doc:getdouble (xdrx-string-multilanguage "\n水平基线长度" "\nHorizontal Baseline Length")
"#xd-var-global-mleader-dogleg-length" 10.0
      )
      (xdrx-document-safezoom lst)
      (mapcar
'(Lambda (x)
   (setq x1 (rtos (car x) 2 4)
y1 (rtos (cadr x) 2 4)
xy (xd::string:alignformat (list x1 y1))
x1 (strcat "X=" (car xy))
y1 (strcat "Y=" (cadr xy))
   )
   (setq str (xdrx-string-join (list x1 y1) "\r\n"))
   (setq box (xdrx-points->box x (xd::doc:getpickboxheight)))
   (if (and
(setq ss (ssget "cp" box '((0 . "*polyline") (-4 . "&=")
  (70 . 1)
)
  )
)
(setq pl (ssname ss 0))
(setq inx (xdrx-getpropertyvalue pl "nearindex" x))
       )
     (progn
       (setq pts (xdrx-points-offset #xd-var-global-mleader-line-length lst)
     pt (nth inx pts)
       )
     )
   )
   (_makemleader x pt str)
)
lst
      )
    )
  )
  (princ)
)
« Last Edit: April 15, 2024, 05:46:06 AM by xdcad »
The code I wrote uses XDRX-API,which can be downloaded from github.com and is updated at any time.
===================================
https://github.com/xdcad
https://sourceforge.net/projects/xdrx-api-zip/
http://bbs.xdcad.net