VTK con Visual Studio 2017 (C++)

VTK (The Visualization Toolkit) es una excelente biblioteca multiplataforma de código abierto enfocado en el despliegue de datos científicos en 2D y 3D. El core de VTK está desarrollado en C++, pero contiene interfaces para emplear Tcl/Tk, Java, Python, (ActiViz.NET para C#). VTK contiene algoritmos para visualizar valores escalares, vectoriales, tensoriales, texturas, así como un conjunto de widgets, procesamiento en paralelo, o soporte de otras herramientas como Qt o Tk. También implementa algoritmos para el suavizado de mallas geométricas, reducción de polígonos, triangulación de Delaunay, corte de polígonos, entre otros. VTK es desarrollada por Kitware la cual es una empresa líder en investigación y desarrollo en campos como visión por computador, visualización médica.

En este post, veremos cómo ejecutar nuestro primer programa en VTK empleando Visual Studio 2017 bajo un ambiente de Windows en el lenguaje C++. Para ello, primero debemos instalar y configurar VTK. Y luego ejecutar un sencillo código de ejemplo que está alojado en este repositorio de Github.

Configurar y compilar VTK

El primer paso es descargar VTK de su página web https://www.vtk.org/download/

Emplearemos la versión 8 (específicamente la versión 8.1.0), descargando el archivo .zip de fuentes (Source). Luego, recomiendo colocar la carpeta descomprimida en alguna ubicación “global” como c:/VTK/VTK-8.1.0, en el futuro quizás tengamos más versiones de VTK instaladas en algo como c:/VTK/VTK-9.0

La idea de tener el fuente de VTK, es poder compilarlo en tu computador y generar los .lib y .dll de tu compilador, que en este caso es Visual Studio 2017 en Windows 10. Para ello, se requiere una herramienta llamada CMake que permite generar código automáticamente de acuerdo con la configuración del computador (multiplataforma). No me extenderé en las amplias ventajas de CMake, abreviatura de cross platform make, pero es realmente muy útil cuando tienes una gran cantidad de bibliotecas. Para descargar CMake para Windows en https://cmake.org/download/ empleando el Installer o el .zip, cualquiera estará bien.

Una vez instalado CMake, procedemos a ejecutarlo y colocar la ubicación del código fuente de VTK previamente descargado, y la ubicación donde se compilará:

cmake1

Para este ejemplo, crearemos la carpeta x64/ que es donde se alojará la versión compilada de VTK. Realmente puedes colocarle cualquier nombre, build, asdf, compiled, o cualquiera :-). Luego, debemos hacer click en Configure:

cmakeCompiler

Nos aparecerá un diálogo para seleccionar el compilador a utilizar, Visual Studio, Mingw, etc.. De hecho, si tienes varias versiones de Visual Studio, aparecen todas. Yo seleccionaré Visual Studio 15 2017 Win64, que significa la versión del compilador para VS17 (aunque parezca raro, la versión del VS2017 es 15, el toolset es v141 y el compilador de C++ quizás 19.x, pero ese es otro tema para conversar). Dejamos la opción de Use Default native compilers y hacemos click en Finish. Este proceso explora sobre los archivos necesarios para compilar VTK correctamente, y puede llevar algunos minutos.

Ahora, es posible seleccionar las opciones de compilación para VTK (uso de Python, Qt, WebViews, generar la documentación, los ejemplos, construir los wraps para Java/Python, entre otros). Esto puede cambiar varios aspectos del proceso, pero por ahora no habrá cambios significativos en el resultado arrojado. Hacemos click una vez más en Configure, y debe aparecer en la consola de CMake GUI el mensaje Configuring done, y finalmente hacer click en Generate. Cuando aparezca en la consola de Generating done, ya se puede cerrar CMake e irnos a C:\vtk\VTK-8.1.0\x64.

Allí, estará el archivo VTK.sln que es el solution que corresponde a Visual Studio 2017, el cual abrimos en el IDE donde veremos muchos proyectos asociados que debemos compilar. Un punto importante es que la compilación se puede hacer para diversos modos: Debug, MinSizeRel, Release, RelWithDebInfo. Por ahora, hagámoslo para Debug que está seleccionado por defecto, presionando F7 o la opción Build que aparece al hacer click derecho sobre el proyecto ALL_BUILD. Este proceso lleva un tiempo (más tiempo que CMake), y construirá una serie de .libs y .dlls que son la base para emplear VTK.

vsVTK.jpgAl finalizar, dentro de C:\vtk\VTK-8.1.0\x64 habrá muchas carpetas (correspondiente a cada proyecto incluido en la solución VTK.sln), además de la carpeta bin/ (que contiene todos los .dll de VTK), y la carpeta lib/ (que contiene todos los .lib de los proyectos). Como se hizo la compilación en modo Debug, la carpeta que habrá dentro de estas será Debug/, y si se compila por ejemplo Release, se ira añadiendo Release/ dentro lib/ y bin/.

Es importante destacar que este proceso solo se hace una vez siempre y cuando no haya cambios en la configuración de VTK. Si se desea añadir una opción que estaba cuando se configuró CMake, se debe repetir el proceso. También, es posible no hacer BUILD_ALL, sino solo a los proyectos que realmente se emplearán. Cada proyecto de la solución de VTK representa a un conjunto de funcionalidades como vtkCommonCore, vtkpng, etc., entonces si tienes conocimiento de los proyectos que usarás de VTK, no debes compilar todo, ahorrando un poco de tiempo. Sin embargo, para este post, simplemente esperaremos a que termine de compilar :D.

Mi primer programa con VTK

El uso de CMake en VTK fue posible porque existía un archivo llamado CMakeLists.txt que es un archivo de configuración del proyecto. Este es el punto de entrada de CMake donde se indican todos los parámetros asociados a un proyecto y así poderlo hacerlo multiplataforma independiente de la ubicación de las bibliotecas necesarias para su ejecución.

Para nuestro primer programa en VTK, haremos ese archivo CMakeLists.txt para generar de forma automática la configuración de VTK haciéndolo compatible en otra plataforma donde se encuentre instalado VTK. La página oficial de VTK ofrece muchísimos ejemplos, https://lorensen.github.io/VTKExamples/site/Cxx/, y todos contienen la descripción del archivo CMakeLists.txt.

Para no empezar desde cero, utilizaremos un código base que está en https://github.com/esmitt/FirstVTK que contiene el archivo CMakeLists.txt y el archivo ConeRendering.cpp. Nuestro CMakeLists.txt contiene lo siguiente:

cmake_minimum_required(VERSION 2.8)

PROJECT(ConeRendering)

find_package(VTK 8.0.0 REQUIRED)

include(${VTK_USE_FILE})

file(GLOB SOURCES src/ConeRendering.cpp)

add_executable(ConeRendering MACOSX_BUNDLE src/ConeRendering.cpp)

target_link_libraries(ConeRendering ${VTK_LIBRARIES})

No vamos a explorar en la formación de un archivo CMakeLists.txt, sin embargo, es posible identificar ciertos parámetros como el nombre del proyecto que se generará en Visual Studio, o el nombre de archivo .cpp que contiene el main.

Una vez descargado el código (o clonado con git), hacemos el mismo proceso que se hizo para compilar VTK: utilizaremos CMake. Así, debemos colocar tanto la ubicación de nuestra carpeta FirstVTK, y la carpeta de salida, where to build the binaries, que será FirstVTK/x64/ (recuerda que el nombre de x64/ puede ser cualquiera). Hacemos click en Configure y obtendremos algo como:

FirstVTKjpg

Si estas en este punto, ¡todo está bien! Debemos indicarle a CMake la ubicación de los .lib y .dll de VTK, en este caso, para la variable VTK_DIR colocamos C:\vtk\VTK-8.1.0\x64. y hacemos click en Configure y luego en Generate. Abrimos el archivo FirstVTK/x64/ConeRendering.sln con Visual Studio 2017, donde encontraremos 3 proyectos: AL_BUILD, ConeRendering y ZERO_CHECK.

  • ALL_BUILD construye todos los proyectos de la solución (como un make all)
  • ZERO_CHECK se emplea para volver a ejecutar cmake cuando se hace un cambio en el archivo CMakeLists.txt
  • ConeRendering es el proyecto que contiene el código en C++ del despliegue con VTK

Luego, hacemos Build en el proyecto BUILD_ALL, y nos ubicamos en el proyecto ConeRendering (por ejemplo, empleando Set As StartUp Project al hacer click derecho sobre el nombre del proyecto). Si tratamos de ejecutar sin estar ubicados en ConeRendering, obtendremos un error, por eso es importante ubicarse en ese proyecto dentro de la solución.

Ahora ¡ya puedes ejecutar el código! Si aparece un mensaje como este:

errorVTK

Vas por buen camino 😊 ¿Qué pasa? Dado que estamos en Windows, es necesario añadir los DLLs al PATH del sistema para que Windows sepa dónde encontrarlos. Sin embargo, tienes varias opciones como añadirlo como variables del sistema, o copiando los DLLs en la carpeta del ejecutable (carpeta Debug/), o usando una funcionalidad de Visual Studio.

Empleando Visual Studio, debemos hacer click derecho en el proyecto ConeRendering -> Properties, y nos ubicamos en Debugging -> Environment:

addpath

Allí, agregamos la ruta en donde se encuentran los DLLs de VTK, en nuestro caso están ubicados en C:\vtk\VTK-8.1.0\x64\bin\Debug. Esto hace que se coloquen como parte del PATH de Windows pero solo para la ejecución del proyecto, es equivalente a colocarlo en una consola de Windows, que una vez se haya cerrado, se pierde dicha configuración. Quizás no es la forma eficiente, pero es una manera dependiente del proyecto. Es importante destacar que si existe una variable de entorno para VTK, por ejemplo VTK_DIR, entonces la instrucción cambiaria a PATH=%PATH%;%VTK_DIR%.

Ahora, vuelve a ejecutar el código:

conerendering

Aunque parece un proceso largo, esto permite mucha mayor portabilidad de tu código, bien sea a Linux o con otro compilador. Además, una vez tengas la configuración inicial, ya solo queda escribir el código en VTK. VTK es bastante amplio en sus algoritmos y estructuras de datos disponibles, para el rendering de datos, de hecho, hasta existe una versión Web.

En otro post exploraremos un poco más en VTK, por ahora, ya completamos un paso importante para seguir escribiendo código.

¿Te funcionaron bien los pasos explicados? No dudes en preguntar.

Resumen: Si estas en el área de visualización científica, ¡debes conocer VTK!

Anuncios

Acerca de smittynpro

Escribiendo algunas cosas de computación gráfica
Esta entrada fue publicada en Algoritmos, Bibliotecas, Código y etiquetada , , , , , , . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s