TheSwamp

Code Red => AutoLISP (Vanilla / Visual) => Topic started by: GDF on July 10, 2018, 08:12:52 PM

Title: MutlLeader Style Headache
Post 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?
 
Code: [Select]
(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:
Code: [Select]
;;; 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)
)




Title: Re: MutlLeader Style Headache
Post by: MSTG007 on July 11, 2018, 08:10:02 AM
I do it the lazy way with the Design Center and drag them in if I need them.
Title: Re: MutlLeader Style Headache
Post by: ronjonp on July 11, 2018, 09:23:23 AM
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.
Title: Re: MutlLeader Style Headache
Post by: GDF on July 11, 2018, 11:50:28 AM
Thanks guys.
Title: Re: MutlLeader Style Headache
Post by: GDF on July 11, 2018, 12:07:28 PM
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!


Code: [Select]
(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))
Title: Re: MutlLeader Style Headache
Post by: cmwade77 on July 11, 2018, 07:09:36 PM
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.
Title: Re: MutlLeader Style Headache
Post by: ronjonp on July 11, 2018, 09:19:11 PM
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.