132
SEP SEIT DGIT CENTRO NACIONAL DE INVESTIGACIÓN Y DESARROLLO TECNOLÓGICO Cenidet ENTORNO DE GRAFICACIÓN Y GENERACIÓN DE MODELOS 2D Y 3D PARA APLICACIONES DE VISIÓN ARTIFICIAL (GrafO3D) PRESENTA: ARIADNA JUDITH DÍAZ BARRITA DIRECTORES DE TESIS: DR. RAÚL PINTO ELÍAS DRA. AZUCENA MONTES RENDÓN CUERNAVACA, MORELOS AGOSTO DE 2004 T E S I S PARA OBTENER EL GRADO DE MAESTRO EN CIENCIAS EN CIENCIAS COMPUTACIONALES

Cenidet · sep seit dgit centro nacional de investigaciÓn y desarrollo tecnolÓgico cenidet entorno de graficaciÓn y generaciÓn de modelos 2d y

  • Upload
    others

  • View
    26

  • Download
    0

Embed Size (px)

Citation preview

  • SEP SEIT DGIT

    CENTRO NACIONAL DE INVESTIGACIÓN Y DESARROLLO TECNOLÓGICO

    Cenidet

    ENTORNO DE GRAFICACIÓN Y GENERACIÓN DE MODELOS 2D Y 3D PARA APLICACIONES DE VISIÓN ARTIFICIAL

    (GrafO3D)

    PRESENTA: ARIADNA JUDITH DÍAZ BARRITA

    DIRECTORES DE TESIS: DR. RAÚL PINTO ELÍAS

    DRA. AZUCENA MONTES RENDÓN

    CUERNAVACA, MORELOS AGOSTO DE 2004

    T E S I S PARA OBTENER EL GRADO DEMAESTRO EN CIENCIAS ENCIENCIAS COMPUTACIONALES

  • i

    CONTENIDO Lista de figuras …………………………………………………………………………………… iii Lista de tablas …………………………………………………………………………………… v CAPÍTULO I. INTRODUCCIÓN 1.1 Introducción …………………………..……………………………………………….. 2 1.2 Organización de la tesis ……………….……….………………………………………. 4 1.3 Antecedentes ……………………………………………………………………………. 4 1.4 Descripción del problema ……………………………………………………………… 5 1.5 Marco conceptual ………………………..……………………………………………… 7

    1.5.1 Estado del arte ……………………..……………………………………………… 7 1.5.1.1 Graficación 3D ……………………..…………………………………………. 7 1.5.1.2 Herramientas CAD/CAM (Computer Aided Design/ Computer Aided

    Manufacturing) …………………………………………………………………… 9 1.5.1.3 VRML (Virtual Reality Modeling Language) …………………...…………. 11 1.5.1.4 OpenGL ………………..……………...………………………………………… 12

    1.5.2 Estado de la práctica …..……………….………………………………………… 16 1.5.2.1 Anim8or ……………..……………...………………………………………… 16 1.5.2.2 3D Studio Max ………………………………………………………………… 18 1.5.2.3 AC3D ……………………………..…………………………………………….. 19

    1.6 Propuesta de solución ……………………..……………………………………………. 21 1.6.1 Objetivo de la tesis …………………..……………………………………………. 21 1.6.2 Beneficios ……………………………………………………………………………. 21

    1.6.2.1 Beneficios generales ………………….……………………………………….. 21 1.6.2.2 Beneficios específicos para el grupo de Visión Artificial del cenidet ………. 21

    1.6.3 Alcances y limitaciones ……………...…..……………………………………….. 22 1.6.4 Disciplinas involucradas ……………….....……………………………………….. 23

    1.7 Aplicaciones ………………………………………………………………………………. 23 1.8 Conclusiones ……………………………………………………………………………. 23 CAPÍTULO II. ANÁLISIS Y DISEÑO 2 Cap2 2.1 Introducción …………………..………………………………………………...……... 25 2.2 Requerimientos funcionales del sistema …………………..………………………… 25 2.3 Otros requerimientos …………………………………..….…………………………… 27 2.4 Modelo conceptual de GrafO3D ..………………...…...……………………………... 27 2.5 Definición y especificación de objetos ………………….……………………………. 28

    2.5.1 Mundo virtual tridimensional ………………………….…………...…………… 29 2.5.2 Especificación de objetos en VRML …………………………………………….. 32 2.5.3 Especificación de objetos en OpenGL …………………………………………... 37

    2.5.3.1 Primitivas para el dibujado …………………………….…………..……….. 38 2.5.3.2 Transformaciones …………………………………….……………………….. 41

    2.6 Especificación de objetos en GrafO3D ……………………………………………….. 43 2.7 Persistencia y recuperación de objetos ……………………………………………….. 46 2.8 Manipulación de objetos …………………………………………………………..……. 52 2.9 Procesos para tratar archivos producidos por otras herramientas ………………… 53 2.10 Conclusiones ………………………………………………………………………........ 54

  • ii

    CAPÍTULO III. IMPLEMENTACIÓN 3 3.1 Introducción …….……………………...…………………………………………….... 56 3.2 Especificación de objetos en GrafO3D ………………….………………………….... 56 3.3 Persistencia y recuperación de objetos ………………..……………………………… 60 3.4 Manipulación de objetos ………………..………………………………………………. 62 3.5 Procesos para tratar archivos producidos por otras herramientas ………………… 70 3.6 Conclusiones ……………..…………………………………………………………….. 71 CAPÍTULO IV. PRUEBAS Y RESULTADOS 4 asd 4.1 Introducción ……………………………….………………………………………….... 73 4.2 Especificación de casos de prueba ……………..……..…………………………….... 73 4.3 Especificación del procedimiento de pruebas ………………………………………… 74

    4.3.1 Caso de prueba 1: lectura de un archivo GrafO3D ……………….....………… 74 4.3.2 Caso de prueba 2: aplicación de funciones de graficación ……………...……... 76 4.3.3 Caso de prueba 3: visualización de los modelos: modelos sólidos, en alambre y

    en vértices ………………………………………………………………………………. 79 4.3.4 Caso de prueba 4: generación de animación ………………………………….... 80 4.3.5 Caso de prueba 5: lectura de un archivo de texto conformado por puntos (x,y) 86

    4.4 Conclusiones ……………………………………………………………………………. 89 CAPÍTULO V. CONCLUSIONES

    5 as 5.1 Introducción …………………….…………………………………………………….... 91 5.2 Metas alcanzadas ………………..……………….……..…………………………….... 91 5.3 Conclusiones …………………...……………………………..………………………… 92 5.4 Trabajos futuros ………………….…………………………………..………………….. 93 Referencias ………………………………………………………………………………………… 95 Glosario de términos …………………..…….………………………………………….....……… 97 Anexo A: funciones de bibliotecas de OpenGL ……………………………………………….. 98 Anexo B: tipos de datos de OpenGL …………………………...………………………………. 99 Anexo C: casos de uso de GrafO3D ……………………………………………………………… 100 Anexo D: ejemplo de un archivo GrafO3D ……………………………………………………. 111 Anexo E: ejemplo de un archivo de texto que describe un objeto en términos de puntos …... 112 Anexo F: ejemplo de un archivo VRML ……………………..……………………………….. 113 Anexo G: definición de la clase Lexer en la gramática de GrafO3D ……………………….. 114 Anexo H: definición de la clase Parser en la gramática de GrafO3D ……………………….. 115

  • iii

    LISTA DE FIGURAS Figura 1.1 Ejemplos de objetos rígidos ……….…………………………………………… 2 Figura 1.2 Ejemplos de objetos articulados …..…………………………………………… 3 Figura 1.3 Ejemplos de objetos deformables ……….……………………………………. 3 Figura 1.4 Relación de GrafO3D con algunas herramientas desarrolladas en el cenidet 5 Figura 1.5 Sistema de coordenadas en un espacio 3D ……..……………………………. 8 Figura 1.6 Niveles de abstracción de OpenGL …………………………………………... 14 Figura 1.7 Matrices de transformación lineal ………..…………………………………... 14 Figura 1.8 Interfaz de la herramienta Anim8or ………………………………………… 16 Figura 1.9 Interfaz de la herramienta AC3D ……………..……………………………... 19 Figura 2.1 Diagrama de casos de uso general ……..……………………………………... 25 Figura 2.2 Modelo conceptual de GrafO3D …………………………………………….. 27 Figura 2.3 Tipos de transformaciones ……………………………………………………. 42 Figura 2.4 Tipos de proyección …………………………………………………………... 42 Figura 2.5 Diagrama de paquetes de GrafO3D …………………………………………... 47 Figura 2.6 Clases contenidas en el paquete unspecified ..….……………………………. 47 Figura 2.7 Clases contenidas en el paquete GrafO3D ………..…………………………. 48 Figura 2.8 Clases contenidas en el paquete GrafO3D (continuación de la figura 2.7) … 49 Figura 2.9 Clases contenidas en el paquete GrafO3D (continuación de la figura 2.7) … 50 Figura 2.10 Relaciones de algunas clases abstractas con sus clases hijas ……………… 51 Figura 2.11 Diseño de la interfaz de usuario de GrafO3D ………………………………. 53 Figura 3.1 Proceso para el almacenamiento de los modelos en memoria ……………… 61 Figura 3.2 Menú de opciones y barra de herramientas del entorno gráfico de GrafO3D 62 Figura 3.3 Editores de propiedades del entorno gráfico de GrafO3D ………………… 63 Figura 3.4 Controles para la manipulación de la cámara, luz, piso y ejes del entorno

    gráfico de GrafO3D ……………………………………………………………….. 65 Figura 3.5 Pantalla de propiedades de la animación, opción: captura independiente de

    frames ……………………………………………………………………………….. 66 Figura 3.6 Pantalla de generación de animación con movimiento de traslación,

    rotación o escala ……………………………………………………………………. 67 Figura 3.7 Pantalla de generación de animación con movimiento de traslación ……. 67 Figura 3.8 Proceso para tratar archivos generados por la herramienta para el modelado

    automático de objetos alfaflexibles ………………………………………………. 70 Figura 4.1 Archivo de texto y datos almacenados en memoria ………………………….. 75 Figura 4.2 Visualización de los modelos gráficos en la interfaz de usuario …………… 76 Figura 4.3 Propiedades del modelo …………………………………………………………. 77 Figura 4.4 Material del objeto ……………………………………………………………… 77 Figura 4.5 Propiedades de la luz …………………………………………………………… 78 Figura 4.6 Modelo resultante de la aplicación de funciones de graficación …………… 78 Figura 4.7 Modelos sólidos …………………………………………………………………... 79 Figura 4.8 Modelos en alambre ……………………………………………………………… 79 Figura 4.9 Modelos en vértices ……………………………………………………………… 79 Figura 4.10 Frames capturados para generar un archivo de animación ………………… 80 Figura 4.11 Frames generados por GrafO3D correspondientes al modelo de una mano … 81 Figura 4.12 Frames generados por GrafO3D correspondientes al modelo de un brazo de

    un robot ……………………………………………………………………………… 82

  • iv

    Figura 4.13 Frames generados por GrafO3D correspondientes al modelo de un gusano ... 83 Figura 4.14 Pantalla de propiedades de la animación ……………………………………… 84 Figura 4.15 Frames generados por GrafO3D ……………………………………………….. 84 Figura 4.16 Pantalla de propiedades de la animación ……………………………………… 85 Figura 4.17 Frames generados por GrafO3D ……………………………………………….. 85 Figura 4.18 Archivo de texto con la descripción del modelo de una boca ……………… 86 Figura 4.19 Modelo gráfico generado por GrafO3D ……………………………………… 87 Figura 4.20 Frames generados por GrafO3D ……………………………………………….. 87 Figura 4.21 Archivo de texto con la descripción del modelo de una boca ……………… 88 Figura 4.22 Modelo gráfico generado por GrafO3D ……………………………………… 88 Figura 4.23 Frames generados por GrafO3D ……………………………………………….. 88 Figura D.1 Modelos descritos en el archivo GrafO3D ……………………………………. 111 Figura E.1 Modelo descrito en términos de puntos en el archivo de texto ……………. 112 Figura F.1 Modelo resultante del archivo VRML ………………………………………… 113

  • v

    LISTA DE TABLAS Tabla 2.1 Descripción de los casos de uso del diagrama ………………………………. 26 Tabla 2.2 Nodos de figura de VRML ……………………………………………………. 33 Tabla 2.3 Nodos de geometría y material de VRML …………………………………… 34 Tabla 2.4 Nodos de transformación de VRML …………………………………………... 35 Tabla 2.5 Nodos de cámara de VRML ………………………………………………….. 36 Tabla 2.6 Nodos de iluminación de VRML …………………………………………….. 36 Tabla 2.7 Nodos de grupo de VRML ……………………………………………………. 36 Tabla 2.8 Primitivas de línea de OpenGL ……………………………………………….. 39 Tabla 2.9 Primitivas de polígonos de OpenGL ………………………………………… 40 Tabla 2.10 Primitivas de GrafO3D …………………………………………………………. 43 Tabla 3.1 Símbolos para la definición de reglas en una gramática ANTLR …….…… 60 Tabla 3.2 Funciones de C++ utilizadas para la creación del archivo de texto …….. 62 Tabla 3.3 Componentes de C++ Builder ……………………………………………….. 63 Tabla 3.4 Instrucciones OpenGL …………………………………………………………. 63 Tabla 3.5 Componentes de C++ Builder ……………………………………………….. 64 Tabla 3.6 Instrucciones OpenGL …………………………………………………………. 64 Tabla 3.7 Componentes de C++ Builder ……………………………………………….. 65 Tabla 3.8 Instrucciones OpenGL …………………………………………………………. 66 Tabla 3.9 Componentes de C++ Builder ……………………………………………….. 68 Tabla 3.10 Instrucciones OpenGL …………………………………………………………. 68 Tabla 3.11 Otras instrucciones OpenGL ……………………………………………….. 68

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Referencias

    95

    REFERENCIAS [Ac3d04] Inivis (Agosto 2003) AC3D. [On line] Available: http://www.ac3d.org. [Anim8or03] S. Glanville (Agosto 2003) Anim8or. [On line] Available: http://www.anim8or.com. [Antlr03] -- (Agosto, 2003) ANTLR. [On line] Available: http://www.antlr.org. [Avi04] -- (Marzo, 2004) AVI example code for creating AVI files. [On line] Available: http://www.wischik.com/lu/programmer/avi_utils.html. [Booch00] G. Booch [et al], El Lenguaje Unificado de Modelado, Addison Wesley, España, 2000. [Compiladores03] H. Hernández. Apuntes de compiladores, Centro Nacional de Investigación y Desarrollo Tecnológico (Cenidet), Cuernavaca, Morelos, Mayo 2003. [Delrieux03] C. Delrieux, Introducción a la Computación Gráfica, Departamento de Ingeniería Eléctrica, Universidad Nacional del Sur, Agosto, 2003. [García04] C. García (Noviembre, 03) Programación con Delphi y OpenGL. [On line] Available: http://glscene.tripod.com. [Huerta04] J. Huerta (Marzo, 2004) Introducción al CAD/CAM, Universidad Jaime, Departamento de Lenguajes y Sistemas Informáticos. [On line] Available: http://www3.uji.es/~huerta/dfao/apuntes/tema1.pdf. [Lamers96] J. Lamers, M. T. Peterson, 3D Studio Versión 4.0, Prentice Hall, México, 1996. [López03] J. G. López, “Detallador de tareas para procesos de Visión Robótica”, Tesis para obtener el grado de Maestro en Ciencias en Ciencias Computacionales, Departamento de Ciencias Computacionales, Área de Visión Artificial, Centro Nacional de Investigación y Desarrollo Tecnológico (Cenidet), Cuernavaca, Morelos, Julio del 2003. [Magadán99] A. Magadán, “Reconocimiento de rostros invariante a expresiones faciales”, Tesis para obtener el grado de Maestro en Ciencias en Ciencias Computacionales, Departamento de Ciencias Computacionales, Área de Visión Artificial, Centro Nacional de Investigación y Desarrollo Tecnológico (Cenidet), Cuernavaca, Morelos, Noviembre 1999.

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Referencias

    96

    [May04] I. May, Tesis en desarrollo: “Modelado de objetos deformables, utilizando color y textura”, Departamento de Ciencias Computacionales, Área de Visión Artificial, Centro Nacional de Investigación y Desarrollo Tecnológico (Cenidet), Cuernavaca, Morelos. [Mcmahon98] C. McMahon, J. Browne, CAD CAM. Principles, practice and manufacturing management, 2nd edition, Addisson Wesley, United States of America, 1998. [Nalwa93] V. Nalwa, A Guided Tour to Computer Vision, Addison Wesley, 1993. [Orbe03] E. Orbe, “Herramienta para el Modelado Automático de Objetos Alfaflexibles”, Tesis para obtener el grado de Maestro en Ciencias en Ciencias Computacionales, Departamento de Ciencias Computacionales, Área de Visión Artificial, Centro Nacional de Investigación y Desarrollo Tecnológico (Cenidet), Cuernavaca, Morelos, Julio del 2003. [Pesce96] M. Pesce, VRML para internet, Prentice Hall, México, 1996. [Rueda03] C. Rueda Murillo, Tesis en desarrollo: “Simulador de un brazo articulado con interface gráfica”, Departamento de Ciencias Computacionales, Área de Visión Artificial, Centro Nacional de Investigación y Desarrollo Tecnológico (Cenidet), Cuernavaca, Morelos. [Segal04] M. Segal, K. Akeley, The OpengGL Graphics System: A Specification (Version 1.5). Silicon Graphics, Inc. Copyright 1992-2003. [Suárez03] P. K. Suárez, “Animación y visualización de fenómenos naturales”, Tesis para obtener el grado de Licenciatura en Ingeniería en Ciencias Computacionales, Universidad de las Américas, Cholula, Puebla, Enero del 2003. [On line] Available: http://www.pue.udlap.mx/~tesis/lis/suarez_r_pk/. [Vrml03] -- (Enero, 2004) VRML 97, ISO/IEC 14772, The Virtual Reality Modeling Language. [On line] Available: http://www.web3d.org/x3d/specifications/vrml/ISO_IEC _14772-All/part1/concepts.html#4.2.1. [Wright97] R. Wright Jr., M. Sweet. Programación en OpenGL. Anaya. España 1997. [Zamora04] S. Zamora (Marzo, 2004) La Lengua Española. [On line] Available: http://www.geocities.com/sergiozamorab/quesla.htm.

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    98

    ANEXO A Funciones de bibliotecas de OpenGL

    Ejemplos de funciones contenidas en la biblioteca OpenGL.DLL.

    FUNCIÓN DESCRIPCIÓN

    glClearColor Selecciona los valores de color y alfa para borrar los buffers de color. glOrtho Describe un volumen de trabajo paralelo.

    glViewport Define la porción de ventana en la que puede dibujar OpenGL.

    glVertex Especifica las coordenadas 3D de un vértice.

    glMatrixMode Especifica la matriz actual

    Ejemplos de funciones contenidas en la biblioteca GLU.DLL.

    FUNCIÓN DESCRIPCIÓN

    gluLookAt

    Define una transformación de visualización basada en la posición del observador, la posición del centro de la escena y un vector que apunta hacia arriba desde la perspectiva del observador.

    gluPerspective Define una matriz de Proyección en perspectiva para la visualización.

    gluCylinder Dibuja un cilindro cuádrico.

    gluSphere Dibuja una esfera cuádrica.

    gluQuadricTexture Activa o desactiva la generación de coordenadas de textura para el mapeado de texturas sobre cuádricas.

    Ejemplos de funciones contenidas en la biblioteca GLUT.DLL.

    FUNCIÓN DESCRIPCIÓN

    glutInit Modifica las variables de estado del Glut para hacer una sesión con el sistema de ventanas.

    glutInitWindowPosition Indica la posición en píxeles en la pantalla de la ventana.

    glutCreateWindow Crea una ventana.

    gluKeyBoardFunc Genera las llamadas al teclado.

    glutCreateMenu Crea un menú.

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    99

    ANEXO B Tipos de datos de OpenGL

    Tipos de datos de OpenGL.

    TIPO DE DATO REPRESENTACIÓN INTERNA

    GLbyte Entero de 8 bits.

    GLshort Entero de 16 bits.

    GLint, GLsizei Entero de 32 bits.

    GLfloat, GLclampf Coma flotante de 32 bits.

    GLdouble, GLclampd Coma flotante de 64 bits.

    GLubyte, GLboolean Entero de 8 bits sin signo.

    GLushort Entero de 16 bits sin signo.

    GLuint, GLenum, GLbitfield

    Entero de 32 bits sin signo.

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    100

    ANEXO C Casos de uso de GrafO3D Documentación de casos de uso Caso de uso: crear nueva escena Actores: usuario Descripción: este caso de uso lo inicia el usuario con la finalidad de crear una nueva escena, eliminando de la pantalla lo que se haya creado anteriormente.

    ACTOR SISTEMA Paso Acción Paso Acción Exc.

    1 El usuario selecciona la opción para crear una nueva escena.

    2 El sistema limpia la pantalla para iniciar una nueva escena.

    E1

    Excepciones: id Nombre Acción E1 Existe una escena en uso con cambios

    sin guardar. El sistema muestra una pantalla al usuario para guardar los cambios.

    Caso de uso: abrir escena desde archivo Actores: usuario Descripción: este caso de uso lo inicia el usuario cuando desea abrir un archivo de texto existente con la descripción de una escena (archivo GrafO3D).

    ACTOR SISTEMA Paso Acción Paso Acción Exc.

    1 El usuario selecciona la opción para abrir un archivo de texto.

    2 El sistema presenta una pantalla en la cual el usuario proporciona el nombre de un archivo existente.

    3

    El usuario introduce el nombre del archivo.

    4 El sistema valida que el archivo de texto exista.

    E1

    5 El sistema presenta los modelos gráficos descritos en el archivo de texto.

    E2

    Excepciones: id Nombre Acción E1 Nombre de archivo inexistente. Volver a ingresar información. E2 Archivo con errores. Envía mensaje de error. Abrir otro archivo

    Crear nueva escena

    usuario

    Abrir escena desde archivo

    usuario

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    101

    Caso de uso: importar archivo Actores: usuario Descripción: este caso de uso lo inicia el usuario cuando desea abrir un archivo de texto existente que contenga la descripción de un modelo en término de puntos (x,y).

    ACTOR SISTEMA Paso Acción Paso Acción Exc.

    1 El usuario selecciona la opción para importar un archivo de texto.

    2 El sistema presenta una pantalla en la cual el usuario proporciona el nombre de un archivo existente.

    3

    El usuario introduce el nombre del archivo.

    4 El sistema valida que el archivo de texto exista.

    E1

    5 El sistema presenta el modelo gráfico descrito en el archivo de texto.

    6 El sistema presenta al usuario una pantalla para que proporcione el nombre del archivo de animación y el tiempo de espera entre cada frame.

    E2

    7 El sistema genera los archivos BMP correspondientes a los frames que forman la secuencia de video, y el archivo de video tipo AVI que contiene la animación resultante.

    Excepciones: id Nombre Acción E1 Nombre de archivo inexistente. Volver a ingresar información. E2 Información inválida. Volver a ingresar información. Caso de uso: crear nuevo objeto Actores: usuario Descripción: este caso de uso lo inicia el usuario cuando desea crear un nuevo objeto en la escena.

    ACTOR SISTEMA Paso Acción Paso Acción Exc.

    1 El usuario selecciona la opción para crear un nuevo objeto.

    2 El sistema agrega el nombre del objeto al árbol de objetos y primitivas.

    Crear nuevo objeto

    usuario

    Importar archivo

    usuario

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    102

    Caso de uso: modificar propiedades de un objeto o primitiva Actores: usuario Descripción: este caso de uso lo inicia el usuario cuando desea modificar las características de un objeto o primitiva, como lo son: nombre, color, rotación, traslación, escala, textura. Si las modificaciones son hechas a un objeto, todas las primitivas que contenga este objeto son también modificadas.

    Caso de uso: cambiar nombre Actores: usuario

    Descripción: este caso de uso lo inicia el usuario cuando desea cambiar el nombre de un objeto o primitiva.

    ACTOR SISTEMA Paso Acción Paso Acción Exc.

    1 El usuario selecciona la opción para ver las propiedades del objeto o primitiva.

    2 El sistema valida que un objeto o primitiva esté seleccionado.

    E1

    3 El sistema presenta la pantalla de propiedades del objeto o primitiva.

    4

    El usuario introduce el nuevo nombre del objeto o primitiva.

    5 El usuario acepta las modificaciones. 6 El sistema valida que el nuevo nombre del objeto o primitiva no exista.

    E2

    7 El sistema presenta al objeto o primitiva con el nuevo nombre, en el árbol de objetos.

    Modificar propiedades de un objeto o primitiva

    usuario

    Cambiar nombre

    usuario

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    103

    Excepciones: id Nombre Acción E1 Objeto o primitiva no seleccionada. El sistema envía un mensaje de error: no hay

    objeto o primitiva seleccionada. E2 Nombre de objeto o primitiva existente. Volver a ingresar información Caso de uso: cambiar color Actores: usuario Descripción: este caso de uso lo inicia el usuario cuando desea cambiar el color de un objeto o primitiva existente.

    ACTOR SISTEMA Paso Acción Paso Acción Exc.

    1 El usuario selecciona el objeto o primitiva deseada.

    2 El usuario selecciona la opción para ver las propiedades del objeto o primitiva.

    3 El sistema presenta la pantalla de propiedades del objeto o primitiva.

    4 El usuario modifica el color del objeto o primitiva.

    5 El usuario acepta las modificaciones. 6 El sistema aplica el cambio de color al objeto (y a las primitivas que lo compongan) o a la primitiva seleccionada.

    Caso de uso: aplicar rotación Actores: usuario Descripción: este caso de uso lo inicia el usuario cuando desea rotar algún objeto o primitiva existente en cualquiera de los ejes x, y o z.

    ACTOR SISTEMA Paso Acción Paso Acción Exc.

    1 El usuario selecciona el objeto o primitiva deseada.

    2 El usuario selecciona la opción para ver las propiedades del objeto o primitiva.

    3 El sistema presenta la pantalla de propiedades del objeto o primitiva.

    4 El usuario maneja los controles para modificar el número de grados a rotar en cualquiera de los tres ejes.

    5 El usuario acepta las modificaciones. 6 El sistema aplica la rotación al objeto (y a las primitivas que lo compongan) o a la primitiva seleccionada.

    Cambiar color

    usuario

    Aplicar rotación

    usuario

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    104

    Caso de uso: aplicar traslación Actores: usuario Descripción: este caso de uso lo inicia el usuario cuando desea trasladar o mover algún objeto o primitiva existente en cualquiera de los ejes x, y o z.

    ACTOR SISTEMA Paso Acción Paso Acción Exc.

    1 El usuario selecciona el objeto o primitiva deseada.

    2 El usuario selecciona la opción para ver las propiedades del objeto o primitiva.

    3 El sistema presenta la pantalla de propiedades del objeto o primitiva.

    4 El usuario maneja los controles para modificar los puntos en los que será trasladado el objeto o primitiva en cualquiera de los tres ejes.

    5 El usuario acepta las modificaciones. 6 El sistema presenta el objeto (y las primitivas que lo compongan) o la primitiva con las nuevas modificaciones.

    Caso de uso: cambiar escala Actores: usuario Descripción: este caso de uso lo inicia el usuario cuando desea cambiar la escala o tamaño de un objeto o primitiva existente.

    ACTOR SISTEMA Paso Acción Paso Acción Exc.

    1 El usuario selecciona el objeto o primitiva deseada.

    2 El usuario selecciona la opción para ver las propiedades del objeto o primitiva.

    3 El sistema presenta la pantalla de propiedades del objeto o primitiva.

    4 El usuario maneja los controles para modificar el tamaño del objeto o primitiva en cualquiera de los tres ejes.

    5 El usuario acepta las modificaciones. 6 El sistema presenta el objeto (y las primitivas que lo compongan) o la primitiva con la nueva escala.

    Aplicar traslación

    usuario

    Cambiar escala

    usuario

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    105

    Caso de uso: aplicar textura Actores: usuario Descripción: este caso de uso lo inicia el usuario cuando desea aplicar una textura a un objeto o a una primitiva.

    ACTOR SISTEMA Paso Acción Paso Acción Exc.

    1 El usuario selecciona el objeto o primitiva deseada.

    2 El usuario selecciona la opción para ver las propiedades del objeto o primitiva.

    3 El sistema presenta la pantalla de propiedades del objeto o primitiva.

    4 El usuario selecciona el botón para abrir un archivo de textura.

    5 El sistema envía una pantalla para que el usuario elija el archivo que contiene la textura.

    6 El usuario elige un archivo de textura. 7 El sistema valida que el archivo exista.

    E1

    8 El usuario acepta las modificaciones. 9 El sistema presenta el objeto (y las primitivas que lo compongan) o la primitiva con la nueva textura.

    Excepciones: id Nombre Acción E1

    Nombre de archivo inexistente. Volver a ingresar información

    Caso de uso: agregar primitiva Actores: usuario Descripción: este caso de uso lo inicia el usuario cuando desea agregar una primitiva a un objeto existente.

    ACTOR SISTEMA Paso Acción Paso Acción Exc.

    1 El usuario selecciona el objeto para agregar una primitiva.

    2 El usuario selecciona la opción de agregar primitiva.

    3 El sistema habilita la barra de herramientas de primitivas.

    E1

    4 El usuario selecciona la primitiva deseada.

    5 El sistema agrega la primitiva al objeto seleccionado y al árbol de objetos.

    6 El sistema dibuja la primitiva en la escena.

    Aplicar textura

    usuario

    Agregar primitiva

    usuario

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    106

    Excepciones: id Nombre Acción E1 Objeto no seleccionado El usuario debe seleccionar un objeto. Caso de uso: guardar escena Actores: usuario Descripción: este caso de uso lo inicia el usuario con la finalidad de almacenar en un archivo de texto la información actual de la escena.

    ACTOR SISTEMA Paso Acción Paso Acción Exc.

    1 El usuario selecciona la opción para guardar la escena.

    2 El sistema presenta una pantalla para que el usuario proporcione el nombre del archivo.

    3

    El usuario introduce el nombre del archivo.

    4 El sistema valida que no exista otro archivo de texto con el mismo nombre que introdujo el usuario.

    E1

    5 El sistema guarda la información de la escena actual en el archivo de texto.

    Excepciones: id Nombre Acción E1 Nombre de archivo existente. Preguntar si se quiere reemplazar el archivo, de

    lo contrario, volver a ingresar información. Caso de uso: manejo de iluminación Actores: usuario Descripción: este caso de uso lo inicia el usuario con la finalidad de modificar las propiedades de la luz, como lo son: nombre, posición y color.

    ACTOR SISTEMA Paso Acción Paso Acción Exc.

    1 El usuario selecciona el botón para ver la pantalla de propiedades de la luz.

    2 El sistema presenta la pantalla en donde se muestran las propiedades de la luz.

    3

    El usuario modifica las propiedades de color, posición o color.

    4 El usuario acepta los cambios.

    5 El sistema valida que la información esté correcta.

    E1

    6 El sistema muestra la escena con las nuevas modificaciones

    Guardar escena

    usuario

    Manejo de iluminación

    usuario

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    107

    Caso de uso: cambio de perspectiva Actores: usuario Descripción: este caso de uso lo inicia el usuario con la finalidad de mover la cámara en las direcciones de adelante, atrás, izquierda y derecha.

    ACTOR SISTEMA Paso Acción Paso Acción Exc.

    1 El usuario selecciona el botón dependiendo de la dirección en la que quiera mover la cámara.

    2 El sistema mueve la cámara en la dirección indicada por el usuario.

    Caso de uso: cambiar vista de modelos Actores: usuario Descripción: este caso de uso lo inicia el usuario cuando desea cambiar el estilo o vista de los modelos en la escena, como lo son: modelos de alambre, sólidos o vértices.

    ACTOR SISTEMA Paso Acción Paso Acción Exc.

    1 El usuario selecciona desde el menú de opciones, el tipo de vista que desee.

    2 El sistema presenta los modelos con el tipo de vista especificado por el usuario.

    Caso de uso: eliminar objeto o primitiva Actores: usuario Descripción: este caso de uso lo inicia el usuario cuando desea eliminar un objeto o primitiva existente.

    ACTOR SISTEMA Paso Acción Paso Acción Exc.

    1 El usuario selecciona el objeto o primitiva a eliminar.

    2 El usuario selecciona la opción de eliminar.

    3 El sistema elimina el objeto (con todas sus primitivas) o la primitiva seleccionada del árbol de objetos y de la escena.

    E1

    Cambio de perspectiva

    usuario

    Cambiar vista de modelos

    usuario

    Eliminar objeto o primitiva

    usuario

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    108

    Excepciones: id Nombre Acción E1 Eliminación de la única primitiva del objeto. El sistema elimina el objeto. Caso de uso: generar animación Actores: usuario Descripción: este caso de uso lo inicia el usuario cuando desea generar animación con la escena actual. Se puede generar animación de tres formas diferentes: mediante la captura de frames, por la selección del tipo de movimiento (traslación, rotación, escala), o mediante la especificación de puntos (x,y,z) sobre los que se trasladará el objeto.

    Caso de uso: captura de frames Actores: usuario Descripción: este caso de uso lo inicia el usuario cuando genera animación de un objeto o primitiva, mediante la captura de frames en el momento en que se desee que esa imagen forme parte del archivo de animación final.

    ACTOR SISTEMA Paso Acción Paso Acción Exc.

    1 El usuario selecciona del menú de animación, la opción de crear nueva animación.

    2 El sistema prepara las opciones necesarias para iniciar la captura de frames.

    3 El usuario captura el número de frames que desee.

    4 El sistema crea las imágenes BMP correspondientes.

    5 El usuario finaliza la captura de frames.

    6 El usuario selecciona la opción de ver las propiedades de animación.

    7 El sistema presenta la pantalla de propiedades de la animación.

    8 El usuario proporciona la información necesaria en la pantalla de propiedades.

    9 El usuario selecciona la opción para generar el archivo de animación.

    10 El sistema crea el archivo de video tipo AVI con los frames capturados.

    E1

    Generar animación

    usuario

    Captura de frames

    usuario

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    109

    Excepciones: id Nombre Acción E1 Alguna información proporcionada es inválida. No se crea el archivo de video

    correctamente. Caso de uso: selección del tipo de movimiento Actores: usuario Descripción: este caso de uso lo inicia el usuario cuando genera animación a través de la selección del tipo de movimiento que tendrá el objeto o primitiva: traslación, rotación o escala. El sistema solicita al usuario información sobre el nombre del archivo de animación, tiempo de espera entre cada frame, número de repeticiones de la secuencia total, tipo de movimiento, eje sobre el cual se aplicará el movimiento, y el número de veces que se repetirá el movimiento.

    ACTOR SISTEMA Paso Acción Paso Acción Exc.

    1 El usuario selecciona del menú de animación, la opción de generar animación.

    2 El sistema presenta la pantalla de propiedades de la animación.

    3 El usuario proporciona la información necesaria en la pantalla de propiedades.

    9 El usuario selecciona la opción para generar el archivo de animación.

    10 El sistema crea el archivo de video tipo AVI.

    E1

    Excepciones: id Nombre Acción E1 Alguna información proporcionada es inválida. No se crea el archivo de video

    correctamente. Caso de uso: traslación Actores: usuario Descripción: este caso de uso lo inicia el usuario cuando genera animación mediante la traslación de una primitiva. El sistema solicita al usuario información sobre el nombre del archivo de animación, tiempo de espera entre cada frame, número de repeticiones de la secuencia total y el conjunto de puntos (x,y,z) por los que la primitiva será trasladada.

    Selección del tipo de

    movimientousuario

    Traslación

    usuario

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    110

    ACTOR SISTEMA

    Paso Acción Paso Acción Exc. 1 El usuario selecciona del menú de

    animación, la opción de generar animación.

    2 El sistema presenta la pantalla de propiedades de la animación.

    3 El usuario proporciona la información necesaria en la pantalla de propiedades.

    9 El usuario selecciona la opción para generar el archivo de animación.

    10 El sistema crea el archivo de video tipo AVI.

    E1

    Excepciones: id Nombre Acción E1 Alguna información proporcionada es inválida. No se crea el archivo de video

    correctamente. Caso de uso: cerrar aplicación Actores: usuario Descripción: este caso de uso lo inicia el usuario cuando desea salir de la aplicación.

    ACTOR SISTEMA Paso Acción Paso Acción Exc.

    1 El usuario selecciona del menú la opción de salir.

    2 El sistema verifica que no existan cambios en la escena sin guardar.

    E1

    3 El sistema cierra la aplicación. Excepciones: id Nombre Acción E1 La escena no ha sido guardada. El sistema muestra una pantalla al usuario

    para guardar los cambios.

    Cerrar aplicación

    usuario

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    111

    ANEXO D Ejemplo de un archivo GrafO3D Ejemplo de un archivo GrafO3D que describe dos objetos que corresponden a la Tierra y a la Luna. Los modelos correspondientes se muestran en la Figura D.1. #Grafo v10 PerspectiveCamera Camara1 {

    position 0.00 0.50 6.00 orientation 0.00 1.00 0.00

    } Lighting Luz1 {

    LightPosition 4.00 4.00 4.00 0.00 LightAmbient 0.20 0.20 0.20 1.00 LightDiffuse 0.80 0.80 0.80 1.00 LightSpecular 1.00 1.00 1.00 1.00

    } Separator Objeto1 {

    Transform Transform1 {

    translation 0.00 0.50 -4.00 rotation 15.00 1.00 0.00 scale 1.00 1.00 1.00

    } Material Material1 {

    ambientColor 0.80 0.80 0.20 1.00 diffuseColor 0.10 0.50 0.80 1.00 specularColor 1.00 1.00 1.00 1.00 emissiveColor 0.30 0.20 0.20 1.00 shininess 10.00 Texture C:\GrafO3D\texturas\Earth.bmp

    }

    Sphere Tierra {

    radius 1.50 } Transform Transform1 {

    translation 2.50 0.50 -3.00 rotation 15.00 1.00 0.00 scale 1.00 1.00 1.00

    } Material Material1 {

    ambientColor 0.80 0.80 0.20 1.00 diffuseColor 0.10 0.50 0.80 1.00 specularColor 1.00 1.00 1.00 1.00 emissiveColor 0.0 0.20 0.20 1.00 shininess 10.00 Texture C:\GrafO3D\textuas\Sup_Lunar.bmp

    } Sphere Luna { radius 1.00 }

    }

    Figura D.1 Modelos descritos en el archivo GrafO3D.

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    112

    ANEXO E Ejemplo de un archivo de texto que describe un objeto en términos de puntos

    Ejemplo de un archivo de texto que describe un objeto en términos de los puntos que forman su contorno. El modelo corresponde al contorno de una boca humana como se muestra en la Figura E.1: 66 3 encabezado de variables 0.0 1.0 0.1 1.2 0.3 1.3 0.5 1.35 0.7 1.37 0.9 1.35 1.0 1.33 1.1 1.31 1.3 1.29 1.5 1.31 1.7 1.33 1.9 1.35 2.0 1.37 2.1 1.35 2.3 1.3 2.5 1.2 2.7 1.0 2.5 0.9 2.3 0.87 2.1 0.85 2.0 0.83 1.9 0.81 1.7 0.79 1.5 0.77 1.3 0.75 1.1 0.77 1.0 0.79 0.9 0.81 0.7 0.83 0.5 0.85 0.3 0.87 0.1 0.89 0.0 0.91 1.0 1.0 1.1 1.2 1.3 1.3 1.5 1.35 1.7 1.37 1.9 1.35 2.0 1.33 2.1 1.31 2.3 1.29 2.5 1.31 2.7 1.33 2.9 1.35 3.0 1.37 3.1 1.35 3.3 1.3 3.5 1.2 3.7 1.0 3.5 0.9 3.3 0.87 3.1 0.85 3.0 0.83 2.9 0.81 2.7 0.79 2.5 0.77 2.3 0.75 2.1 0.77 2.0 0.79 1.9 0.81 1.7 0.83 1.5 0.85 1.3 0.87 1.1 0.89 1.0 0.91 2.0 1.0 2.1 1.2 2.3 1.3 2.5 1.35 2.7 1.37 2.9 1.35 3.0 1.33 3.1 1.31 3.3 1.29 3.5 1.31 3.7 1.33 3.9 1.35 4.0 1.37 4.1 1.35 4.3 1.3 4.5 1.2 4.7 1.0 4.5 0.9 4.3 0.87 4.1 0.85 4.0 0.83 3.9 0.81 3.7 0.79 3.5 0.77 3.3 0.75 3.1 0.77 3.0 0.79 2.9 0.81 2.7 0.83 2.5 0.85 2.3 0.87 2.1 0.89 2.0 0.91

    Figura E.1 Modelo descrito en términos de puntos en el archivo de texto.

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    113

    ANEXO F Ejemplo de un archivo VRML Ejemplo de un archivo VRML cuyo objeto descrito corresponde al modelo de una culebra. El resultado se muestra en la Figura F.1. #VRML V2.0 utf8 Background {

    skyColor 0.7 0.7 0.9 } #ground Shape {

    appearance Appearance { material Material { diffuseColor 0.6 0.6 0 }

    } geometry Box { size 20 0.01 20 }

    } #snake shape Transform {

    translation 0 0.3 0 children Shape {

    appearance Appearance { material Material {

    diffuseColor 1.0 0.8 0 }

    } geometry Extrusion { creaseAngle 1.57 crossSection [ #circle

    1 0, 0.9135 -0.4067, 0.6691 -0.7431, 0.309 -0.9511, -0.1045 -0.9945, -0.5 -0.866, -0.809 -0.5878, -0.9781 -0.2079, -0.9781 0.2079, -0.809 0.5878, -0.5 0.866, -0.1045 0.9945, 0.309 0.9511, 0.6691 0.7431, 0.9135 0.4067, 1 0

    ]

    spine [ # sinusoid -4.0000 0.0 0.0000, -3.5556 0.0 0.6428, -3.1111 0.0 0.9848, -2.6667 0.0 0.8660, -2.2222 0.0 0.3420, -1.7778 0.0 -0.3420, -1.3333 0.0 -0.8660, -0.8889 0.0 -0.9848, -0.4444 0.0 -0.6428, 0.0000 0.0 0.0000, 0.4444 0.0 0.6428, 0.8889 0.0 0.9848, 1.3333 0.0 0.8660, 1.7778 0.0 0.3420, 2.2222 0.0 -0.3420, 2.6667 0.0 -0.8660, 3.1111 0.0 -0.9848, 3.5556 0.0 -0.6428, 4.0000 0.0 -0.0000,

    ] scale [

    0.05 0.02, 0.2 0.1, 0.4 0.150, 0.3 0.3, 0.3 0.3, 0.3 0.3, 0.3 0.3, 0.3 0.3, 0.3 0.3, 0.3 0.3, 0.3 0.3, 0.3 0.3, 0.29 0.29, 0.29 0.29, 0.28 0.28, 0.25 0.25, 0.20 0.20, 0.1 0.1, 0.05 0.05

    ] }

    } }

    Figura F.1 Modelo resultante del archivo VRML.

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    114

    ANEXO G Definición de la clase Lexer en la gramática de GrafO3D Definición de la clase del analizador léxico de la gramática de GrafO3D generada bajo las especificaciones de ANTLR. options { mangleLiteralPrefix = "TK_"; language="Cpp"; } class miLexer extends Lexer; options { k=2; exportVocab=Tiny; charVocabulary = '\3'..'\377'; defaultErrorHandler = false; } tokens { "Grafo"; "Separator"; "PerspectiveCamera"; "position"; "orientation"; "Material"; "ambientColor"; "diffuseColor"; "specularColor"; "emissiveColor"; "shininess"; "rotation"; "translation"; "scale"; "Transform"; "Points"; "Line"; "Triangle"; "Cone"; "Cylinder"; "Sphere"; "SolidBox"; "SolidCone"; "SolidDodecahedron"; "SolidIcosahedron"; "SolidOctahedron"; "SolidThetrahedron"; "SolidTorus"; "WireBox"; "WireCone"; "WireCube"; "WireCylinder"; "WireDodecahedron"; "WireIcosahedron"; "WireOctahedron"; "WireThetrahedron"; "WireTorus"; "WireSphere"; "Polygon"; "bottomRadius"; "height"; "width"; "depth"; "radius"; "interiorRadius"; "exteriorRadius"; "Lighting"; "LightPosition"; "LightAmbient"; "LightSpecular"; "LightDiffuse"; "Texture" ; } WS_ : (' ' | '\t' | '\n' {newline();} | '\r') { _ttype = antlr::Token::SKIP; } ; SL_COMMENT : "//" (~'\n')* '\n' { _ttype = antlr::Token::SKIP; newline(); } ; DIAGONAL:'/' ; DIAGINV:'\\' ; DIGITO:

    ( '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' ) ; FLOTANTE: (GUION)? ( (DIGITO)+ PUNTO (DIGITO)+ ) ; GATO:'#' ; ENE: 'ñ' | 'Ñ' ; PUNTOYCOMA:';' ; DOSPUNTOS:':' ; GUION:'-' ; COMA: ',' ; CORCHETEA:'[' ; CORCHETEC:']' ; PUNTO:'.' ; ABRIRPARENT:'(' ; CERRARPARENT:')' ; CURLYR options { paraphrase = "llave cerrada"; } : '}' ; CURLYL options { paraphrase = "llave abierta"; } : '{' ; ID options { testLiterals = true; paraphrase = "an identifier"; } : ('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|':'|'\\'|'_'|'.'|'0'..'9')* ;

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    115

    ANEXO H Definición de la clase Parser en la gramática de

    GrafO3D Definición de la clase parser de la gramática de GrafO3D generada bajo las especificaciones de ANTLR. header "post_include_hpp" { #include #include #include # include "CObjects.h" #include "PerspectiveCamera.hpp" #include "Light.hpp" } header "post_include_cpp" { PerspectiveCamera* miParser::Getcamera() { return vcamara; } Light* miParser::Getlight() { return defluz; } } options { language = "Cpp"; } class miParser extends Parser; options { k=2; genHashLines = off; importVocab=Tiny; defaultErrorHandler = false; } { public: vector CObjectsList; PerspectiveCamera* Getcamera(); Light* Getlight(); private: Transform *vtransf; Material *vmat; Transform *aux_transf; Material *aux_mat; PerspectiveCamera *vcamara; CObjects *vobje; Light *defluz; int indexprimitivas; int band_mat; int band_transf; } grafoFile: {vtransf = NULL;} encabezado sentencias ; encabezado: GATO TK_Grafo ID ; sentencias: perspectiva luz (objeto)* ; objeto: { String auxiliar; } TK_Separator { vobje = new CObjects(); indexprimitivas = 0; band_mat = 0; band_transf = 0; } a: ID { auxiliar = a->getText().c_str();

    vobje->Setname(auxiliar); } CURLYL (sentencia)* { CObjectsList.push_back(*vobje); } CURLYR ; sentencia: (transform)? (material)? primitiva ; perspectiva: { String auxiliar1,auxiliar2,auxiliar3,auxiliar4,auxiliar5,auxiliar6; } TK_PerspectiveCamera { vcamara = new PerspectiveCamera();} i: ID { auxiliar1 = i->getText().c_str(); vcamara->Setname(auxiliar1); } CURLYL TK_position a: FLOTANTE { auxiliar1 = a->getText().c_str(); } b: FLOTANTE { auxiliar2 = b->getText().c_str(); } c: FLOTANTE { auxiliar3 = c->getText().c_str(); } TK_orientation d: FLOTANTE { auxiliar4 = d->getText().c_str(); } e: FLOTANTE { auxiliar5 = e->getText().c_str(); } f: FLOTANTE { auxiliar6 = f->getText().c_str(); vcamara->PositionCamera (StrToFloat(auxiliar1),StrToFloat(auxiliar2),StrToFloat(auxiliar3),0.0,0.5,5.0,StrToFloat(auxiliar4),StrToFloat(auxiliar5),StrToFloat(auxiliar6)); } CURLYR ; luz: { String auxiliar1,auxiliar2,auxiliar3,auxiliar4,auxiliar5;} TK_Lighting { defluz = new Light();} a: ID { auxiliar1 = a->getText().c_str(); defluz->Setname(auxiliar1); } CURLYL TK_LightPosition b: FLOTANTE { auxiliar2 = b->getText().c_str(); } c: FLOTANTE { auxiliar3 = c->getText().c_str(); } d: FLOTANTE {

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    116

    auxiliar4 = d->getText().c_str(); } e: FLOTANTE { auxiliar5 = e->getText().c_str(); defluz->Setposition(StrToFloat(auxiliar2),StrToFloat(auxiliar3),StrToFloat(auxiliar4),StrToFloat(auxiliar5)); } TK_LightAmbient f: FLOTANTE { auxiliar2 = f->getText().c_str(); } g: FLOTANTE { auxiliar3 = g->getText().c_str(); } h: FLOTANTE { auxiliar4 = h->getText().c_str(); } i: FLOTANTE { auxiliar5 = i->getText().c_str(); defluz->Setambient(StrToFloat(auxiliar2),StrToFloat(auxiliar3),StrToFloat(auxiliar4), StrToFloat(auxiliar5)); } TK_LightDiffuse j: FLOTANTE { auxiliar2 = j->getText().c_str(); } k: FLOTANTE { auxiliar3 = k->getText().c_str(); } l: FLOTANTE { auxiliar4 = l->getText().c_str(); } m: FLOTANTE { auxiliar5 = m->getText().c_str(); defluz->Setdiffuse(StrToFloat(auxiliar2),StrToFloat(auxiliar3),StrToFloat(auxiliar4), StrToFloat(auxiliar5)); } TK_LightSpecular n: FLOTANTE { auxiliar2 = n->getText().c_str(); } o: FLOTANTE { auxiliar3 = o->getText().c_str(); } p: FLOTANTE { auxiliar4 = p->getText().c_str(); } q: FLOTANTE { auxiliar5 = q->getText().c_str(); defluz->Setspecular(StrToFloat(auxiliar2),StrToFloat(auxiliar3),StrToFloat(auxiliar4), StrToFloat(auxiliar5)); } CURLYR ; material: { String auxiliar1,auxiliar2,auxiliar3,auxiliar4; } TK_Material { aux_mat = new Material(); band_mat = 1;} o: ID { auxiliar1 = o->getText().c_str(); aux_mat->Setname(auxiliar1); } CURLYL TK_ambientColor a: FLOTANTE { auxiliar1 = a->getText().c_str(); } b: FLOTANTE { auxiliar2 = b->getText().c_str(); } c: FLOTANTE {

    auxiliar3 = c->getText().c_str(); } p: FLOTANTE { auxiliar4 = p->getText().c_str(); aux_mat->SetambientColor(StrToFloat(auxiliar1),StrToFloat(auxiliar2), StrToFloat(auxiliar3),StrToFloat(auxiliar4)); } TK_diffuseColor d: FLOTANTE { auxiliar1 = d->getText().c_str(); } e: FLOTANTE { auxiliar2 = e->getText().c_str(); } f: FLOTANTE { auxiliar3 = f->getText().c_str(); } q: FLOTANTE { auxiliar4 = q->getText().c_str(); aux_mat->SetdiffuseColor(StrToFloat(auxiliar1),StrToFloat(auxiliar2), StrToFloat(auxiliar3),StrToFloat(auxiliar4)); } TK_specularColor g: FLOTANTE { auxiliar1 = g->getText().c_str(); } h: FLOTANTE { auxiliar2 = h->getText().c_str(); } i: FLOTANTE { auxiliar3 = i->getText().c_str(); } r: FLOTANTE { auxiliar4 = r->getText().c_str(); aux_mat->SetespecularColor(StrToFloat(auxiliar1),StrToFloat(auxiliar2),StrToFloat(auxiliar3),StrToFloat(auxiliar4)); } TK_emissiveColor j: FLOTANTE { auxiliar1 = j->getText().c_str(); } k: FLOTANTE { auxiliar2 = k->getText().c_str(); } l: FLOTANTE { auxiliar3 = l->getText().c_str(); } s: FLOTANTE { auxiliar4 = s->getText().c_str(); aux_mat->SetemissiveColor(StrToFloat(auxiliar1),StrToFloat(auxiliar2), StrToFloat(auxiliar3),StrToFloat(auxiliar4)); } TK_shininess m: FLOTANTE { auxiliar1 = m->getText().c_str(); aux_mat->Setshininess(StrToFloat(auxiliar1)); } (TK_Texture u: ID { auxiliar1 = u->getText().c_str(); aux_mat->SetpathTexture(auxiliar1); })? CURLYR ; transform: { String auxiliar; } TK_Transform { aux_transf = new Transform(); band_transf = 1; } a: ID { auxiliar = a->getText().c_str(); aux_transf->Setname(auxiliar); }

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    117

    CURLYL (translate)? (rotate)? (scalefactor)? CURLYR ; rotate: { String auxiliar1, auxiliar2,auxiliar3; } TK_rotation b: FLOTANTE { auxiliar1 = b->getText().c_str(); } c: FLOTANTE { auxiliar2 = c->getText().c_str(); } d: FLOTANTE { auxiliar3 = d->getText().c_str(); aux_transf->Setrotation(StrToFloat(auxiliar1),StrToFloat(auxiliar2), StrToFloat(auxiliar3)); } ; translate: { String auxiliar1,auxiliar2,auxiliar3; } TK_translation f: FLOTANTE { auxiliar1 = f->getText().c_str(); } g: FLOTANTE { auxiliar2 = g->getText().c_str(); } h: FLOTANTE { auxiliar3 = h->getText().c_str(); aux_transf->Settranslation(StrToFloat(auxiliar1),StrToFloat(auxiliar2),StrToFloat(auxiliar3)); } ; scalefactor:TK_scale { String auxiliar1,auxiliar2,auxiliar3; } i: FLOTANTE { auxiliar1 = i->getText().c_str(); } j: FLOTANTE { auxiliar2 = j->getText().c_str(); } k: FLOTANTE { auxiliar3 = k->getText().c_str(); aux_transf->SetscaleFactor(StrToFloat(auxiliar1),StrToFloat(auxiliar2),StrToFloat(auxiliar3)); } ; primitiva: ( point| line | triangle | cone | cylinder | sphere | solidbox | soliddodecahedron | solidicosahedron | solidoctahedron| solidthetrahedron | solidtorus| wirebox| wirecone| wirecylinder| wiredodecahedron | wireicosahedron| wireoctahedron| wirethetrahedron| wiretorus| wiresphere ) ; point : { GLfloat auxx=0,auxy=0,auxz=0,auxi; String auxiliar,auxiliar1,auxiliar2,auxiliar3; } TK_Points { vobje->CreatePoints(); } g: ID { auxiliar = g->getText().c_str(); vobje->nuevopunto->Points::Setname(auxiliar); if ( band_mat != 1 ) { aux_mat = new Material(); } vobje->nuevopunto->Material::Setname(aux_mat->Getname()); vobje->nuevopunto->SetambientColor(aux_mat->GetambientColor(0), aux_mat->GetambientColor(1),aux_mat->GetambientColor(2), aux_mat->GetambientColor(3)); vobje->nuevopunto->SetdiffuseColor(aux_mat->GetdiffuseColor(0),

    aux_mat->GetdiffuseColor(1),aux_mat->GetdiffuseColor(2), aux_mat->GetdiffuseColor(3)); vobje->nuevopunto->SetespecularColor(aux_mat->GetespecularColor(0), aux_mat->GetespecularColor(1),aux_mat->GetespecularColor(2), aux_mat->GetespecularColor(3)); vobje->nuevopunto->SetemissiveColor(aux_mat->GetemissiveColor(0), aux_mat->GetemissiveColor(1),aux_mat->GetemissiveColor(2), aux_mat->GetemissiveColor(3)); vobje->nuevopunto->Setshininess(aux_mat->Getshininess()); vobje->nuevopunto->Settransparency(aux_mat->Gettransparency()); vobje->nuevopunto->SetpathTexture(aux_mat->GetpathTexture()); if ( band_transf != 1 ) { aux_transf = new Transform(); } vobje->nuevopunto->Transform::Setname(aux_transf->Getname()); vobje->nuevopunto->Setrotation(aux_transf->Getrotation(0), aux_transf->Getrotation(1),aux_transf->Getrotation(2)); vobje->nuevopunto->Settranslation(aux_transf->Gettranslation(0), aux_transf->Gettranslation(1),aux_transf->Gettranslation(2)); vobje->nuevopunto->SetscaleFactor(aux_transf->GetscaleFactor(0), aux_transf->GetscaleFactor(1),aux_transf->GetscaleFactor(2)); } CURLYL (sentencia)* ( a: FLOTANTE { auxiliar1 = a->getText().c_str(); } b: FLOTANTE { auxiliar2 = b->getText().c_str(); } c: FLOTANTE { auxiliar3 = c->getText().c_str(); auxx = StrToFloat(auxiliar1); auxy = StrToFloat(auxiliar2); auxz = StrToFloat(auxiliar3); vobje->nuevopunto->Setpoints(auxx,auxy,auxz); } )+ CURLYR { vobje->SavePointsList(); } ; line options { defaultErrorHandler = true; } : { int auxi; String auxiliar; String auxiliar1; String auxiliar2; String auxiliar3; } TK_Line { vobje->CreateLine(); if ( band_mat != 1 ) { aux_mat = new Material(); } vobje->nuevalinea->Material::Setname(aux_mat->Getname()); vobje->nuevalinea->SetambientColor(aux_mat->GetambientColor(0),aux_mat->GetambientColor(1),aux_mat->GetambientColor(2),aux_mat->GetambientColor(3)); vobje->nuevalinea->SetdiffuseColor(aux_mat->GetdiffuseColor(0),aux_mat->GetdiffuseColor(1),aux_mat->GetdiffuseColor(2),aux_mat->GetdiffuseColor(3)); vobje->nuevalinea->SetespecularColor(aux_mat->GetespecularColor(0),aux_mat->GetespecularColor(1),aux_mat->GetespecularColor(2),aux_mat->GetespecularColor(3)); vobje->nuevalinea->SetemissiveColor(aux_mat->GetemissiveColor(0),aux_mat->GetemissiveColor(1),aux_mat->GetemissiveColor(2),aux_mat->GetemissiveColor(3)); vobje->nuevalinea->Setshininess(aux_mat->Getshininess()); vobje->nuevalinea->Settransparency(aux_mat->Gettransparency()); vobje->nuevalinea->SetpathTexture(aux_mat->GetpathTexture()); if ( band_transf != 1 ) { aux_transf = new Transform(); } vobje->nuevalinea->Transform::Setname(aux_transf->Getname()); vobje->nuevalinea->Setrotation(aux_transf->Getrotation(0),aux_transf->Getrotation(1),aux_transf->Getrotation(2)); vobje->nuevalinea->Settranslation(aux_transf->Gettranslation(0),aux_transf->Gettranslation(1),aux_transf->Gettranslation(2)); vobje->nuevalinea->SetscaleFactor(aux_transf->GetscaleFactor(0),aux_transf->GetscaleFactor(1),aux_transf->GetscaleFactor(2)); }

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    118

    g: ID { auxiliar = g->getText().c_str(); vobje->nuevalinea->Line::Setname(auxiliar); } CURLYL (sentencia)* a:FLOTANTE { auxiliar1 = a->getText().c_str(); } b:FLOTANTE { auxiliar2 = b->getText().c_str(); } c:FLOTANTE { auxiliar3 = c->getText().c_str(); vobje->nuevalinea->Setpoint1(StrToFloat(auxiliar1),StrToFloat(auxiliar2),StrToFloat(auxiliar3)); } d:FLOTANTE { auxiliar1 = d->getText().c_str(); } e:FLOTANTE { auxiliar2 = e->getText().c_str(); } f:FLOTANTE { auxiliar3 = f->getText().c_str(); vobje->nuevalinea->Setpoint2(StrToFloat(auxiliar1),StrToFloat(auxiliar2),StrToFloat(auxiliar3)); } CURLYR { vobje->SaveLineList(); } ; triangle: { int auxi; String auxiliar,auxiliar1,auxiliar2,auxiliar3,auxiliar4,auxiliar5,auxiliar6,auxiliar7,auxiliar8,auxiliar9; } TK_Triangle { vobje->CreateTriangle(); if ( band_mat != 1 ) { aux_mat = new Material(); } vobje->nuevotriangulo->Material::Setname(aux_mat->Getname()); vobje->nuevotriangulo->SetambientColor(aux_mat->GetambientColor(0),aux_mat->GetambientColor(1),aux_mat->GetambientColor(2),aux_mat->GetambientColor(3)); vobje->nuevotriangulo->SetdiffuseColor(aux_mat->GetdiffuseColor(0),aux_mat->GetdiffuseColor(1),aux_mat->GetdiffuseColor(2),aux_mat->GetdiffuseColor(3)); vobje->nuevotriangulo->SetespecularColor(aux_mat->GetespecularColor(0),aux_mat->GetespecularColor(1),aux_mat->GetespecularColor(2),aux_mat->GetespecularColor(3)); vobje->nuevotriangulo->SetemissiveColor(aux_mat->GetemissiveColor(0),aux_mat->GetemissiveColor(1),aux_mat->GetemissiveColor(2),aux_mat->GetemissiveColor(3)); vobje->nuevotriangulo->Setshininess(aux_mat->Getshininess()); vobje->nuevotriangulo->Settransparency(aux_mat->Gettransparency()); vobje->nuevotriangulo->SetpathTexture(aux_mat->GetpathTexture()); if ( band_transf != 1 ) { aux_transf = new Transform(); } vobje->nuevotriangulo->Transform::Setname(aux_transf->Getname()); vobje->nuevotriangulo->Setrotation(aux_transf->Getrotation(0),aux_transf->Getrotation(1),aux_transf->Getrotation(2)); vobje->nuevotriangulo->Settranslation(aux_transf->Gettranslation(0),aux_transf->Gettranslation(1),aux_transf->Gettranslation(2)); vobje->nuevotriangulo->SetscaleFactor(aux_transf->GetscaleFactor(0),aux_transf->GetscaleFactor(1),aux_transf->GetscaleFactor(2)); } j: ID { auxiliar = j->getText().c_str(); vobje->nuevotriangulo->Triangle::Setname(auxiliar); } CURLYL (sentencia)* a: FLOTANTE { auxiliar1 = a->getText().c_str(); } b: FLOTANTE { auxiliar2 = b->getText().c_str(); } c: FLOTANTE

    { auxiliar3 = c->getText().c_str(); } d: FLOTANTE { auxiliar4 = d->getText().c_str(); } e: FLOTANTE { auxiliar5 = e->getText().c_str(); } f: FLOTANTE { auxiliar6 = f->getText().c_str(); vobje->nuevotriangulo->Setlinea1(StrToFloat(auxiliar1),StrToFloat(auxiliar2),StrToFloat(auxiliar3),StrToFloat(auxiliar4),StrToFloat(auxiliar5),StrToFloat(auxiliar6)); } g: FLOTANTE { auxiliar7 = g->getText().c_str(); } h: FLOTANTE { auxiliar8 = h->getText().c_str(); } i: FLOTANTE { auxiliar9 = i->getText().c_str(); vobje->nuevotriangulo->Setlinea2(StrToFloat(auxiliar4),StrToFloat(auxiliar5),StrToFloat(auxiliar6),StrToFloat(auxiliar7),StrToFloat(auxiliar8),StrToFloat(auxiliar9)); vobje->nuevotriangulo->Setlinea3(StrToFloat(auxiliar1),StrToFloat(auxiliar2),StrToFloat(auxiliar3),StrToFloat(auxiliar7),StrToFloat(auxiliar8),StrToFloat(auxiliar9)); } CURLYR { vobje->SaveTriangleList(); } ; cone: { String auxiliar; int auxi;} TK_Cone { vobje->CreateCone(); if ( band_mat != 1 ) { aux_mat = new Material(); } vobje->nuevocil->Material::Setname(aux_mat->Getname()); vobje->nuevocil->SetambientColor(aux_mat->GetambientColor(0),aux_mat->GetambientColor(1),aux_mat->GetambientColor(2),aux_mat->GetambientColor(3)); vobje->nuevocil->SetdiffuseColor(aux_mat->GetdiffuseColor(0),aux_mat->GetdiffuseColor(1),aux_mat->GetdiffuseColor(2),aux_mat->GetdiffuseColor(3)); vobje->nuevocil->SetespecularColor(aux_mat->GetespecularColor(0),aux_mat->GetespecularColor(1),aux_mat->GetespecularColor(2),aux_mat->GetespecularColor(3)); vobje->nuevocil->SetemissiveColor(aux_mat->GetemissiveColor(0),aux_mat->GetemissiveColor(1),aux_mat->GetemissiveColor(2),aux_mat->GetemissiveColor(3)); vobje->nuevocil->Setshininess(aux_mat->Getshininess()); vobje->nuevocil->Settransparency(aux_mat->Gettransparency()); vobje->nuevocil->SetpathTexture(aux_mat->GetpathTexture()); if ( band_transf != 1 ) { aux_transf = new Transform(); } vobje->nuevocil->Transform::Setname(aux_transf->Getname()); vobje->nuevocil->Setrotation(aux_transf->Getrotation(0),aux_transf->Getrotation(1),aux_transf->Getrotation(2)); vobje->nuevocil->Settranslation(aux_transf->Gettranslation(0),aux_transf->Gettranslation(1),aux_transf->Gettranslation(2)); vobje->nuevocil->SetscaleFactor(aux_transf->GetscaleFactor(0),aux_transf->GetscaleFactor(1),aux_transf->GetscaleFactor(2)); } c: ID { auxiliar = c->getText().c_str(); vobje->nuevocil->ABaseCyl::Setname(auxiliar); } CURLYL (sentencia)* TK_bottomRadius a:FLOTANTE { auxiliar = a->getText().c_str(); vobje->nuevocil->Setradius(StrToFloat(auxiliar));

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    119

    } TK_height b:FLOTANTE { auxiliar = b->getText().c_str(); vobje->nuevocil->Setheight(StrToFloat(auxiliar)); } CURLYR { vobje->SaveConeList(); } ; cylinder: { int auxi; String auxiliar; } TK_Cylinder { vobje->CreateCylinder(); if ( band_mat != 1 ) { aux_mat = new Material(); } vobje->nuevocil->Material::Setname(aux_mat->Getname()); vobje->nuevocil->SetambientColor(aux_mat->GetambientColor(0),aux_mat->GetambientColor(1),aux_mat->GetambientColor(2),aux_mat->GetambientColor(3)); vobje->nuevocil->SetdiffuseColor(aux_mat->GetdiffuseColor(0),aux_mat->GetdiffuseColor(1),aux_mat->GetdiffuseColor(2),aux_mat->GetdiffuseColor(3)); vobje->nuevocil->SetespecularColor(aux_mat->GetespecularColor(0),aux_mat->GetespecularColor(1),aux_mat->GetespecularColor(2),aux_mat->GetespecularColor(3)); vobje->nuevocil->SetemissiveColor(aux_mat->GetemissiveColor(0),aux_mat->GetemissiveColor(1),aux_mat->GetemissiveColor(2),aux_mat->GetemissiveColor(3)); vobje->nuevocil->Setshininess(aux_mat->Getshininess()); vobje->nuevocil->Settransparency(aux_mat->Gettransparency()); vobje->nuevocil->SetpathTexture(aux_mat->GetpathTexture()); if ( band_transf != 1 ) { aux_transf = new Transform(); } vobje->nuevocil->Transform::Setname(aux_transf->Getname()); vobje->nuevocil->Setrotation(aux_transf->Getrotation(0),aux_transf->Getrotation(1),aux_transf->Getrotation(2)); vobje->nuevocil->Settranslation(aux_transf->Gettranslation(0),aux_transf->Gettranslation(1),aux_transf->Gettranslation(2)); vobje->nuevocil->SetscaleFactor(aux_transf->GetscaleFactor(0),aux_transf->GetscaleFactor(1),aux_transf->GetscaleFactor(2)); } c: ID { auxiliar = c->getText().c_str(); vobje->nuevocil->ABaseCyl::Setname(auxiliar); } CURLYL (sentencia)* TK_radius a: FLOTANTE { auxiliar = a->getText().c_str(); vobje->nuevocil->Setradius(StrToFloat(auxiliar)); } TK_height b :FLOTANTE { auxiliar = b->getText().c_str(); vobje->nuevocil->Setheight(StrToFloat(auxiliar)); } CURLYR { vobje->SaveCylinderList(); } ; sphere: { int auxi; String auxiliar; } TK_Sphere { vobje->CreateSphere(); if ( band_mat != 1 ) { aux_mat = new Material(); } vobje->nuevopoli->Material::Setname(aux_mat->Getname()); vobje->nuevopoli->SetambientColor(aux_mat->GetambientColor(0),aux_mat->GetambientColor(1),aux_mat->GetambientColor(2),aux_mat->GetambientColor(3)); vobje->nuevopoli->SetdiffuseColor(aux_mat->GetdiffuseColor(0),aux_mat->GetdiffuseColor(1),aux_mat->GetdiffuseColor(2),aux_mat->GetdiffuseColor(3)); vobje->nuevopoli->SetespecularColor(aux_mat->GetespecularColor(0),aux_mat->GetespecularColor(1),aux_mat->GetespecularColor(2),aux_mat->GetespecularColor(3)); vobje->nuevopoli->SetemissiveColor(aux_mat->GetemissiveColor(0),aux_mat->GetemissiveColor(1),aux_mat->GetemissiveColor(2),aux_mat->GetemissiveColor(3)); vobje->nuevopoli->Setshininess(aux_mat->Getshininess()); vobje->nuevopoli->Settransparency(aux_mat->Gettransparency());

    vobje->nuevopoli->SetpathTexture(aux_mat->GetpathTexture()); if ( band_transf != 1 ) { aux_transf = new Transform(); } vobje->nuevopoli->Transform::Setname(aux_transf->Getname()); vobje->nuevopoli->Setrotation(aux_transf->Getrotation(0),aux_transf->Getrotation(1),aux_transf->Getrotation(2)); vobje->nuevopoli->Settranslation(aux_transf->Gettranslation(0),aux_transf->Gettranslation(1),aux_transf->Gettranslation(2)); vobje->nuevopoli->SetscaleFactor(aux_transf->GetscaleFactor(0),aux_transf->GetscaleFactor(1),aux_transf->GetscaleFactor(2)); } c: ID { auxiliar = c->getText().c_str(); vobje->nuevopoli->APolyhedron::Setname(auxiliar); } CURLYL (sentencia)* TK_radius a: FLOTANTE { auxiliar = a->getText().c_str(); vobje->nuevopoli->Setradius(StrToFloat(auxiliar)); } CURLYR { vobje->SaveSphereList(); } ; solidbox: { int auxi; String auxiliar; } TK_SolidBox { vobje->CreateSBox(); if ( band_mat != 1 ) { aux_mat = new Material(); } vobje->nuevocuad->Material::Setname(aux_mat->Getname()); vobje->nuevocuad->SetambientColor(aux_mat->GetambientColor(0),aux_mat->GetambientColor(1),aux_mat->GetambientColor(2),aux_mat->GetambientColor(3)); vobje->nuevocuad->SetdiffuseColor(aux_mat->GetdiffuseColor(0),aux_mat->GetdiffuseColor(1),aux_mat->GetdiffuseColor(2),aux_mat->GetdiffuseColor(3)); vobje->nuevocuad->SetespecularColor(aux_mat->GetespecularColor(0),aux_mat->GetespecularColor(1),aux_mat->GetespecularColor(2),aux_mat->GetespecularColor(3)); vobje->nuevocuad->SetemissiveColor(aux_mat->GetemissiveColor(0),aux_mat->GetemissiveColor(1),aux_mat->GetemissiveColor(2),aux_mat->GetemissiveColor(3)); vobje->nuevocuad->Setshininess(aux_mat->Getshininess()); vobje->nuevocuad->Settransparency(aux_mat->Gettransparency()); vobje->nuevocuad->SetpathTexture(aux_mat->GetpathTexture()); if ( band_transf != 1 ) { aux_transf = new Transform(); } vobje->nuevocuad->Material::Setname(aux_transf->Getname()); vobje->nuevocuad->Setrotation(aux_transf->Getrotation(0),aux_transf->Getrotation(1),aux_transf->Getrotation(2)); vobje->nuevocuad->Settranslation(aux_transf->Gettranslation(0),aux_transf->Gettranslation(1),aux_transf->Gettranslation(2)); vobje->nuevocuad->SetscaleFactor(aux_transf->GetscaleFactor(0),aux_transf->GetscaleFactor(1),aux_transf->GetscaleFactor(2)); } d: ID { auxiliar = d->getText().c_str(); vobje->nuevocuad->AQuad::Setname(auxiliar); } CURLYL (sentencia)* TK_width a: FLOTANTE { auxiliar = a->getText().c_str(); vobje->nuevocuad->Setwidth(StrToFloat(auxiliar)); } TK_height b: FLOTANTE { auxiliar = b->getText().c_str(); vobje->nuevocuad->Setheight(StrToFloat(auxiliar)); } TK_depth c: FLOTANTE {

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    120

    auxiliar = c->getText().c_str(); vobje->nuevocuad->Setdepth(StrToFloat(auxiliar)); } CURLYR { vobje->SaveSBoxList(); } ; soliddodecahedron: { int auxi; String auxiliar; } TK_SolidDodecahedron { vobje->CreateSDod(); if ( band_mat != 1 ) { aux_mat = new Material(); } vobje->nuevopoli->Material::Setname(aux_mat->Getname()); vobje->nuevopoli->SetambientColor(aux_mat->GetambientColor(0),aux_mat->GetambientColor(1),aux_mat->GetambientColor(2),aux_mat->GetambientColor(3)); vobje->nuevopoli->SetdiffuseColor(aux_mat->GetdiffuseColor(0),aux_mat->GetdiffuseColor(1),aux_mat->GetdiffuseColor(2),aux_mat->GetdiffuseColor(3)); vobje->nuevopoli->SetespecularColor(aux_mat->GetespecularColor(0),aux_mat->GetespecularColor(1),aux_mat->GetespecularColor(2),aux_mat->GetespecularColor(3)); vobje->nuevopoli->SetemissiveColor(aux_mat->GetemissiveColor(0),aux_mat->GetemissiveColor(1),aux_mat->GetemissiveColor(2),aux_mat->GetemissiveColor(3)); vobje->nuevopoli->Setshininess(aux_mat->Getshininess()); vobje->nuevopoli->Settransparency(aux_mat->Gettransparency()); vobje->nuevopoli->SetpathTexture(aux_mat->GetpathTexture()); if ( band_transf != 1 ) { aux_transf = new Transform(); } vobje->nuevopoli->Transform::Setname(aux_transf->Getname()); vobje->nuevopoli->Setrotation(aux_transf->Getrotation(0),aux_transf->Getrotation(1),aux_transf->Getrotation(2)); vobje->nuevopoli->Settranslation(aux_transf->Gettranslation(0),aux_transf->Gettranslation(1),aux_transf->Gettranslation(2)); vobje->nuevopoli->SetscaleFactor(aux_transf->GetscaleFactor(0),aux_transf->GetscaleFactor(1),aux_transf->GetscaleFactor(2)); } c: ID { auxiliar = c->getText().c_str(); vobje->nuevopoli->APolyhedron::Setname(auxiliar); } CURLYL (sentencia)* TK_radius a: FLOTANTE { auxiliar = a->getText().c_str(); vobje->nuevopoli->Setradius(StrToFloat(auxiliar)); } CURLYR { vobje->SaveSDodList(); } ; solidicosahedron: { int auxi; String auxiliar; } TK_SolidIcosahedron { vobje->CreateSIco(); if ( band_mat != 1 ) { aux_mat = new Material(); } vobje->nuevopoli->Material::Setname(aux_mat->Getname()); vobje->nuevopoli->SetambientColor(aux_mat->GetambientColor(0),aux_mat->GetambientColor(1),aux_mat->GetambientColor(2),aux_mat->GetambientColor(3)); vobje->nuevopoli->SetdiffuseColor(aux_mat->GetdiffuseColor(0),aux_mat->GetdiffuseColor(1),aux_mat->GetdiffuseColor(2),aux_mat->GetdiffuseColor(3)); vobje->nuevopoli->SetespecularColor(aux_mat->GetespecularColor(0),aux_mat->GetespecularColor(1),aux_mat->GetespecularColor(2),aux_mat->GetespecularColor(3)); vobje->nuevopoli->SetemissiveColor(aux_mat->GetemissiveColor(0),aux_mat->GetemissiveColor(1),aux_mat->GetemissiveColor(2),aux_mat->GetemissiveColor(3)); vobje->nuevopoli->Setshininess(aux_mat->Getshininess()); vobje->nuevopoli->Settransparency(aux_mat->Gettransparency()); vobje->nuevopoli->SetpathTexture(aux_mat->GetpathTexture()); if ( band_transf != 1 ) { aux_transf = new Transform(); } vobje->nuevopoli->Transform::Setname(aux_transf->Getname()); vobje->nuevopoli->Setrotation(aux_transf->Getrotation(0),aux_transf->Getrotation(1),aux_transf->Getrotation(2)); vobje->nuevopoli->Settranslation(aux_transf->Gettranslation(0),aux_transf->Gettranslation(1),aux_transf->Gettranslation(2));

    vobje->nuevopoli->SetscaleFactor(aux_transf->GetscaleFactor(0),aux_transf->GetscaleFactor(1),aux_transf->GetscaleFactor(2)); } c: ID { auxiliar = c->getText().c_str(); vobje->nuevopoli->APolyhedron::Setname(auxiliar); } CURLYL (sentencia)* TK_radius a: FLOTANTE { auxiliar = a->getText().c_str(); vobje->nuevopoli->Setradius(StrToFloat(auxiliar)); } CURLYR { vobje->SaveSIcoList(); } ; solidoctahedron: { int auxi; String auxiliar; } TK_SolidOctahedron { vobje->CreateSOct(); if ( band_mat != 1 ) { aux_mat = new Material(); } vobje->nuevopoli->Material::Setname(aux_mat->Getname()); vobje->nuevopoli->SetambientColor(aux_mat->GetambientColor(0),aux_mat->GetambientColor(1),aux_mat->GetambientColor(2),aux_mat->GetambientColor(3)); vobje->nuevopoli->SetdiffuseColor(aux_mat->GetdiffuseColor(0),aux_mat->GetdiffuseColor(1),aux_mat->GetdiffuseColor(2),aux_mat->GetdiffuseColor(3)); vobje->nuevopoli->SetespecularColor(aux_mat->GetespecularColor(0),aux_mat->GetespecularColor(1),aux_mat->GetespecularColor(2),aux_mat->GetespecularColor(3)); vobje->nuevopoli->SetemissiveColor(aux_mat->GetemissiveColor(0),aux_mat->GetemissiveColor(1),aux_mat->GetemissiveColor(2),aux_mat->GetemissiveColor(3)); vobje->nuevopoli->Setshininess(aux_mat->Getshininess()); vobje->nuevopoli->Settransparency(aux_mat->Gettransparency()); vobje->nuevopoli->SetpathTexture(aux_mat->GetpathTexture()); if ( band_transf != 1 ) { aux_transf = new Transform(); } vobje->nuevopoli->Transform::Setname(aux_transf->Getname()); vobje->nuevopoli->Setrotation(aux_transf->Getrotation(0),aux_transf->Getrotation(1),aux_transf->Getrotation(2)); vobje->nuevopoli->Settranslation(aux_transf->Gettranslation(0),aux_transf->Gettranslation(1),aux_transf->Gettranslation(2)); vobje->nuevopoli->SetscaleFactor(aux_transf->GetscaleFactor(0),aux_transf->GetscaleFactor(1),aux_transf->GetscaleFactor(2)); } c: ID { auxiliar = c->getText().c_str(); vobje->nuevopoli->APolyhedron::Setname(auxiliar); } CURLYL (sentencia)* TK_radius a: FLOTANTE { auxiliar = a->getText().c_str(); vobje->nuevopoli->Setradius(StrToFloat(auxiliar)); } CURLYR { vobje->SaveSOctList(); } ; solidthetrahedron: { int auxi; String auxiliar; } TK_SolidThetrahedron { vobje->CreateSThe(); if ( band_mat != 1 ) { aux_mat = new Material(); } vobje->nuevopoli->Material::Setname(aux_mat->Getname()); vobje->nuevopoli->SetambientColor(aux_mat->GetambientColor(0),aux_mat->GetambientColor(1),aux_mat->GetambientColor(2),aux_mat->GetambientColor(3)); vobje->nuevopoli->SetdiffuseColor(aux_mat->GetdiffuseColor(0),aux_mat->GetdiffuseColor(1),aux_mat->GetdiffuseColor(2),aux_mat->GetdiffuseColor(3));

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    121

    vobje->nuevopoli->SetespecularColor(aux_mat->GetespecularColor(0),aux_mat->GetespecularColor(1),aux_mat->GetespecularColor(2),aux_mat->GetespecularColor(3)); vobje->nuevopoli->SetemissiveColor(aux_mat->GetemissiveColor(0),aux_mat->GetemissiveColor(1),aux_mat->GetemissiveColor(2),aux_mat->GetemissiveColor(3)); vobje->nuevopoli->Setshininess(aux_mat->Getshininess()); vobje->nuevopoli->Settransparency(aux_mat->Gettransparency()); vobje->nuevopoli->SetpathTexture(aux_mat->GetpathTexture()); if ( band_transf != 1 ) { aux_transf = new Transform(); } vobje->nuevopoli->Transform::Setname(aux_transf->Getname()); vobje->nuevopoli->Setrotation(aux_transf->Getrotation(0),aux_transf->Getrotation(1),aux_transf->Getrotation(2)); vobje->nuevopoli->Settranslation(aux_transf->Gettranslation(0),aux_transf->Gettranslation(1),aux_transf->Gettranslation(2)); vobje->nuevopoli->SetscaleFactor(aux_transf->GetscaleFactor(0),aux_transf->GetscaleFactor(1),aux_transf->GetscaleFactor(2)); } c: ID { auxiliar = c->getText().c_str(); vobje->nuevopoli->APolyhedron::Setname(auxiliar); } CURLYL (sentencia)* TK_radius a: FLOTANTE { auxiliar = a->getText().c_str(); vobje->nuevopoli->Setradius(StrToFloat(auxiliar)); } CURLYR { vobje->SaveSTheList(); } ; solidtorus: { int auxi; String auxiliar; } TK_SolidTorus { vobje->CreateSTorus(); if ( band_mat != 1 ) { aux_mat = new Material(); } vobje->nuevotorus->Material::Setname(aux_mat->Getname()); vobje->nuevotorus->SetambientColor(aux_mat->GetambientColor(0),aux_mat->GetambientColor(1),aux_mat->GetambientColor(2),aux_mat->GetambientColor(3)); vobje->nuevotorus->SetdiffuseColor(aux_mat->GetdiffuseColor(0),aux_mat->GetdiffuseColor(1),aux_mat->GetdiffuseColor(2),aux_mat->GetdiffuseColor(3)); vobje->nuevotorus->SetespecularColor(aux_mat->GetespecularColor(0),aux_mat->GetespecularColor(1),aux_mat->GetespecularColor(2),aux_mat->GetespecularColor(3)); vobje->nuevotorus->SetemissiveColor(aux_mat->GetemissiveColor(0),aux_mat->GetemissiveColor(1),aux_mat->GetemissiveColor(2),aux_mat->GetemissiveColor(3)); vobje->nuevotorus->Setshininess(aux_mat->Getshininess()); vobje->nuevotorus->Settransparency(aux_mat->Gettransparency()); vobje->nuevotorus->SetpathTexture(aux_mat->GetpathTexture()); if ( band_transf != 1 ) { aux_transf = new Transform(); } vobje->nuevotorus->Transform::Setname(aux_transf->Getname()); vobje->nuevotorus->Setrotation(aux_transf->Getrotation(0),aux_transf->Getrotation(1),aux_transf->Getrotation(2)); vobje->nuevotorus->Settranslation(aux_transf->Gettranslation(0),aux_transf->Gettranslation(1),aux_transf->Gettranslation(2)); vobje->nuevotorus->SetscaleFactor(aux_transf->GetscaleFactor(0),aux_transf->GetscaleFactor(1),aux_transf->GetscaleFactor(2)); } c: ID { auxiliar = c->getText().c_str(); vobje->nuevotorus->ATorus::Setname(auxiliar); } CURLYL (sentencia)* TK_interiorRadius a: FLOTANTE { auxiliar = a->getText().c_str(); vobje->nuevotorus->SetinteriorRadius(StrToFloat(auxiliar)); } TK_exteriorRadius b: FLOTANTE { auxiliar = b->getText().c_str(); vobje->nuevotorus->SetexteriorRadius(StrToFloat(auxiliar)); }

    CURLYR { vobje->SaveSTorusList(); } ; wirebox: { String auxiliar; } TK_WireBox { vobje->CreateWBox(); if ( band_mat != 1 ) { aux_mat = new Material(); } vobje->nuevocuad->Material::Setname(aux_mat->Getname()); vobje->nuevocuad->SetambientColor(aux_mat->GetambientColor(0),aux_mat->GetambientColor(1),aux_mat->GetambientColor(2),aux_mat->GetambientColor(3)); vobje->nuevocuad->SetdiffuseColor(aux_mat->GetdiffuseColor(0),aux_mat->GetdiffuseColor(1),aux_mat->GetdiffuseColor(2),aux_mat->GetdiffuseColor(3)); vobje->nuevocuad->SetespecularColor(aux_mat->GetespecularColor(0),aux_mat->GetespecularColor(1),aux_mat->GetespecularColor(2),aux_mat->GetespecularColor(3)); vobje->nuevocuad->SetemissiveColor(aux_mat->GetemissiveColor(0),aux_mat->GetemissiveColor(1),aux_mat->GetemissiveColor(2),aux_mat->GetemissiveColor(3)); vobje->nuevocuad->Setshininess(aux_mat->Getshininess()); vobje->nuevocuad->Settransparency(aux_mat->Gettransparency()); vobje->nuevocuad->SetpathTexture(aux_mat->GetpathTexture()); if ( band_transf != 1 ) { aux_transf = new Transform(); } vobje->nuevocuad->Transform::Setname(aux_transf->Getname()); vobje->nuevocuad->Setrotation(aux_transf->Getrotation(0),aux_transf->Getrotation(1),aux_transf->Getrotation(2)); vobje->nuevocuad->Settranslation(aux_transf->Gettranslation(0),aux_transf->Gettranslation(1),aux_transf->Gettranslation(2)); vobje->nuevocuad->SetscaleFactor(aux_transf->GetscaleFactor(0),aux_transf->GetscaleFactor(1),aux_transf->GetscaleFactor(2)); } d: ID { auxiliar = d->getText().c_str(); vobje->nuevocuad->AQuad::Setname(auxiliar); } CURLYL (sentencia)* TK_width a: FLOTANTE { auxiliar = a->getText().c_str(); vobje->nuevocuad->Setwidth(StrToFloat(auxiliar)); } TK_height b: FLOTANTE { auxiliar = b->getText().c_str(); vobje->nuevocuad->Setheight(StrToFloat(auxiliar)); } TK_depth c: FLOTANTE { auxiliar = c->getText().c_str(); vobje->nuevocuad->Setdepth(StrToFloat(auxiliar)); } CURLYR { vobje->SaveWBoxList(); } ; wirecone: { String auxiliar; } TK_WireCone { vobje->CreateWCone(); if ( band_mat != 1 ) { aux_mat = new Material(); } vobje->nuevocil->Material::Setname(aux_mat->Getname()); vobje->nuevocil->SetambientColor(aux_mat->GetambientColor(0),aux_mat->GetambientColor(1),aux_mat->GetambientColor(2),aux_mat->GetambientColor(3)); vobje->nuevocil->SetdiffuseColor(aux_mat->GetdiffuseColor(0),aux_mat->GetdiffuseColor(1),aux_mat->GetdiffuseColor(2),aux_mat->GetdiffuseColor(3)); vobje->nuevocil->SetespecularColor(aux_mat->GetespecularColor(0),aux_mat->GetespecularColor(1),aux_mat->GetespecularColor(2),aux_mat->GetespecularColor(3)); vobje->nuevocil->SetemissiveColor(aux_mat->GetemissiveColor(0),aux_mat->GetemissiveColor(1),aux_mat->GetemissiveColor(2),aux_mat->GetemissiveColor(3)); vobje->nuevocil->Setshininess(aux_mat->Getshininess());

  • Entorno de graficación y generación de modelos 2D y 3D para aplicaciones de Visión Artificial Anexos

    122

    vobje->nuevocil-