Lisp

Cómo crear rutinas LISP para la configuración del dibujo.

BricsCAD Lisp

Migración desde AutoCAD

Cuando comience a migrar a BricsCAD, descubrirá que prácticamente no hay diferencias en BricsCAD LISP frente a OtherLISP. Su código se carga y se ejecuta, y la funcionalidad es idéntica. Las principales diferencias al “portar" tus aplicaciones serán algunos pasos de configuración menores, la estructura de la línea de comandos y, posiblemente, las ubicaciones de los archivos. " Para comenzar, revise la configuración y el inicio de sus programas existentes en BricsCAD.

Si está iniciando automáticamente sus programas utilizando Acad.lsp o Acaddoc.lsp, deberá renombrarlas como on_start.lsp o on_doc_load.lsp respectivamente. La mejor solución es usar on_doc_load.lsp, en lugar de on_start.lsp.

Configuraciones BricsCAD
Para activar el lanzamiento automático de su programa, establezca la variable de sistema ACADLSPASDOC en 1 o simplemente active la opción en Configuración / Opciones de programa / Sistema:
También es recomendable que dedique un poco de tiempo a familiarizarse con el menú Opciones/Configuración de BricsCAD, ya que hay configuraciones y opciones específicas del entorno de BricsCAD.
El siguiente paso en el cuadro de diálogo de configuración sería agregar sus carpetas de soporte a la ruta de búsqueda Archivos, que se encuentra en Configuración / Opciones del Programa / Archivos:
Se recomienda usar las rutas de soporte agregadas de la manera anterior y/o ubicada un nivel por debajo de la carpeta del proyecto actual. Es una buena práctica utilizar una función findfile para validar que el archivo existe antes de proceder con sus comandos, como en el método siguiente:
(if (findfile "custom-code.lsp") (carga "custom-code")) 
Este es uno de los métodos que puede utilizar para exigir la carga de sus funciones dentro de on_doc_load.lsp archivo:

Este es uno de los métodos que puede utilizar para exigir sus funciones dentro del on_start.lsp archivo:

El comando DEFUN (DEfine FUNction) es el mismo nombre que la función dentro de su on_doc_load.lsp y esa función redefine la función de llamada cuando se lanza.

Configuración de dibujo Lisp Rutinas para BricsCAD

Ejemplo de código
La siguiente rutina de configuración de dibujo simple podría adaptarse a sus necesidades con cambios mínimos.
(defun C: MYSETUP ( / )              ;definir la función de línea de comandos "mysetup"
 (setvar "cmdecho" 0)
 (comando "_audit" "_y") ;auditar el dibujo actual
 (comando "_-purge" "_all" "*" "_n") ;purgar todos los estilos no utilizados, etc
 (comando "_-layer" "_m" "1" "_c" "1" "" "") ; crear capa "1" color "1"
 (comando "_-capa" "_m" "2" "_c" "2" """)
 (comando "_-capa" "_m" "3" "_c" "3" """)
 (comando "_-capa" "_m" "4" "_c" "4" """)
 (comando "_viewres" "_y" "20000") ; establecer la resolución de la vista al máximo
 (setvar "filedia" 1)      ;activar los diálogos de archivos
 (setvar "attdia" 1)          ;activar los diálogos de atributos
 (setvar "attreq" 1)            ;activar la edición de atributos en la colocación
 (setvar "cecolor" "bylayer")        ; fijar el color actual bylayer
 (setvar "clayer" "0")          ;fijar la capa actual en "0"
 (setvar "maxsort" 5000)        ;fijar la ordenación máxima de la capa en 5.000
 (command "_zoom" "_e" "_zoom" "0. 95x")   ;amplía la extensión, luego se aleja un poco
 (setvar "cmdecho" 1)
 (princ)
)
Cada línea individual en esta rutina de configuración de plano podría haberse escrito en la línea de comandos en BricsCAD. Si los envuelve en una rutina Lisp, el defun (definir función) hace que la rutina de configuración de dibujo sea "responsable" desde un menú o escribiendo su nombre en la línea de comandos BricsCAD.

Si no incluye defun, el programa se ejecutará una vez, cuando lo cargue por su nombre de archivo. Usando defun y cargando esta rutina dentro de su lsp, hará que la función esté disponible en cualquier momento escribiendo su nombre de función: mysetup.

Los comandos con guiones precedentes (por ejemplo -capa y -purga) se utilizan para evitar el lanzamiento de los cuadros de diálogo del comando.

Note: Utilice siempre los nombres de los comandos y opciones en inglés para evitar fallos en las versiones localizadas (no inglesas) de BricsCAD.

Una buena práctica al abrir archivos de otros usuarios es ejecutar una auditoría seguida de una purga para eliminar cualquier elemento no utilizado.

El comando Purgar se puede ejecutar varias veces para eliminar los elementos anidados. Consulte el siguiente ejemplo:

(repetir 3 (comando "-purge" "all" "*" "n"))
Note: Purgar se realiza antes de agregar las nuevas capas vacías, como se quitarían si lo hiciéramos después.

Las llamadas command para configurar las capas podrían combinarse en una sola declaración de comando, pero es más fácil de leer cuando cada línea está sola.

Las llamadas setvar permiten establecer una variable del sistema a un valor especificado, por ejemplo ajustes de estilo para las dimensiones y el texto, ajustes de unidades, etc.

El ajuste maxsort se introdujo por dos razones.
  1. Maxsort controla el número máximo de entradas del cuadro de diálogo que se ordenarán.
  2. El valor predeterminado demaxsort es 1000. Con las computadoras de hoy y los archivos de proyectos más grandes que se encuentran a menudo, ese número puede ser demasiado bajo.
Si abre dibujos donde los nombres de las capas no se ordenan alfabéticamente, el valor predeterminado de maxsort puede ser la razón.
Un Layer Maker más versátil para su rutina de configuración de planos
Se podría agregar el siguiente ejemplo a su versión de mysetup.lsp. Creando un archivo de texto simple «Layers.txt» con un editor como Notepad, puedes añadir una lista de nombres de capas que se crearán cuando se ejecute la rutina. Esta es una alternativa al proceso de codificación rígida que se muestra arriba. Al usar la función findfile, BricsCAD primero buscará en el directorio actual, luego secuencialmente a través de sus carpetas de soporte definidas para encontrar el archivo Layers.txt. Puede colocar su archivo de texto de configuración de capas predeterminado en la ruta de soporte y colocar versiones alternativas del mismo en carpetas de proyectos individuales.

(si (no (busque el archivo" Layers.txt"))                   ;" not" = no se busca ningún resultado en findfile
(alerta) ¡No" puedo encontrar Layers.txt! ")            ;¿Sin archivo? ¡Grita al usuario y sal!
(progn                    ; De lo contrario, haz las cosas del grupo progn
(establezca un archivo de capa (abrir) (busque el archivo" Layers.txt") "r")) ;abrir layers.txt para "leer"
 (while (setq layername (read-line layerfile))   ;mientras se lee cada línea, almacenar el texto en layername
(command "-layer" " m" layername "" )       ;hacer capa con el layername
)                ;terminar el bucle while
(close layerfile)                   ;cerrar el archivo Layers.txt
)       ;finaliza el progn
)                           ;finaliza el if