Establecimiento de MODEMACRO con AutoLISP (Concepto)

AutoCAD

 
Establecimiento de MODEMACRO con AutoLISP
Concepto Referencia rápida
 
 
 

Otra manera de establecer los valores de MODEMACRO es utilizar AutoLISP.

Puede almacenar los códigos de ejemplo incluidos aquí como archivos de texto en formato ASCII y cargarlos con la función load de AutoLISP.

El siguiente comando de AutoLISP define una cadena de MODEMACRO que proporciona información similar a la de la línea de estado interna. Como AutoLISP no puede continuar las cadenas entre línea y línea, es preciso utilizar la función strcat de AutoLISP para crear la cadena completa MODEMACRO a partir de cadenas más pequeñas.

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

Guarde esta rutina de AutoLISP en un archivo llamado acadmode.lsp. Cuando cargue la rutina y la ejecute, mostrará información en la línea de estado. Esta no es la aplicación más útil de esta función; se ofrece únicamente como ejemplo.

El siguiente archivo de ejemplo acad.lsp utiliza la función S::STARTUP para establecer la variable MODEMACRO en una cadena definida por el archivo mode1.lsp de AutoLISP.

;;; Archivo acad.lsp de ejemplo que utiliza S::STARTUP para cargar
;;; el archivo MODE1.LSP, que define una cadena de MODEMACRO
(defun S::STARTUP()
            (load "mode1")
            (princ)
)
;;; También se pueden definir o cargar aquí archivos 
;;; adicionales de AutoLISP

Cuando se carga el archivo de AutoLISP (mode1.lsp), utiliza la variable de sistema MODEMACRO para definir una línea de estado que muestra L: seguido de los primeros ocho caracteres del nombre de capa, el nombre del dibujo y parte de la ruta, así como la primera letra de cada nombre de los modos actualmente activos. La posición del nombre del dibujo no varía, independientemente de la longitud del nombre de la capa.

;;; MODE1.LSP
;;; 
(setvar "modemacro" 
  (strcat
    "L:$(substr,$(getvar,clayer),1,30)"
    "$(substr, ,1,$(-,30,$(strlen,$(getvar,clayer)))) "
;; ^^^^^^^^ Observe los 8 espacios que se introducen aquí
    "<.."
      "$(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,$(getvar,tabmode), T, )"
    "$(if,$(and,"
      "$(=,$(getvar,tilemode),0),$(=,$(getvar,cvport),1)),P)"
  )
)

La sangría del código mejora la lectura de los archivos de AutoLISP y de las cadenas DIESEL.