Visual LISP, AutoLISP and General Customization
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic to the Top
- Bookmark
- Subscribe
- Printer Friendly Page
Set MLeader to Existing MLeader Style via LISP
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Hello,
I am trying to create a lisp routine that sets all existing MLEADERs to a certain pre-set MLEADERSTYLE, the equivalent of doing a Quick Select for Mleaders, and setting the style under the properties window.
I was able to write a similar routine that selects all dimensions and sets them to a certain DIMSTYLE, using entmod and DXF code 3 for dimstyle. So far, I have not been able to find a group code for MLEADERSTYLE
Any help would be greatly appreciated!
(defun C:dimstylechange (/ ENTITIES NO_OF_ENTITIES SSPOSITION ENTITY_NAME
OLD_ENTLIST NEW_STYLE NEW_ENTLIST)
(setvar "CMDECHO" 0)
(setq ENTITIES (ssget "X" '((0 . "DIMENSION"))))
(setq NO_OF_ENTITIES (sslength ENTITIES))
(setq SSPOSITION 0)
(repeat NO_OF_ENTITIES
;***CHANGE STYLE***
(setq ENTITY_NAME (ssname ENTITIES SSPOSITION))
(setq OLD_ENTLIST (entget ENTITY_NAME))
(setq OLD_STYLE (assoc 3 OLD_ENTLIST))
(setq NEW_STYLE (cons 3 "BCR 11x17"))
(setq NEW_ENTLIST (subst NEW_STYLE OLD_STYLE OLD_ENTLIST))
(entmod NEW_ENTLIST)
;***CHANGE LAYER***
(setq OLD_ENTLIST (entget ENTITY_NAME))
(setq OLD_STYLE (assoc 8 OLD_ENTLIST))
(setq NEW_STYLE (cons 8 "DIM"))
(setq NEW_ENTLIST (subst NEW_STYLE OLD_STYLE OLD_ENTLIST))
(entmod NEW_ENTLIST)
(setq SSPOSITION (1+ SSPOSITION))
)
(command ".CHPROP" ENTITIES "" "C" "BYLAYER" "LT" "BYLAYER" "")
(princ (strcat "\n..." (rtos NO_OF_ENTITIES 2 0) " Dimension(s) changed..."))
(setvar "CMDECHO" 1)
(princ)
)
Re: Set MLeader to Existing MLeader Style via LISP
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
parker.depriest wrote:.... So far, I have not been able to find a group code for MLEADERSTYLE
....
I don't have MLeaders [too old a version of AutoCAD], but I wonder whether that might be available with a little less work as a VLA Property. Try drawing an MLeader [so it's the last thing in the drawing], then doing:
(vlax-dump-object (vlax-ename->vla-object (entlast)))
and see whether any of the listed Properties contains the current style. [For Text and Mtext and Dimensions, the Property is called "StyleName", and it could very well be the same for MLeaders.] If it does, you can use a (vla-put...) operation on a vla-object conversion of each MLeader found, instead of the whole (entget)/(subst)/(entmod) procedure.
Re: Set MLeader to Existing MLeader Style via LISP
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
How often do you need to do that? Maybe a Quick Select and change style in properties dialog is enough.
But if you have some reasons to use lisp, try this:
(defun C:TEST ( / *error* acDoc l new e ss)
(setq acDoc (vla-get-activeDocument (vlax-get-acad-object)))
(vla-StartUndoMark acDoc)
(defun *error* (msg)
(princ msg)
(vla-EndUndoMark acDoc)
)
(if
(ssget "_X" '((0 . "MULTILEADER")))
(progn
(princ "\n\n\n****Mleader Styles****\n\n")
(setq l (mapcar
(function
(lambda (s)
(princ (strcat " " (cdr s) "\n"))
(cdr s)
)
)
(vl-remove-if
'(lambda (x) (/= (car x) 3))
(dictsearch (namedobjdict) "ACAD_MLEADERSTYLE")
)
)
)
(textscr)
(if
(member (setq new (getstring T "\nEnter new style name: ")) l)
(progn
(vlax-for e (setq ss (vla-get-ActiveSelectionSet acDoc))
(vla-put-StyleName e new)
)
(vla-delete ss)
)
(princ "\nStayle name not found.")
)
(graphscr)
)
)
(princ)
)

