About-Using-AutoLISP-to-Set-MODEMACRO

About Using AutoLISP to Set MODEMACRO

    About Using AutoLISP to Set MODEMACRO

    Set MODEMACRO values with AutoLISP.

    NOTE:AutoLISP is not available in AutoCAD LT and the MODEMACRO system variable is not supported
    on Mac OS.

    AutoLISP can be used to assign a string to the MODEMACRO system variable and display
    the results to the status bar. Use the AutoLISP strcat function to assemble the complete MODEMACRO string from shorter component strings.

    (defun C:ACADMODE()
      (setvar "modemacro"
        (strcat
            "Layer $(substr,$(getvar,clayer),1,8)"
            "$(if,$(getvar,orthomode), Ortho)"
            "$(if,$(getvar,snapmode), Snap)"
            "$(if,$(=,$(getvar,tilemode),0),"
            "$(if,$(=,$(getvar,cvport),1), P)"
            ")"
        )
      )
    )

    The following sample uses the S::STARTUP function to load an AutoLISP file named mode1.lsp and it sets a string to the MODEMACRO system variable.

    ;;; S::STARTUP loads the file MODE1.LSP which defines a MODEMACRO string
    (defun S::STARTUP ( )
      (load "mode1")
     (princ)
    )
    ;;; Additional AutoLISP files can also be defined or loaded here

    When the AutoLISP file mode1.lsp is loaded, it sets the MODEMACRO system variable to display information at the status
    bar. The text displayed starts with L: followed by the first eight characters of the current layer name, the drawing name
    and a portion of the path, and the first letter of each name of the currently active
    modes. The position of the drawing name remains constant, regardless of the length
    of the layer name.

    ;;; MODE1.LSP
    (setvar "modemacro" 
      (strcat
        "L:$(substr,$(getvar,clayer),1,30)"
        "$(substr,        ,1,$(-,30,$(strlen,$(getvar,clayer)))) "
        ;;            ^^^^^^^^ Note the 8 spaces here
        "<.."
          "$(if,$(eq,$(getvar,dwgname),UNNAMED),UNNAMED,"
            "$(substr,$(getvar,dwgname),"
              "$(if,$(,$(strlen,$(getvar,dwgprefix)),29),"
                "$(-,$(strlen,$(getvar,dwgprefix)),29),1"
              "),"
              "$(strlen,$(getvar,dwgname))"
            ")"
          ")"
        ""
        "$(if,$(getvar,orthomode), O, )"
        "$(if,$(getvar,snapmode), S, )"
        "$(if,$(and,"
        "$(=,$(getvar,tilemode),0),$(=,$(getvar,cvport),1)),P)"
      )
    )

    DIESEL expressions can also be evaluated by AutoLISP routines through the use of the
    AutoLISP menucmd function.

    Learning AutoCad