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.
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.
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")
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")
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.
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.
(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.
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.
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.
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.