Aplicaciones:
- ParaView: herramienta para visualización en 3D. Util para cortar mallas (y ver su interior), para conversión de datos entre VTK-STL-PLY, práctico para obtener rápidamente la iso-surface de una imagen binaria, sencillo al momento de medir distancias o poner nuevos puntos.
- MeshLab: herramienta para el tratamiento de mallas. Util para la conversión de datos PLY-STL, práctico para lanzar algoritmos sobre mallas e.g. smooth, decimation, invertir normales, etc. Tiene una interfaz simple para identificar y llenar huecos en las mallas. Puede utilizarse para el análisis de las propiedades de las mallas : self-intersect faces, manifold edges, duplicated vertices, etc.
- MeVisLab: herramienta de prototipado rápido para visualización y tratamiento de imágenes, especialmente enfocado en imágenes médicas. Util para toda prueba rápida de algoritmos de procesamiento de imágenes. Arquitectura orientada a eventos con respuesta inmediata ante los cambios en los parámetros de los filtros.
- FreeCAD: herramienta CAD open-source para el modelado en 3D. No tengo mucha experiencia en su utilización, pero en este proyecto es muy práctico para la conversión de una malla de triángulos a un formato de solidos (IGS/IGES). También tiene una interfaz de análisis de las propiedades de las mallas que permite modificar y reparar problemas en el mallado.
- Blender: herramienta para el modelado libre de objetos en 3D. Util para pasar filtros sobre las mallas, e.g. decimation, smooth, binary operations, entre otros. Util para la edición por puntos, aristas o caras de una superficie. Se puede utilizar para leer y convertir archivos STL y PLY.
- VTK: lenguaje open-source para visualización de datos. En este caso utilizo el código comentado previamente en este blog para la rasterización de una malla en una imagen binaria. El código lo ejecuto en Linux con la versión de VTK 5.6
- vtkSurface-DiscreteRemeshing: código bajo licencia CeCILL B desarrollado en el laboratorio CREATIS por Sebastien Valette. Permite una regeneración correcta de una superficie con una cantidad definida de elementos. Conserva la topología de la malla con las mejores propiedades de la misma. Para más información ver el artículo:
" Approximated Centroidal Voronoi Diagrams for Uniform Polygonal Mesh Coarsening", Valette & Chassery, Eurographics 2004
Problema:
Se tiene una malla de triángulos en formato STL generada y editada por un tercero (que tiene problemas en su mallado según los análisis realizados en MeshLab y FreeCAD) que se quiere llevar a un programa de simulación de fluidos como ANSYS. Este programa normalmente recibe las mallas generadas en aplicaciones CAD, simulando la creación de un objeto sólido. Es por esto que se requiere pasar de una malla de triángulos a un mallado de un sólido como lo realiza una aplicación CAD.
Hay que indicar que casi todas las herramientas CAD son considerablemente costosas y con restricciones en sus licencias. Como prueba en esta solución se utilizan herramientas libres u open-source para obtener el resultado. Sin embargo, hay que admitir que muchos problemas aparecen en el camino. Por ejemplo:
- La malla tiene problemas desde el inicio. Las herramientas detectan dichos problemas pero el resultado tampoco es bueno: genera más huecos en las superficies, self-intersected faces, vertices repetidos, …
- La interacción en cada programa es siempre diferente y trabajar en 3D no es del todo sencillo.
- Los programas suelen terminar la ejecución antes de tiempo, aunque dan una idea de el error que los hizo terminar (las aplicaciones cerradas no dicen los errores)
- No todos los programas importan y exportan en los mismos formatos, por eso hay que saltar de uno en otro.
- La construcción de mallas puede ser completamente diferente dependiendo del algoritmo utilizado. Es mejor asegurarse desde el momento de la generación de la malla que realmente corresponde a un resultado correcto para tener un
Solución:
Opcion 1:
1- Pasar la malla de STL en formato VTK con ParaView.
2- Ejecutar el código en VTK de rasterización para generar una imagen binaria: lo que está dentro de la malla en 1 y lo que está por fuera en 0.
3- En algunos casos la imagen generada tiene pequeños problemas (que dependen de las condiciones iniciales de la malla), por ejemplo aparecen huecos al interior del objeto. Para esto utilizo MeVisLab para aplicar un procesamiento rápido sobre la imagen (operaciones de morfología matemática).
4- Ejecuto un pipeline simple en VTK que consiste en leer la imagen, pasar por un filtro suave gaussiano (sigma:0.25), y obtener una primera malla escalonada con vtkMarchingCubes con un isoValue de 128. Luego utilizo el vtkPolyData resultante como entrada al código de vtkSurface de DiscreteRemeshing. Aquí defino la cantidad de objetos suficiente para representar la malla. Guardo el resultado en formato VTK.
5- Abro el archivo VTK en ParaView para convertirlo en PLY (ParaView en algunos casos me ha causado problemas al momento de guardar un polydata directamente en STL).
6- Abro el archivo PLY en MeshLab. Como la malla fue generada con MarchingCubes desde una imagen que tocaba los limites (boundaries) de la imagen, quedan unos huecos en las partes de la malla que tocan la caja englobante. Por esto, utilizo el Edit/Fill Hole de MeshLab con un tipo de llenado Trivial. Guardo el resultado en el mismo PLY.
7- Abro FreeCAD. Activo la vista Architecture. Creo un nuevo documento, importo la malla en formato PLY. Puedo revisar si me interesa las propiedades de la malla en la vista Mesh. Finalmente en el menu Architecture/ Conversion Tools/ Mesh to Form. Luego de unos minutos de procesamiento, seleccionar la forma generada y Exportar como archivo IGS/IGES :-)
Opcion 2:
Se podría hacer lo mismo descrito previamente automatizando algunas partes de conversión de archivos y quizas desarrollando algunos filtros en VTK. Igualmente, se puede evitar el uso de vtkSurface y utilizar Blender para el lisado de la malla. Hice algunos intentos que no me dieron un resultado completamente bueno, pero es probable que funcione de la misma forma.
Ca y est !!! It’s done !! Finalmente se puede llegar a un resultado tan agradable como el que muestro a continuación:
Left: In red, original mesh. In gray the PLY mesh created before the IGS mesh generation. Right: The IGS/IGES mesh
Si existen otras posibles alternativas, no duden en contactarme ! A+!
No hay comentarios.:
Publicar un comentario