Universidad Nacional Autónoma de México Facultad de Ingeniería División de Ingenierías Civil y Geomática
Presentación del Libro
Reinaldo Togores Fernández Arquitecto, Doctor Ingeniero de Caminos. Miembro del Autodesk Developers Network.
Contenidos del Libro:
Parte 1: Introducción.
Parte 2: Parte 3: Parte 4:
Tutorial: Un proyecto Visual LISP paso a paso. El Lenguaje y su Entorno de Desarrollo. Controlar AutoCAD desde Visual LISP (2D). Programación 3D. Transformaciones 3D, Puntos de Vista y Estilos Visuales, Curvas NURBS, Mallas Poligonales/Policara, Modelado y Edición de Sólidos, Superficies de Subdivisión, de Procedimiento y NURBS.
Parte 5: Programación Avanzada.
Reactores, Cuadros de Diálogo, Datos en el Dibujo, Tablas, Exportación a EXCEL, Ejecutables Visual LISP, Interfaz de Usuario con OpenDCL.
La interfaz de usuario Visual LISP : Menú Herramientas Ventanas del Editor Otras Ventanas Ventana de la Consola Línea de Estado
Programación Funcional : Su sintaxis es la de las funciones matemáticas.
(8 * ((17 + 3) / 4)) (8 * ((1720 + 3) / 4)) (8 * ((17 +53) / 4)) (8 * ((1740+ 3) / 4)) Lista: una secuencia de datos entre paréntesis. La solución resulta del procesamiento sucesivo de cada una de las listas.
Notación prefija: El operador aparece siempre al inicio de la lista.
(* 8 (/ (+ 17 3) 4)) (* 8 (/ (+2017 3) 4)) (* 8 (/ (+ 17 5 3) 4)) (* 8 (/ (+ 4017 3) 4))
Sintaxis LISP:
Los programas LISP se componen de listas cuyo primer término es una función seguido de cero o más argumentos. Los argumentos se evalúan de izquierda a derecha y los resultados se pasan a la función incluida como primer término de la lista. Las variables son símbolos que representan los datos sobre los que opera el programa. Son los datos los que poseen tipo, no las variables. Las funciones LISP siempre devuelven un valor y a veces producen efectos colaterales. Se utilizan ya sea por el valor devuelto, por sus efectos colaterales o por ambos.
Formas especiales: Se llaman formas especiales a algunas funciones que no cumplen la regla de evaluar todos sus argumentos.
La forma especial quote, devuelve su argumento sin evaluarlo. Quote se representa por un apóstrofe La forma especial setq asigna a un símbolo un valor. Las funciones LISP no cambian el valor de las variables que reciben como argumentos. Para cambiarlo será necesario asignárselo con setq. La forma especial defun crea nuevas funciones que operan como las propias del lenguaje. Los programas LISP son funciones creadas mediante defun.
Creación de Nuevas Entidades: Visual LISP permite crear nuevas entidades mediante tres tecnologías diferentes:
La función command. Invoca los comandos tal como lo haría el usuario desde la línea de comandos.
La función entmake. Recurre a las propiedades expuestas como sublistas asociadas a códigos DXF.
Los métodos ActiveX. Existen funciones vla-Add… para los distintos tipos de objeto.
La función command: Opera pasando al buffer de teclado los datos tal como los podría teclear el usuario.
Pueden invocarse funciones de entrada de datos.
Las funciones ent…: Recurren a las propiedades de los objetos identificadas a partir de códigos DXF en forma de listas de asociación.
La lista de entidad se obtiene con la función entget.
Las funciones ent…: Entmake recibe como argumento una lista de este tipo. Para el círculo sólo son imprescindibles los códigos 0, 10 y 40.
Otros códigos: 100: Clase y Subclase de objeto. 67: 0 = EspacioModelo; 1= EspacioPapel. 410: Nombre del Layout. 8: Nombre de la Capa. 210: Vector Normal al plano de dibujo.
Las funciones ent…: La función ent-copia-circ recibe una lista de entidad De un círculo haciendo copias con otro centro.
El valor asociado al código 10 se modifica mediante la función subst.
Las funciones ent…: Sustituyendo entmake por entmod creamos una función que desplaza el círculo en lugar de copiarlo.
Las extensiones ActiveX:
La referencia a los objetos Aplicación y Documento son de uso constante. En este libro las asignamos a dos variables globales protegidas, *aesl:acad* y *aesl:dibujo*.
Las extensiones ActiveX: La propiedad ActiveLayout del documento devuelve el objeto Layout cuyo objeto Block es el espacio al que añadir cualquier nuevo objeto gráfico.
Las extensiones ActiveX: Para crear un círculo mediante ActiveX recurrimos a Vla-AddCircle. El primer argumento es el espacio en el que se incluye el objeto: (vla-AddCircle espacio centro radio)
Programación 3D
Trabajar en Entorno 3D. (Capítulo 13)
Requiere el dominio de:
Conversión entre Sistemas de Coordenadas. Operaciones con vectores. Traslaciones, rotaciones, cambios de escala, etc. Y las matrices de transformación que las definen. Modificación de los puntos de vista 3D para presentar los resultados de las operaciones. Modos de visualización, incluyendo colores, sombreados y transparencias para los objetos 3D.
Sistemas de Coordenadas Personales: (Capítulo 13)
Para distintas orientaciones en el espacio es necesario definir Sistemas de Coordenadas Personales distintos del Sistema de Coordenadas Universal.
El SCP se guarda en el código 210 de la lista de entidad como vector normal al plano de dibujo.
Sistemas de Coordenadas de Objeto: (Capítulo 13)
Las coordenadas que definen posiciones en el espacio para algunos objetos se definen en un sistema de coordenadas propio, el SCO que se define a partir de:
Su origen que coincide con el origen del SCU. La orientación de los ejes X e Y calculados a partir
del vector normal. El valor de la variable de sistema ELEVATION.
En las entidades 3D el SCO coincide con el SCU. La función trans permite convertir puntos y vectores entre SCU, SCP y SCO: (trans punto SC-origen SC-destino [como-vector])
Transformaciones tridimensionales : (Capítulo 13)
1. Traslación del objeto al origen del Sistema de Coordenadas Universal (SCU). 2. Alineación de los ejes de referencia para la transformación con los ejes del SCU. 3. Realización de las transformaciones (giro, escalado, desplazamiento) necesarias. 4. Transformación inversa a la del punto 2 para devolver los ejes a su posición original. 5. Traslación inversa a la del punto 1 para devolver el objeto a su posición original en el espacio. El método ActiveX TransformBy, permite aplicar a un objeto estas transformaciones.
Matriz de Transformación del SCP: (Capítulo 13)
El método GetUCSMatrix devuelve una matriz de 4x4 que como argumento de vla-TransformBy transforma un objeto al SCP correspondiente, aplicándole el conjunto de traslaciones y rotaciones necesario.
Punto de Vista y Apariencia Visual: (Capítulo 13)
Punto de Vista: depende de la propiedad Direction del ViewPort actual.
La secuencia anterior establece una vista isométrica suroeste en la ventana gráfica actual.
Punto de Vista y Apariencia Visual: (Capítulo 13)
Apariencia Visual: depende de la una serie de variables de sistema que se identifican por el prefijo VS.
La función var-vis establece el estilo visual utilizado para la portada de este libro.
Curvas 3D: SPLINES. (Capítulo 14)
Implementación del modelo matemático Non-Uniform Basis Spline (NURBS). Representa cualquier forma desde puntos, rectas o polilíneas a secciones cónicas o formas libres. Gran control sobre la forma, su curvatura y fluidez a partir de sus vértices de control y nudos. Formas muy complejas a partir de muy pocos datos. Las funciones vlax-curve… permiten obtener una serie de propiedades de estas curvas para su uso en programas.
Modelado 3D. AutoCAD permite la creación de modelos 3D empleando sólidos, superficies y mallas.
Sólidos: construcción de modelos a partir de primitivas
y operaciones de UNIÓN, DIFERENCIA e INTERSECCIÓN. Superficies: Modelado de formas libres. Asociatividad. Mallas: Plegado y Suavizado.
Es posible la conversión entre Sólidos, Superficies y Mallas para aprovechar las posibilidades de edición características de cada tipo de objeto.
Modelado 3D: Sólidos. (Capítulos 17 y 18)
Un cuerpo 3D cerrado con propiedades como masa, volumen, centro de gravedad y momento de inercia. El modelado de formas básicas (primitivas) que se combinan mediantes operaciones Booleanas (unión, diferencia e intersección). También se crean sólidos por: EXTRUSION, BARRIDO, SOLEVACION, REVOLUCION o como POLISOLIDO.
Modelado 3D: Sólidos. (Capítulos 17 y 18)
La información asociada a los códigos DXF aparece cifrada, por lo que no es posible crearlas desde entmake. Para ello deben utilizarse los métodos ActiveX:
AddBox AddCone AddCylinder AddEllipticalCone AddEllipticalCylinder AddSphere AddTorus AddWedge
AddExtrudedSolid AddExtrudedSolidAlongPath AddRevolvedSolid AddExtrudedSolidAlongPath
Modelado 3D: Mallas de Caras. Las Mallas Poligonales y Policara son la manera más antigua (versión 10, 1989) de aproximar superficies:
Aproximan la forma de las superficies mediante caras planas de tres o cuatro vértices. Son programables a partir de command, de entmake o de ActiveX. Las Mallas Poligonales y Policara son la manera más antigua de aproximar superficies. A partir de la versión 2010 se incorporan la entidad MESH, con más posibilidades que viene a sustituirlas.
Modelado 3D: Entidades MESH. (Capítulo 19)
Los objetos MESH son superficies de subdivisión que Pueden someterse a procesos de suavizado en que las caras se curvan y las aristas se suavizan creando facetas. Las caras de la malla original pueden tener más de cuatro vértices. Pueden crearse a partir de command y de entmake pero no de ActiveX. Se definen recursivamente. La malla inicial (Nivel 0) con caras planas y aristas en ángulo se suaviza formando facetas con lo que se curvan las caras y se redondean las aristas generando un nuevo nivel de suavizado.
Modelado 3D: Entidades MESH. (Capítulo 19)
AutoCAD ofrece con el comando MESH (MALLA) la posibilidad de crear una serie de formas simples.
Pero sus propiedades están expuestas como códigos DXF, lo que permite programar otras formas con entmake.
Suavizado:
Nivel 0
Nivel 1
Nivel 2
Modelado 3D: Entidades MESH. (Capítulo 19) La creación de otras formas de malla a partir de Visual LISP se publican por primera vez en este libro.
Modelado 3D: Superficies . (Capítulo 20) AutoCAD ofrece dos tipos de superficies: de procedimiento y NURBS. En ambos casos las superficies se crean a partir de entidades lineales.
Superficies de procedimiento: Modelado Asociativo. Superficies NURBS: Modelado con vértices de control. No es posible crearlas más que invocando comandos. La variable SURFACEMODELINGMODE determina si se crean superficies de procedimiento o NURBS.
Modelado 3D: Superficies . (Capítulo 20) Pueden crear superficies o sólidos los comandos: EXTRUSION, SOLEVACION, REVOLUCION, BARRIDO. Crean sólo superficies: REDSUPERF, DESFASESUPERF, PARCHESUPERF, FUSIONASUPERF y SUPERFPLANA. Convierten otros tipos de objetos 3D a superficies: A superficies: CONVENNURBS, CONVASUPERF. Conversión a mallas o sólidos: CONVENMALLA, CONVASOLIDO.
Modelado 3D: Superficies Asociativas. (Capítulo 20) Para crear superficies asociativas es necesario que: Esté desactivada la creación de superficies NURBS. (SURFACEMODELINGMODE = 0). Esté activada la asociatividad de las superficies. (SURFACEASSOCIATIVITY = 1). Se crean a partir de entidades lineales. El argumento MODO determina si se creará una superficie o un sólido.
Polilínea usada como perfil en el programa de ejemplo.
Modelado 3D: Superficies Asociativas. (Capítulo 20) Las superficies de procedimiento pueden mantener la asociatividad a las entidades lineales utilizadas en su definición. A partir de la versión 2010 podemos asignarles restricciones geométricas y dimensionales.
Restricciones GEOMÉTRICAS: coincidencia, paralelismo, perpendicularidad, horizontalidad, verticalidad, etc.
Restricciones DIMENSIONALES: distancias o ángulos. Pueden ser variables y/o ecuaciones.
Modelado 3D: Superficies Asociativas. (Capítulo 20) Los valores de las restricciones dimensionales pueden cambiarse desde nuestros programas tanto mediante entmod como usando la propiedad ActiveX DimConstrExpression.
Modelado 3D: Superficies NURBS. (Capítulo 20) La creación de superficies NURBS deberá activarse estableciendo SURFACEMODELINGMODE = 1. Su creación es idéntica a la de las de procedimiento. Estas superficies no son asociativas. Para modificarlas se utilizan los vértices de control.
Otros Contenidos. Programación Visual LISP para el Editor de Bloques: Superficie Asociativa cono Bloque Dinámico.
Otros Contenidos. Programación de Cuadros de Diálogo DCL.
Otros Contenidos. Datos del dibujo a Tablas y a Hojas de Cálculo.
Otros Contenidos. Paleta No-Modal con OpenDCL.
http://www.togores.net/expertoautocad
The spirit of Lisp hacking can be expressed in two sentences. Programming should be fun. Programs should be beautiful. Paul Graham, en el prólogo a ANSI Common Lisp.