Barras de Progreso con wxWidgets

Para mi memoria de grado estoy implementando técnicas de reconstrucción de modelos tridimensionales a partir de imágenes. La idea es partir de un conjunto de imágenes de las cuales se conocen todos sus datos y, mediante un algoritmo, reconstruir un modelo 3D que sea consistente con todas ellas.

Por más extraño que pueda parecer, el algoritmo parece estar funcionando bastante bien en general y pienso que solo resta ajustar algunos parámetros adicionales para mejorar el nivel de la reconstrucción. El problema es que, como pueden imaginar, este tipo de algoritmos son extremadamente pesados, con complejidad que aumenta en función de la entrada y de la porción del espacio donde residirá el modelo a reconstruir, por lo cual ya me estoy acostumbrando a que las sesiones de depurado duren cuando menos media hora por corrida.

Aburrido mientras realizaba una ejecución con 360 imágenes de entrada (que duró más de 1:30 hs en un Core 2 Duo@1.80GHz) se me ocurrió implementarle una barrita de progreso a la aplicación, usando wxWidgets, de forma de al menos poder ver cuánto más debía esperar la próxima corrida.

La barra de progreso fue muy fácil de implementar, simplemente 3 líneas de código, y para mi sorpresa wxWidgets se encarga de realizar una estimación automática del tiempo restante en función de cada cuanto actualizamos la barra de progreso.

Si bien tras la última corrida (que ven en la foto) el resultado no fue exactamente el esperado, al menos ahora tengo una estimación para saber si puedo ir a tomar un café entre prueba y prueba.

La clase que utilicé fue wxProgressDialog y pueden ver su interfaz en la documentación online de wxWidgets.

This entry was posted in Computación Gráfica, Programacion, Tutoriales. Bookmark the permalink.

One Response to Barras de Progreso con wxWidgets

  1. Varrojo says:

    Deben tener cuidado, sin embargo, de no hacer un diálogo que se esté actualizando constantemente, ya que como éste debe redibujarse cada vez, podría llegar a enlentecer demasiado la verdadera tarea que estamos ejecutando (la que nos interesa terminar).

    Lo ideal sería actualizarlo lo justo, quizás no tan pronto tengamos nueva información del estado de la operación, sino lo necesario para dar una idea razonable al usuario de cuánto más deberá esperar. En el ejemplo de arriba, una alternativa mucho más eficiente para mostrar el diálogo de progreso sería que en vez de actualizar por cada uno de los Voxels a procesar, actualizaramos cada cierto número razonable, por ejemplo, cada 10 voxels.

    Si estuviéramos recorriendo una lista de elementos con un índice i, tendríamos algo así:

    if (i % 10 == 0) dialogo.actualizar();

Comments are closed.