ONCE.15. CARGA Y DESCARGA DE APLICACIONES
Hasta ahora hemos hablado de la forma de cargar nuestras aplicaciones o rutinas AutoLISP desde AutoCAD 14. Tras haber escrito el archivo de texto correspondiente, accedíamos a Herr.>Cargar Aplicación... y desde allí cargábamos nuestro programa. Esto equivale a ejecutar el comando
APPLOAD en línea de comandos. Pues bien, existe una serie de funciones de AutoLISP para manejar esta carga de programas desde otros programas AutoLISP. Esas funciones son las que vamos a estudiar seguidamente.La primera función que veremos es
LOAD. Su sintaxis es:(LOAD nombre_archivo [fallo])
Esta función carga en memoria el archivo AutoLISP especificado y devuelve su nombre. Como sabemos, estos archivos podrán o no estar en uno de los caminos de soporte del programa. Si sí estuvieran, con indicar el nombre es suficiente, si no habría que escribir la ruta de acceso o camino completo.
NOTA: Recordemos que los archivos de soporte los configuramos desde Herr.>Preferencias....
El nombre del archivo en cuestión no hace falta indicarlo con la extensión
.LSP aunque se aconseja por claridad en programas grandes que llamen a archivos .LSP, .DCL y/o a otros si tiene esta extensión; si tuviera otra hay que especificarla obligatoriamente, ya que AutoCAD le coloca el .LSP detrás en el momento en que no existe. Veamos algún ejemplo:(LOAD "circul")
(LOAD "escalera.lsp")
(LOAD "ventana.mio")
(LOAD "circuit.txt")
NOTA
: Como se ve, los nombres de archivo han de ir entrecomillados por ser cadenas.(LOAD "c:\\autocad\\program\\rutin\\caldera.lsp")
Por compatibilidad con sistemas UNIX, las rutas o caminos de acceso se pueden indicar con el carácter de barra inclinada normal ( (LOAD "c:/autocad/program/rutin/caldera.lsp")
El argumento (LOAD "a:/miprog.lsp" "El archivo no se encuentra o el disco no está en la unidad")
Este argumento también ha de ser indicado como cadena y se devuelve como tal, es decir, entre comillas dobles.
La función (DEFUN Prog1 () En este caso, el programa llega a la función NOTA: Mucho cuidado al declarar variables en este tipo de estructuras de llamadas a programas. Si las variables son locales y las necesita el otro programa, éste no funcionará. Declararemos pues como locales únicamente aquellas que no vayan a ser utilizadas más que en la rutina actual.
NOTA: Las aplicaciones AutoLISP hoy por hoy no se pueden descargar de memoria.
(AUTOLOAD nombre_archivo lista_comandos)
La función (AUTOLOAD "c:/lisp/rosca.lsp" ("rosca" "rc"))
Al ser una lista el segundo argumento debe ir indicado como tal. Y los términos deben ir entrecomillados.
Esta línea hará que se cargue y ejecute automáticamente el programa guardado en Deberemos tener un par de consideraciones. La primera es que las palabras con las cuales podemos llamar al programa indicado deben ser el nombre de funciones contenidas en dicho archivo. Y la segunda es que todas las funciones implicadas deberán estar definidas como comandos de AutoCAD, es decir con (DEFUN C:Rosca () (DEFUN C:Rc () Es decir, los comandos con los que se puede acceder, uno de ellos definido como abreviatura, pero definido en el propio archivo.
Con respecto a los directorios de soporte, las mismas consideraciones que para la función NOTA: Desactivando la casilla Volver a cargar aplicaciones de AutoLISP entre dibujos, sita en la pestaña Compatibilidad del cuadro de diálogo Preferencias, al que se accede bajo Herr.>Preferencias..., haremos que cada vez que entremos en un dibujo nuevo no se pierdan los programas y variables globales de AutoLISP cargados en memoria. El texto de la casilla es confuso sobremanera, así que cuidado: la casilla activada hace que no se guarden estos programas en memoria. Esta misma característica, denominada de AutoLISP persistente, se controla mediante la variable Pero tener que teclear líneas de estas cada vez que entramos en AutoCAD es un poco pesado. Si lo que queremos es que nada más cargar AutoCAD, o nada más entrar en un dibujo o abrir uno nuevo, se carguen en memoria determinadas rutinas o funciones, utilizaremos los archivos que vamos a explicar a continuación.
ONCE.15.1. Existen dos archivos, entre otros muchos, que se cargan nada más arrancar AutoCAD, y también cada vez que abrimos un dibujo o comenzamos uno nuevo (si está activada la casilla de AutoLISP persistente antes mencionada). Estos dos archivos son el Para la misma característica disponemos de un archivo NOTA: El archivo Podemos suponer pues que todas las definiciones de código AutoLISP incluidas en estos archivos se cargarán nada más entrar en AutoCAD y al comenzar nuevos dibujos o abrir dibujos existentes. Por ello, si en ellos incluimos funciones Mucho más lógico, y en la práctica es lo que se hace, es introducir funciones NOTA: Si la casilla de AutoLISP persistente está desactivada, como hemos dicho los programas y variables globales permanecerán en memoria, pero no se cargarán los archivos Los archivos Por último hemos de recordar en este punto la utilidad de los archivos Si el código es muy extenso, o por mayor organización, se pueden incluir en este archivo llamadas a los programas necesarios con ONCE.15.1.1. Configuraciones múltiples
Si un usuario trabaja con múltiples configuraciones de AutoCAD, o hay varios usuarios utilizando AutoCAD en un mismo puesto de trabajo, puede ser necesario cargar diferentes rutinas en cada caso. Esto se consigue fácilmente estableciendo un directorio o carpeta de inicio diferente para cada configuración y definiendo en ella un archivo La carpeta de inicio se establece desde el acceso directo a AutoCAD 14 en Windows, como sabemos. Si en el momento de iniciar la sesión, AutoCAD detecta un archivo De hecho, éste es el procedimiento más sencillo que utilizan los desarrolladores de aplicaciones. Al instalarse una aplicación que funciona sobre AutoCAD, se crea una carpeta propia con un archivo ONCE.15.1.2. Definir función como Llegado este momento vamos a explicar esta forma un poco especial de definir una función. Como sabemos, dentro de los archivos comentados anteriormente las funciones (DEFUN S::STARTUP () Todo lo que haya entre los dos paréntesis del (DEFUN S::STARTUP () De esta manera, al entrar en cualquier dibujo se limpiará automáticamente todo lo no utilizado: capas, estilos de texto, tipos de línea...
El prefijo Veamos otro ejemplo más utilizado:
(DEFUN c:guardarr () (DEFUN c:guardarcomo () (DEFUN S::STARTUP () Si quisiéramos redefinir estos comandos de AutoCAD, de la versión castellana del producto, podríamos haber escrito esto en el ONCE.15.2. Aplicaciones ADS
Hay una serie de funciones de AutoLISP para gestionar las aplicaciones ADS (ya obsoletas). En esta sección las vamos a explicar.
(XLOAD nombre_archivo [fallo])
Funciona de la misma manera que (AUTOXLOAD nombre_archivo lista_comandos)
Funciona de la misma manera de (XUNLOAD nombre_archivo [fallo])
Descarga aplicaciones ADS de la memoria. El nombre en (ADS)
Devuelve una lista con los nombres y rutas de acceso (si hiciera falta) de las aplicaciones ADS actualmente cargadas. Por ejemplo:
(ADS) El archivo La función "AppData/nombre_aplicación/nombre_sección/.../nombre_parámetro"
(SETCFG nombre_parámetro valor)
Esta función es complementaria de la anterior y permite escribir un valor concreto en la sección ONCE.15.3. Aplicaciones ARX
Existe también una serie de funciones de AutoLISP para gestionar las aplicaciones ARX. Vamos a verlas.
(ARXLOAD nombre_archivo [fallo])
Funciona de la misma manera que (AUTOARXLOAD nombre_archivo lista_comandos)
Funciona de la misma manera de (ARXUNLOAD nombre_archivo [fallo])
Funciona de la misma manera de (ARX)
Devuelve una lista con los nombres y rutas de acceso (si hiciera falta) de las aplicaciones ARX actualmente cargadas. Por ejemplo:
(ARX) ONCE.15.4. Acceso a comandos externos
(Toda esta sección se proporciona en el archivo ONCE.15.5. Inicio de aplicaciones Windows
Existe una función que nos permite iniciar aplicaciones basadas en plataforma Windows desde AutoLISP. Esta función es:
(STARTAPP aplicación [archivo]) aplicación (STARTAPP "notepad" "ejemplo.txt") Si 13ª fase intermedia de ejercicios
·
La ruta de acceso indicada se establece al estilo MS-DOS, pero con la particularidad de que no podemos utilizar caracteres contrabarra (\) como separadores de directorios o carpetas. Esto es debido a que, como sabemos, la contrabarra es un carácter de control en AutoLISP. Y si revisáramos el comienzo de este MÓDULO, cuando hablábamos de los caracteres de control, veríamos que la contrabarra hemos de indicarla con dos caracteres contrabarra (\\). Precisamente el primero es el carácter de control y el segundo la contrabarra en sí. Por ejemplo:
--(SETQ Pto1 (GETPOINT "Punto 1: "))
--(SETQ Pto2 (GETPOINT "Punto 2: "))
--(LOAD "c:/lisp/prog2.lsp")
--(prog2)
--(SETQ Result (/ (- NewPto1 NewPto2) 2.0))
)
...
)
--(c:rosca)
)
...
)
--(COMMAND "_purge" "_all" "" "_n")
)
...
)
...
)
--(COMMAND "anuladef" "guardarr")
--(COMMAND "anuladef" "guardarcomo")
)
(GETCFG nombre_parámetro)
(STARTAPP "c:/windows/app/miprog.exe")
(STARTAPP "wordpad" "a:\\lisp\\tuerca.lsp")