TheSwamp
Code Red => AutoLISP (Vanilla / Visual) => Topic started by: GDF on July 10, 2018, 08:12:52 PM
-
Anyone have a good routine for creating multileader styles?
Also importing and exporting other than a template drawing?
(setq
*acad* (vlax-get-acad-object)
*doc* (vla-get-activedocument *acad*)
mldict (vla-item (vla-get-dictionaries *doc*) "ACAD_MLEADERSTYLE")
mlstyle (vla-item mldict "NewMLeader")
)
(vlax-dump-object mlstyle)
http://www.cadtutor.net/forum/showthread.php?101613-LISP-for-creating-MLeader-Style
http://forums.augi.com/showthread.php?148849-Creating-Multileader-Style-using-LISP
https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/create-multileader-style-with-lisp/td-p/7336959
I'm currently using this routine:
;;; https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/create-multileader-style-with-lisp/td-p/7336959
;;; Usage : (CreateMLeaderStyle [NewStyleName] [ConfigList])
;;; Example: (CreateMLeaderStyle "Test" '(("TextStyle" . "Standard")("TextHeight" . 2.5)))
;;;
;;; [NewStyleName] - String -> Name of new MLeader Style
;;; [ConfigList] - List -> List with properties & values
;;;
(defun CreateMLeaderStyle (CMS_NewName CMS_Config / CMS_TextStyle CMS_MLeaderStyles CMS_NewMLeaderStyle CMS_Property CMS_ColorObject)
(if
(or
(and
(setq CMS_TextStyle (cdr (assoc "TextStyle" CMS_Config)))
(tblsearch "STYLE" CMS_TextStyle)
)
(not (cdr (assoc "TextStyle" CMS_Config)))
)
(progn
(setq CMS_MLeaderStyles (vla-item (vla-get-Dictionaries (vla-get-ActiveDocument (vlax-get-acad-object))) "ACAD_MLEADERSTYLE"))
(if
(vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list CMS_MLeaderStyles CMS_NewName)))
(progn
(setq CMS_NewMLeaderStyle (vla-AddObject CMS_MLeaderStyles CMS_NewName "AcDbMLeaderStyle"))
(if
(not (cdr (assoc "TextStyle" CMS_Config)))
(vla-put-TextStyle CMS_NewMLeaderStyle (getvar "TEXTSTYLE"))
)
(foreach CMS_Item CMS_Config
(if
(and
(vl-consp CMS_Item)
(= (type (setq CMS_Property (car CMS_Item))) 'STR)
(not (listp (cdr CMS_Item)))
(vlax-property-available-p CMS_NewMLeaderStyle CMS_Property)
)
(cond
(
(wcmatch (strcase CMS_Property) "*COLOR*")
(setq CMS_ColorObject (vlax-get-property CMS_NewMLeaderStyle CMS_Property))
(vla-put-ColorIndex CMS_ColorObject (cdr CMS_Item))
(vl-catch-all-apply 'vlax-put-property (list CMS_NewMLeaderStyle CMS_Property CMS_ColorObject))
)
(
T
(vl-catch-all-apply 'vlax-put-property (list CMS_NewMLeaderStyle CMS_Property (cdr CMS_Item)))
)
)
)
)
(princ (strcat "\n ** Created " CMS_NewName " MLeader style"))
)
(princ "\n ** Error: MLeader style already exists")
)
)
(princ "\n ** Error: textstyle does not exist")
)
(princ)
)
(defun c:Test ()
(CreateMLeaderStyle "NewMLeader"
(list
'("ArrowSize" . 0.0625)
'("DoglegLength" . 0.0625)
'("LandingGap" . 0.03125)
'("LeaderLineColor" . 7)
(cons "ScaleFactor" (getvar "DIMSCALE"))
'("TextColor" . 7)
'("TextHeight" . 0.0625)
'("TextLeftAttachmentType" . 1)
'("TextRightAttachmentType" . 1)
'("TextStyle" . "ARIAL")
)
)
(princ)
)
-
I do it the lazy way with the Design Center and drag them in if I need them.
-
Why do you set the scalefactor = to dimscale? The MLEADERSCALE (https://knowledge.autodesk.com/support/autocad/learn-explore/caas/CloudHelp/cloudhelp/2019/ENU/AutoCAD-Core/files/GUID-79E3F4C9-2F20-4DE0-8966-E4636ACF6E68-htm.html)variable can control the size of the style.
-
Thanks guys.
-
Here is my latest setup for textstyle, dimstyle and mleaderstyle: [still have a lot of code cleanup to do]
I'm trying to make the following mleader command to work with mtext dialog popup:
(defun C:MLRe ()
(setvar "orthomode" 0)
(setvar "osmode" 0)
(command ".mleaderedit")
(princ))
(defun C:MLR ()
(setvar "orthomode" 0)
(setvar "osmode" 0)
(command ".mleader")
;;(command ".mleader" "O" "C" "M" "X")
;;(while (= 1 (boole 1 (getvar "cmdactive") 1))(command pause))
(princ))
Thanks guys. Since I have moved to Ocala, Florida...I'm a real swamper!
(defun ARCH:SimpleSetup-MSG (std-dm std-tx std-ml)
(progn
(/= (getvar "users4") nil)
(ARCH:MsgBox2
" Arch2Program© : Message"
64
(strcat
" "
(getvar "users4")
"
---------------------------------------------------------------------------
DimStyle set Current:\t" std-dm "\n"
" TextStyle set Current:\t" std-tx "\n"
" MLeader set Current:\t" std-ml)
4)
(princ "\n*** ///////// Program COMPLETED ///////// ***")))
(defun ARCH:CreateMLeaderStyle (CMS_NewName CMS_Config / CMS_TextStyle CMS_MLeaderStyles CMS_NewMLeaderStyle CMS_Property CMS_ColorObject)
(if
(or
(and
(setq CMS_TextStyle (cdr (assoc "TextStyle" CMS_Config)))
(tblsearch "STYLE" CMS_TextStyle)
)
(not (cdr (assoc "TextStyle" CMS_Config)))
)
(progn
(setq CMS_MLeaderStyles (vla-item (vla-get-Dictionaries (vla-get-ActiveDocument (vlax-get-acad-object))) "ACAD_MLEADERSTYLE"))
(if
(vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list CMS_MLeaderStyles CMS_NewName)))
(progn
(setq CMS_NewMLeaderStyle (vla-AddObject CMS_MLeaderStyles CMS_NewName "AcDbMLeaderStyle"))
(if
(not (cdr (assoc "TextStyle" CMS_Config)))
(vla-put-TextStyle CMS_NewMLeaderStyle (getvar "TEXTSTYLE"))
)
(foreach CMS_Item CMS_Config
(if
(and
(vl-consp CMS_Item)
(= (type (setq CMS_Property (car CMS_Item))) 'STR)
(not (listp (cdr CMS_Item)))
(vlax-property-available-p CMS_NewMLeaderStyle CMS_Property)
)
(cond
(
(wcmatch (strcase CMS_Property) "*COLOR*")
(setq CMS_ColorObject (vlax-get-property CMS_NewMLeaderStyle CMS_Property))
(vla-put-ColorIndex CMS_ColorObject (cdr CMS_Item))
(vl-catch-all-apply 'vlax-put-property (list CMS_NewMLeaderStyle CMS_Property CMS_ColorObject))
)
(
T
(vl-catch-all-apply 'vlax-put-property (list CMS_NewMLeaderStyle CMS_Property (cdr CMS_Item)))
)
)
)
)
(princ (strcat "\n ** Created " CMS_NewName " MLeader style"))
)
(princ "\n ** Error: MLeader style already exists")
)
)
(princ "\n ** Error: textstyle does not exist")
)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;; Quick Drawing Setup Function ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun ARCH:GDF-SetDimStyle ()
(setvar "DIMALT" 0) ;Alternate units selected
(setvar "DIMALTD" 2) ;Alternate unit decimal places
(setvar "DIMALTF" 25.40000000) ;Alternate unit scale factor
(setvar "DIMALTTD" 2) ;Alternate tolerance decimal places
(setvar "DIMALTTZ" 3) ;Alternate tolerance zero suppression
(setvar "DIMALTU" 4) ;Alternate units
(setvar "DIMALTZ" 3) ;Alternate unit zero suppression
;;(setvar "DIMASO" 1) ;Create associative dimensions
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;arrow size
(cond ((= ARCH#UNIT "Ci") (setvar "DIMASZ" 0.09375)) ;Arrow size
((= ARCH#UNIT "Mm") (setvar "DIMASZ" 2.5)) ;Arrow size
((= ARCH#UNIT "Cm") (setvar "DIMASZ" 0.25)) ;Arrow size
((= ARCH#UNIT "Ar") (setvar "DIMASZ" 0.09375)) ;Arrow size
((= ARCH#UNIT "Me") (setvar "DIMASZ" 0.0025)) ;Arrow size
((= ARCH#UNIT "En") (setvar "DIMASZ" 0.09375)) ;Arrow size
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;center mark size
(cond ((= ARCH#UNIT "Ci") (setvar "DIMCEN" 0.09375)) ;Center mark size
((= ARCH#UNIT "Mm") (setvar "DIMCEN" 2.5)) ;Center mark size
((= ARCH#UNIT "Cm") (setvar "DIMCEN" 0.25)) ;Center mark size
((= ARCH#UNIT "Ar") (setvar "DIMCEN" 0.09375)) ;Center mark size
((= ARCH#UNIT "Me") (setvar "DIMCEN" 0.0025)) ;Center mark size
((= ARCH#UNIT "En") (setvar "DIMCEN" 0.09375)) ;Center mark size
)
;;dimension line and leader color
(setvar "DIMCLRD" 30) ;Dimension line and leader color
;;extension line color
(setvar "DIMCLRE" 30) ;Extension line color
;;dimension text color
(setvar "DIMCLRT" 2) ;Dimension text color
(setvar "DIMDLE" 0.09375) ;Dimension line extension
(setvar "DIMDEC" 8) ;Dimension precision to 1/256
;;dimension line spacing
(cond ((= ARCH#UNIT "Ci") (setvar "DIMDLI" 0.25)) ;Dimension line spacing
((= ARCH#UNIT "Mm") (setvar "DIMDLI" 10.0)) ;Dimension line spacing
((= ARCH#UNIT "Cm") (setvar "DIMDLI" 1.0)) ;Dimension line spacing
((= ARCH#UNIT "Ar") (setvar "DIMDLI" 0.25)) ;Dimension line spacing
((= ARCH#UNIT "Me") (setvar "DIMDLI" 0.01)) ;Dimension line spacing
((= ARCH#UNIT "En") (setvar "DIMDLI" 0.25)) ;Dimension line spacing
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;extension above dimension line
(cond ((= ARCH#UNIT "Ci") (setvar "DIMEXE" 0.0625)) ;Extension above dimension line
((= ARCH#UNIT "Mm") (setvar "DIMEXE" 1.0)) ;Extension above dimension line
((= ARCH#UNIT "Cm") (setvar "DIMEXE" 0.1)) ;Extension above dimension line
((= ARCH#UNIT "Ar") (setvar "DIMEXE" 0.0625)) ;Extension above dimension line
((= ARCH#UNIT "Me") (setvar "DIMEXE" 0.001)) ;Extension above dimension line
((= ARCH#UNIT "En") (setvar "DIMEXE" 0.0625)) ;Extension above dimension line
)
;;extension line origin offset
(cond ((= ARCH#UNIT "Ci") (setvar "DIMEXO" 0.0625)) ;Extension line origin offset
((= ARCH#UNIT "Mm") (setvar "DIMEXO" 2.0)) ;Extension line origin offset
((= ARCH#UNIT "Cm") (setvar "DIMEXO" 0.2)) ;Extension line origin offset
((= ARCH#UNIT "Ar") (setvar "DIMEXO" 0.0625)) ;Extension line origin offset
((= ARCH#UNIT "Me") (setvar "DIMEXO" 0.002)) ;Extension line origin offset
((= ARCH#UNIT "En") (setvar "DIMEXO" 0.0625)) ;Extension line origin offset
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setvar "DIMFIT" 5) ;Fit text
;;gap from dimension line to text
(cond ((= ARCH#UNIT "Ci") (setvar "DIMGAP" 0.0625)) ;Gap from dimension line to text
((= ARCH#UNIT "Mm") (setvar "DIMGAP" 1.0)) ;Gap from dimension line to text
((= ARCH#UNIT "Cm") (setvar "DIMGAP" 0.1)) ;Gap from dimension line to text
((= ARCH#UNIT "Ar") (setvar "DIMGAP" 0.0625)) ;Gap from dimension line to text
((= ARCH#UNIT "Me") (setvar "DIMGAP" 0.001)) ;Gap from dimension line to text
((= ARCH#UNIT "En") (setvar "DIMGAP" 0.0625)) ;Gap from dimension line to text
)
(setvar "DIMJUST" 0) ;Justification of text on dimension line
(setvar "DIMLFAC" 1.00000000) ;Linear unit scale factor
(setvar "DIMLIM" 0) ;Generate dimension limits
(setvar "DIMRND" 0) ;Rounding value
(setvar "DIMSAH" 1) ;Separate F_ARROW blocks
(setvar "DIMSD1" 0) ;Suppress the first dimension line
(setvar "DIMSD2" 0) ;Suppress the second dimension line
(setvar "DIMSE1" 0) ;Suppress the first extension line
(setvar "DIMSE2" 0) ;Suppress the second extension line
;;(setvar "DIMSHO" 1) ;DIMSETUP dimensions while dragging
(setvar "DIMSOXD" 0) ;Suppress outside dimension lines
(setvar "DIMTAD" 1) ;Place text above the dimension line
(setvar "DIMTDEC" 7) ;Tolerance decimal places
(setvar "DIMTFAC" 1.00000000) ;Tolerance text height scaling factor
(setvar "DIMTIH" 0) ;Text inside extensions is horizontal
(setvar "DIMTIX" 1) ;Place text inside extensions
(setvar "DIMTM" 0) ;Minus tolerance
(setvar "DIMTOFL" 1) ;Force line inside extension lines
(setvar "DIMTOH" 0) ;Text outside horizontal
(setvar "DIMTOL" 0) ;Tolerance dimensioning
(setvar "DIMTOLJ" 1) ;Tolerance vertical justification
(setvar "DIMTP" 0) ;Plus tolerance
(setvar "DIMTSZ" 0) ;Tick size
(setvar "DIMTVP" 0.00000000) ;Text vertical position
;;Text style names
;;(setvar "DIMTXSTY" ARCH#TXSD) ;Text style
;;text heights
(cond ((= ARCH#UNIT "Ci") (setvar "DIMTXT" 0.09375)) ;Text height
((= ARCH#UNIT "Mm") (setvar "DIMTXT" 2.25)) ;Text height
((= ARCH#UNIT "Cm") (setvar "DIMTXT" 0.225)) ;Text height
((= ARCH#UNIT "Ar") (setvar "DIMTXT" 0.09375)) ;Text height
((= ARCH#UNIT "Me") (setvar "DIMTXT" 0.00225)) ;Text height
((= ARCH#UNIT "En") (setvar "DIMTXT" 0.09375)) ;Text height
)
(setvar "DIMTZIN" 3) ;Tolerance zero suppression
(setvar "DIMUPT" 0) ;User positioned text
(setvar "DIMZIN" 3) ;Zero suppression
(princ))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun ARCH:GDF-SetDimStyleradius (/ dimstylenam)
(setvar "cmdecho" 0)
(ARCH:GDF-SetDimStyle)
(setvar "DIMALTRND" 0.0)
(setvar "DIMALTTD" 2)
(setvar "DIMALTTZ" 3)
(setvar "DIMALTU" 4)
(setvar "DIMALTZ" 3)
(setvar "DIMCEN" 0.0)
(setvar "DIMLWD" -2)
(setvar "DIMLWE" -2)
(setvar "DIMTAD" 0)
(setvar "DIMTIH" 1)
(setvar "DIMTIX" 0)
(setvar "DIMTMOVE" 0)
(setvar "DIMTOFL" 0)
(setvar "DIMTOH" 1)
(setvar "DIMUPT" 1)
(command
"insert"
(strcat "ARR" "=" (strcat ARCH#DIRL "_GaryDFowler\\Dims\\ARR"))
^c)
(setvar "DIMBLK" "ARR")
(setq dimstylenam (strcat "ARW " (rtos (fix (getvar "dimscale")) 2 0)))
(cond ((/= (cdr (assoc 2 (tblsearch "dimstyle" dimstylenam))) dimstylenam)
(command "dimstyle" "S" dimstylenam))
((= (cdr (assoc 2 (tblsearch "dimstyle" dimstylenam))) dimstylenam)
(command "dimstyle" "S" dimstylenam "Y")))
(princ))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Simple SetUp Function ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun ARCH:GDF-SimpleSetUp (scl / gdf-tx gdf-dm gdf-ml)
(setvar "Dimscale" scl)
(setq ARCH#SCLX scl)
(command "-units" "4" "256" "1" "6" "" "")
(setvar "insunits" 1)
(setvar "lunits" 4)
(cond ((= scl 1) (setq sclname (strcat "00" (rtos scl 2 0))))
((or (= scl 128) (= scl 192)) (setq sclname (strcat "" (rtos scl 2 0))))
((or (/= scl 128) (/= scl 192))
(setq sclname (strcat "0" (rtos scl 2 0)))))
(setq gdf-tx (strcat "Note " sclname))
(setq gdf-dm (strcat "Tick " sclname))
(setq gdf-ml (strcat "Mldr " sclname))
(setvar "ltscale" (* (getvar "Dimscale") 0.7))
(command "dim" "scale" (getvar "Dimscale") "" "exit")
(ARCH:SetTxtStyle
gdf-tx
"ARIAL.ttf"
"1.0"
"0"
(/ (getvar "Dimscale") 10.6667))
;;(setvar "dimtxsty" gdf-tx)
;;(ARCH:CreateMLeaderStyle gdf-ml gdf-tx 0 256 (/ (getvar "Dimscale") 10.6667))
(ARCH:CreateMLeaderStyle gdf-ml
(list
'("ArrowSize" . 0.205)
'("DoglegLength" . 0.2333) ;;0.0625
'("LandingGap" . 0.0625) ;;0.03125
'("LeaderLineColor" . 256)
(cons "ScaleFactor" (getvar "DIMSCALE"))
'("TextColor" . 256)
'("TextHeight" . 0.09375)
'("TextLeftAttachmentType" . 1)
'("TextRightAttachmentType" . 1)
;;'("TextStyle" . "ARIAL")
(cons "TextStyle" gdf-tx)
'("EnableDogleg" . -1)
'("EnableFrameText". 0)
'("EnableLanding" . -1)
'("FirstSegmentAngleConstraint" . 0)
'("FirstSegmentAngleConstraint" . 0)
'("ContentType" . 2)
'("MaxLeaderSegmentsPoints" . 2)
'("SecondSegmentAngleConstraint" . 0)
'("TextAlignmentType" . 0)
)
)
(ARCH:GDF-SetDimStyle)
(cond ((/= (cdr (assoc 2 (tblsearch "dimstyle" gdf-dm))) gdf-dm)
(command "dimstyle" "S" gdf-dm))
((= (cdr (assoc 2 (tblsearch "dimstyle" gdf-dm))) gdf-dm)
(command "dimstyle" "S" gdf-dm "Y")))
(if (/= scl 1)(setvar "cmleaderstyle" gdf-ml))
(setvar "cmleaderstyle" gdf-ml)
(command "regenall")
;; (C:MODE)
(graphscr)
(ARCH:SimpleSetup-MSG gdf-dm gdf-tx gdf-ml)
(princ))
-
Honestly, I have tried making a LISP routine to create MLEADER styles, but found it was far simpler and actually faster to make a drawing with all of the mLeader styles in it and insert it as a block, then delete the block. Now all of the mLeader styles will be available.
-
Honestly, I have tried making a LISP routine to create MLEADER styles, but found it was far simpler and actually faster to make a drawing with all of the mLeader styles in it and insert it as a block, then delete the block. Now all of the mLeader styles will be available.
Same here.