Scenegraph/es

FreeCAD es, en esencia, un collage de varias librerias muy potentes, siendo las más importantes openCascade, para la gestión y construcción de la geometría, Coin3d para visualizar esa geometría, y Qt para poner todo esto en una bonita interfaz gráfica de usuario (GUI).

La geometría que aparece en las vistas 3D de FreeCAD son renderizadas por la biblioteca Coin3D. Coin3D es una implementación del estandard OpenInventor. El software OpenCascade también proporciona la misma funcionalidad, pero se decidió, al comenzar el desarrollo de FreeCAD, no utilizar el visor de OpenCascade, sino cambiar al software Coin3D, por tener mejor rendimiento.

OpenInventor es en realidad un lenguaje de descripción de escena 3D. La escena descrita en openInventor es seguidamente renderizada en la pantalla con OpenGL. Coin3d se encarga de hacer esto, por lo que el programador no tiene que lidiar con complejas llamadas a OpenGL, bastará con que le proporcione código OpenInventor válido. La gran ventaja es que openInventor es un estándard muy bien conocido y bien documentado.

Uno de los trabajos mas inportantes que hace FreeCAD hace por ti es, básicamente, traducir la información de geometría OpenCascade al idioma openInventor.

OpenInventor describe una escena 3D en forma de un scenegraph, como la siguiente:

image from Inventor mentor

An openInventor scenegraph describes everything that makes part of a 3D scene, such as geometry, colors, materials, lights, etc, and organizes all that data in a convenient and clear structure. Everything can be grouped into sub-structures, allowing you to organize your scene contents pretty much the way you like. Here is an example of an openInventor file:

Un scenegraph openInventor describe todo lo que hay en el marco de un escenario 3D, como la geometría, colores, materiales, luces, etc, y organiza todos los datos en una estructura cómoda y clara. Todo puede ser agrupados en sub-estructuras, lo que le permite organizar los contenidos de sus escena más o menos en la forma que quiera. He aquí un ejemplo de un archivo openInventor:

#Inventor V2.0 ascii Separator { RotationXYZ { axis Z        angle 0 }     Transform { translation 0 0 0.5 }     Separator { Material { diffuseColor 0.05 0.05 0.05 }        Transform { rotation 1 0 0 1.5708 scaleFactor 0.2 0.5 0.2 }        Cylinder { }     }  }

Como puede ver, la estructura es muy simple. Utilice separadores para organizar los datos en bloques, un poco como lo haría al organizar sus archivos en carpetas. Cada declaración afecta a lo que viene después, por ejemplo los dos primeros puntos de nuestro separador de raíz son una rotación y una traslación, todo ello afectará al siguiente item, que es un separador. En ese separador, se define un material y otra transformación. Nuestro cilindro por lo tanto se verán afectados por las dos transformaciones, la que le fue aplicada directamente, y la que se aplicó al separador que le contiene.

También tenemos muchos otros tipos de elementos para organizar nuestra escena, como los grupos, interruptores o anotaciones. Podemos definir materiales muy complejos para nuestros objetos, con el color, las texturas, los modos de sombreado y transparencia. También podemos definir las luces, cámaras, e incluso movimiento. También es posible integrar pedazos de secuencias de comandos en los archivos de openInventor, para definir comportamientos más complejos.

Si usted está interesado en aprender más sobre openInventor, vaya directamente a su referencia más famosa, Inventor mentor.

En FreeCAD, normalmente, no es necesario interactuar directamente con el scenegraph openInventor. Cada objeto en un documento FreeCAD, ya sea una malla, una forma de pieza o cualquier otra cosa, se convierte automáticamente en código openInventor y se inserta en el scenegraph principales que aparece en una vista 3D. Esa scenegraph se actualiza continuamente cuando hace modificaciones, añade o elimina objetos en el documento. De hecho, cada objeto (en el espacio app) tiene un proveedor de vista (un objeto correspondiente en el espacio del GUI), responsables de la expedición de código openInventor.

Pero poder acceder a la scenegraph directamente tiene muchas ventajas. Por ejemplo, puede cambiar temporalmente la apariencia de un objeto, o podemos agregar objetos a la escena que no tienen existencia real en el documento FreeCAD, como la geometría de la construcción, ayudantes, sugerencias o herramientas gráficas como manipuladores o información en pantalla.

FreeCAD cuenta con varias herramientas para ver o modificar código openInventor. Por ejemplo, el código python siguiente muestra la representación openInventor de un objeto seleccionado:

obj = FreeCAD.ActiveDocument.ActiveObject viewprovider = obj.ViewObject print viewprovider.toString

Pero también tenemos un módulo de python que permite un acceso completo a todo lo controlado por Coin3d. Ese módulo es el scenegraph de FreeCAD. Siga leyendo en Pivy.