Acerca de la carga automática y la ejecución de rutinas de AutoLISP

Cargue rutinas de AutoLISP durante el inicio y ejecute comandos o funciones en momentos determinados durante una sesión de dibujo.

Los productos basados en AutoCAD y AutoCAD LT cargan automáticamente el contenido de tres archivos que puede definir el usuario:

Archivo que puede definir el usuario Windows Mac OS
AutoCAD AutoCAD LT AutoCAD AutoCAD LT
acad.lsp -- --
acaddoc.lsp -- --
acadlt.lsp -- -- --
acadltdoc.lsp -- -- --
Archivo MNL acompañado del archivo de personalización actual -- --

Por defecto, el archivo acad.lsp o acadlt.lsp se carga una sola vez, cuando se inicia el producto, mientras que el archivo acaddoc.lsp o acadltdoc.lsp se carga con cada documento (o dibujo) individual. Esto permite asociar la carga del archivo acad.lsp o acadlt.lsp con el inicio de la aplicación y el archivo acaddoc.lsp o acadltdoc.lsp con el inicio del documento (o dibujo). El método por defecto para cargar estos archivos de inicio se puede modificar cambiando el valor de la variable de sistema ACADLSPASDOC.

Si uno de estos archivos define una función del tipo especial S::STARTUP, esta rutina se ejecuta inmediatamente después de completar la inicialización del dibujo. Como alternativa, el comando APPLOAD proporciona una opción Cargar al inicio que carga las aplicaciones especificadas sin necesidad de editar ningún archivo.

Los archivos de inicio acad.lsp o acadlt.lsp y acaddoc.lsp o acadltdoc.lsp no se proporcionan con el producto. El usuario puede crear y mantener estos archivos si lo desea.

Nota: A partir de los productos basados en AutoCAD 2014, las aplicaciones personalizadas deben funcionar en modo seguro cuando la variable de sistema SECURELOAD se establece en 1 o 2. Al funcionar en modo seguro, el producto queda restringido a la carga y ejecución de archivos que contengan código de ubicaciones de confianza; las ubicaciones de confianza se especifican mediante la variable de sistema TRUSTEDPATHS.

Command Autoloader

Al cargar un archivo de AutoLISP, las definiciones de comando del archivo utilizan memoria ya se utilicen los comandos o no. La función autoload de AutoLISP permite acceder a los comandos sin cargar las rutinas completas en la memoria. Al añadir el código siguiente al archivo acaddoc.lsp o acadltdoc.lsp, se cargan automáticamente los comandos CMD1, CMD2 y CMD3 del archivo cmds.lsp y el comando NEWCMD del archivo newcmd.lsp.

(autoload "CMDS" '("CMD1" "CMD2" "CMD3")) 
(autoload "NEWCMD" '("NEWCMD"))

La primera vez que se introduce un comando cargado automáticamente en la solicitud de comandos, AutoLISP carga la definición completa del comando desde el archivo asociado. AutoLISP también proporciona la función autoarxload para las aplicaciones ObjectARX.

Nota: Los archivos de inicio de AutoLISP con nombres similares se cargan en función del sello horario modificado; se carga el archivo LSP con el sello horario más reciente a menos que se especifique el nombre de archivo completo (incluida la extensión).

El archivo ACAD.LSP o ACADLT.LSP

Puede crear un archivo acad.lsp o acadlt.lsp si utiliza habitualmente rutinas específicas de AutoLISP. Cuando se inicia AutoCAD, en la ruta de búsqueda del archivo de soporte, busca un archivo acad.lsp o acadlt.lsp. Si se encuentra un archivo acad.lsp o acadlt.lsp, se carga en la memoria.

Como el archivo acad.lsp o acadlt.lsp se ha creado para su uso en rutinas de inicio específicas de las aplicaciones, las funciones y variables definidas en un archivo acad.lsp o acadlt.lsp solo están disponibles en el primer dibujo. Es posible que desee mover rutinas que deberían estar disponibles en todos los documentos desde el archivo acad.lsp o acadlt.lsp al archivo acaddoc.lsp o acadltdoc.lsp.

La función recomendada de acad.lsp o acadlt.lsp y acaddoc.lsp o acadltdoc.lsp se puede modificar con la variable de sistema ACADLSPASDOC. Si la variable de sistema ACADLSPASDOC se establece en 0 (el ajuste predeterminado), el archivo acad.lsp o acadlt.lsp se carga una sola vez, tras el inicio de la aplicación. Si se establece en 1, el archivo acad.lsp o acadlt.lsp se vuelve a cargar al crear un dibujo nuevo o al abrir un archivo de dibujo existente.

El archivo acad.lsp o acadlt.lsp puede contener código de AutoLISP para una o varias rutinas, o solo una serie de llamadas a la función load. Es preferible emplear el último método porque facilita la modificación. Si guarda el siguiente código como un archivo acad.lsp o acadlt.lsp, los archivos mysessionapp1.lsp, databasesynch.lsp y drawingmanager.lsp se cargan cada vez que se inicia el programa.

(load "mysessionapp1")
(load "databasesynch")
(load "drawingmanager")
Nota: No modifique los archivos reservados acad<versión>.lsp o acadlt<versión>.lsp. Autodesk proporciona el archivo acad<release>.lsp o acadlt<release>.lsp, que contiene funciones necesarias y específicas de la versión definidas por AutoLISP. Este archivo se carga en la memoria justo antes de que se cargue el archivo acad.lsp o acadlt.lsp. <versión> representa la versión del producto; por ejemplo, acad2026.lsp sería el archivo cargado por AutoCAD y los productos basados en AutoCAD 2026, y acadlt2026.lsp sería el archivo cargado por AutoCAD LT 2026.

El archivo ACADDOC.LSP o ACADLTDOC.LSP

El archivo acaddoc.lsp o acadltdoc.lsp se ha diseñado para asociarse con la inicialización de cada documento (o dibujo). Este archivo resulta útil si se desea cargar una biblioteca de rutinas de AutoLISP para que estén disponibles cada vez que se inicie un nuevo dibujo o se abra uno existente.

Cada vez que se abre un dibujo, AutoCAD busca en la ruta de biblioteca un archivo acaddoc.lsp o acadltdoc.lsp. Si lo encuentra, lo carga en la memoria. El archivo acaddoc.lsp o acadltdoc.lsp se carga siempre con cada dibujo, independientemente de los parámetros de ACADLSPASDOC.

La mayoría de los usuarios tiene un único archivo acaddoc.lsp o acadltdoc.lsp para todas las rutinas de AutoLISP basadas en documentos. El programa realiza la búsqueda del archivo acaddoc.lsp o acadltdoc.lsp en el orden definido por la ruta de biblioteca; por tanto, con esta función se puede tener un archivo acaddoc.lsp o acadltdoc.lsp diferente en cada directorio de dibujo, por lo que se cargarán rutinas específicas de AutoLISP para determinados tipos de dibujos o trabajos.

El archivo acaddoc.lsp o acadltdoc.lsp puede contener el código de AutoLISP para una o varias rutinas, o solo un conjunto de llamadas a la función load. Es preferible emplear el último método porque facilita la modificación. Si guarda el siguiente código como un archivo acaddoc.lsp o acadltdoc.lsp, los archivos mydocumentapp1.lsp, build.lsp y counter.lsp se cargan cada vez que se abre un documento nuevo.

(load "mydocumentapp1")
(load "build")
(load "counter")
Nota: No modifique el archivo reservado acad<versión>doc.lsp o acadlt<versión>doc.lsp. Autodesk proporciona el archivo acad<versión>doc.lsp o acadlt<versión>doc.lsp, que contiene funciones necesarias, específicas de la versión y definidas por AutoLISP. Este archivo se carga en la memoria justo antes de que se cargue el archivo acaddoc.lsp o acadltdoc.lsp. <versión> representa la versión del producto; por ejemplo, acad2026doc.lsp sería el archivo cargado por AutoCAD y los productos basados en AutoCAD 2026, y acadlt2026doc.lsp sería el archivo cargado por AutoCAD LT 2026.

Archivos MNL y personalización del menú de AutoLISP

Cuando el producto carga un archivo de personalización (CUI/CUIx), busca un archivo MNL con el mismo nombre de archivo. Si lo encuentra, lo carga en la memoria. Esta característica garantiza que se carguen las funciones de AutoLISP necesarias para el correcto funcionamiento de los elementos de la interfaz de usuario.

Nota: AutoCAD LT no admite la carga automática de archivos MNL, pero los archivos se pueden cargar mediante la función LOAD de AutoLISP desde otro archivo LISP.

Por ejemplo, si el producto carga un archivo de personalización denominado custom.cuix, buscará un archivo denominado custom.mnl que pueda definir numerosas funciones de AutoLISP utilizadas por elementos de la interfaz de usuario en el archivo de personalización. El archivo MNL se carga después del archivo acaddoc.lsp.

Nota: Si un archivo de personalización se carga con la función command de AutoLISP, con una sintaxis similar a (command "menu" "nuevomenú"), el archivo MNL asociado no se carga hasta que se termina de ejecutar la rutina de AutoLISP.
(command "menu" "newmenu")

(princ "Newmenu utilities… Loaded.")
(Princ)

En este ejemplo, las llamadas a la función princ se pueden utilizar para mostrar mensajes de estado. La primera ejecución de princ muestra el texto siguiente en la línea de comando:

Nuevomemú utilities… cargado.

La segunda llamada a princ sale de la función de AutoLISP. Sin esta segunda llamada a princ, el mensaje se mostraría dos veces. Como ya se ha mencionado, se puede incluir el argumento onfailure, que llama a la función load como medida de precaución adicional.

Función S::STARTUP: Ejecución de postinicialización

Puede definir una función S::STARTUP para llevar a cabo las operaciones de configuración requeridas tras la inicialización de un dibujo.

Los archivos LISP de inicio (acad.lsp o acadlt.lsp, y acaddoc.lsp o acadltdoc.lsp) se cargan en la memoria junto con los archivos MNL cargados automáticamente antes de que el dibujo se inicialice por completo. Normalmente esto no causa ningún problema, a menos que se desee utilizar la función command, que podría no funcionar si el dibujo no ha terminado de inicializarse.

Nota: AutoCAD LT no admite la carga automática de archivos MNL, pero los archivos se pueden cargar mediante la función LOAD de AutoLISP desde otro archivo LISP.

Si la función definida por el usuario S::STARTUP se incluye en un archivo acad.lsp o acadlt.lsp, acaddoc.lsp o acadltdoc.lsp, o MNL, se llamará a esta al introducir un dibujo nuevo o abrir un dibujo existente. Por tanto, puede incluir una definición de S::STARTUP en el archivo de inicio de AutoLISP para realizar las operaciones de configuración requeridas.

Por ejemplo, si desea modificar el comando SOMBREA estándar añadiendo un mensaje y cambiando al comando SOMBCONT, utilice un archivo acaddoc.lsp o acadltdoc.lsp con el siguiente código:

(defun C:HATCH ( ) 
  (alert "Using the BHATCH command!")
  (princ "\nEnter OLDHATCH to get to real HATCH command.\n")
  (command "BHATCH")
  (princ)
) 
(defun C:OLDHATCH ( ) 
  (command ".HATCH")
  (princ)
) 
(defun-q S::STARTUP ( ) 
  (command "undefine" "hatch") 
  (princ "\nRedefined HATCH to BHATCH!\n")
)

Antes de que se inicialice el dibujo, se establecen nuevas definiciones de SOMBREA y OLDHATCH con la función defun. Tras la inicialización del dibujo, se llama a la función S::STARTUP y se anula la definición estándar de SOMBREA.

Nota: Para que se añada, la función S::STARTUP debe haberse definido con la función defun-q en lugar de con defun.

Dado que una función S::STARTUP se puede definir en muchos lugares (un archivo acad.lsp o acadlt.lsp, acaddoc.lsp o acadltdoc.lsp, o MNL o cualquier otro archivo de AutoLISP cargado desde cualquiera de estos archivos), es posible sobrescribir una función S::STARTUP definida anteriormente.

El siguiente ejemplo muestra un método para garantizar que la función de inicio sirve para otras funciones.

(defun-q MYSTARTUP ( )

... su función de inicio ...

)
(setq S::STARTUP (append S::STARTUP MYSTARTUP))

El código anterior añade su función de inicio a la de la función S::STARTUP existente y redefine S::STARTUP para que incluya su código de inicio. Este procedimiento funciona correctamente con independencia de la existencia previa de una función S::STARTUP.