Files
lisp-scr/downloaded/MLLA.lsp
2018-11-26 22:23:22 +01:00

37 lines
2.2 KiB
Common Lisp

(DEFUN C:MLLA ( / )
(prompt "/nSelect multileaders: ")
(if (setq ss (ssget ":L" '((0 . "MULTILEADER")))); IF anything is found when to makes a selection of mleaders
(progn ; THEN
(setq mlent (entsel "/nSelect multileader to align to: "); prompt user to select mleader to align others to
ed (entget (car mlent)); store entity data for selected mleader
txxpt(cadr(assoc 12 ed)); store x point for text insertion
dlxpt(cadr (assoc 10 (member '(302 . "LEADER{") ed))); store x point for dogleg object
entqty (sslength ss); store quantity of mleaders selected
cnt 0); set counter to 0
(while (< cnt entqty); while there are still mleaders in list
(setq mlent (ssname ss cnt); store entity name (starting with the first mleader)
ed (entget mlent); store entity definition
old_txxpt (assoc 12 ed); store entities text object point data
new_txxpt (cons txxpt (cddr old_txxpt)); create new text object point data utilizing x point from mleader to align to
ed (subst (cons 12 new_txxpt) old_txxpt ed); swap old text object point data for new in entity record
old_tfxpt (assoc 10 ed); store entities text frame object point data
x-diff (- (- (cadr old_txxpt) txxpt)); find delta-x between current ent and selected alignment mleader
newx (+ x-diff (cadr old_tfxpt)); create new x point coordinate for text frame object
new_tfxpt (cons newx (cddr old_tfxpt)); create new text object point data utilizing newly created x point
ed (subst (cons 10 new_tfxpt) old_tfxpt ed); swap old text frame object point data for new in entity record
old_dlxpt (assoc 10 (member '(302 . "LEADER{") ed)); store entities dogleg object point data
new_dlxpt (cons dlxpt (cddr old_dlxpt)); create new dogleg object point data utilizing x point from mleader to align to
ed (subst (cons 10 new_dlxpt) old_dlxpt ed)); swap old dogleg object point data for new in entity record
(entmod ed); write new data to database
(setq cnt (1+ cnt)); set counter to advance to the next entity in selection set
); end WHILE
); end THEN
); end IF (no ELSE statement specified)
(princ); exit quietly
)
(princ); load clean