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 cargan automáticamente el contenido de tres archivos definibles por el usuario: acad.lsp, acaddoc.lsp y el archivo MNL asociado al archivo de personalización actual.
Por defecto, el archivo acad.lsp solo se carga una vez al iniciarse el programa, mientras que acaddoc.lsp se carga con cada documento (o dibujo). Esto permite asociar la carga del archivo acad.lsp con el inicio de la aplicación, y el archivo acaddoc.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 y acaddoc.lsp no se proporcionan con los productos basados en AutoCAD. 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, 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 si utiliza regularmente rutinas AutoLISP específicas. Cuando se inicia AutoCAD, en la ruta de búsqueda del archivo de soporte busca un archivo acad.lsp. Si se encuentra un archivo acad.lsp, se carga en la memoria.
Como el archivo acad.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 sólo 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 al archivo acaddoc.lsp.
La funcionalidad recomendada de acad.lsp y acaddoc.lsp puede modificarse con la variable de sistema ACADLSPASDOC. Si la variable de sistema ACADLSPASDOC se establece en 0 (el ajuste predeterminado), el archivo acad.lsp se carga una sola vez, tras el inicio de la aplicación. Si se establece en 1, el archivo acad.lsp se vuelve a cargar cuando se crea un nuevo dibujo o se abre un archivo de dibujo existente.
El archivo acaddoc.lsp puede contener el código de AutoLISP para una o varias rutinas, o sólo 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 acad.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 está asociado 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 un archivo acaddoc.lsp en la ruta de biblioteca. Si lo encuentra, lo carga en la memoria. El archivo acaddoc.lsp se carga siempre con cada dibujo con independencia de los valores de ACADLSPASDOC.
La mayoría de los usuarios tiene un único archivo acaddoc.lsp para todas las rutinas de AutoLISP basadas en documentos. El programa realiza la búsqueda del archivo acaddoc.lsp en el orden definido por la ruta de biblioteca; por tanto, con esta función se puede tener un archivo acaddoc.lsp diferente en cada directorio de dibujo, con lo que se cargarán rutinas específicas de AutoLISP para ciertos tipos de dibujos o trabajos.
El archivo acaddoc.lsp puede contener el código de AutoLISP para una o varias rutinas, o sólo 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, 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 programa 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, el archivo de personalización acad.cuix busca el archivo acad.mnl que puede definir numerosas funciones de AutoLISP utilizadas por los 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, acaddoc.lsp y MNL) se cargan en la memoria antes de que el dibujo se haya inicializado 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 está incluida en un archivo acad.lsp, acaddoc.lsp o MNL, se llamará a esta cuando se acceda a un dibujo nuevo o se abra uno 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 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 varios lugares (un archivo acad.lsp, acaddoc.lsp o MNL, o cualquier otro archivo de AutoLISP cargado a partir de ellos), es posible sobrescribir una función S::STARTUP previamente definida.
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.