next up previous
Next: Bibliography Up: Arquitectura Previous: Arquitectura

Un Ejemplo Final

Como ejemplo final presentaremos lo que puede llegar a ser un caso típico de aplicación, según lo discutido con quienes serán en definitiva los usuarios del sistema. Este consiste en recuperar de disco dos imágenes posiblemente asociadas a cortes de un tomógrafo, con las cuales se desea formar una imagen 3D conjunta. Una idea posible es crear una imagen bicoti de tres dimensiones con cada corte asociando un espesor a los mismos, presentarlos en una escena donde el usuario pueda moverlos, girarlos, etc. hasta hacerlos coincidir para posteriormente recuperar el estado final con miras a unificar los cortes mediante un procesamiento en BICOTI-I .

// Leo de disco ambos cortes
bicotiImageImplementation2D<char> * ptr_image1;
bicotiImageImplementation2D<char> * ptr_image2;
ptr_image1 = new bicotiImageImplementation<char>(0);
ptr_image2 = new bicotiImageImplementation<char>(0);
bicotiDevice * ptr_device;
ptr_device = new bicotiDeviceFile();
ptr_device->SetSource("file://home/corte1.bmp");
bicotiMapperBMP<char> mapper;
mapper.SetDevice(ptr_device);
mapper.SetImplementation(ptr_image1);
mapper.Read();
ptr_device->SetSource("file://home/corte2.bmp");
mapper.SetImplementation(ptr_image2);
mapper.Read();
delete ptr_device;

// Cargo ptr_image3 y ptr_image4 con los cortes y su ancho
bicotiImageImplementation3D<char> * ptr_image3;
bicotiImageImplementation3D<char> * ptr_image4;
..........................
..Convierto a 3D..........
..........................
delete ptr_image1;
delete ptr_image2;

// Creo los actores y cargo en ellos la informacion adecuada
bicotiActor3D * ptr_actor1;
bicotiActor3D * ptr_actor2;
bicotiConverter3DTriangular converter;
converter.SetImplementation(ptr_image3);
ptr_actor1 = converter.CreateActor();
converter.SetImplementation(ptr_image4);
ptr_actor2 = converter.CreateActor();
delete ptr_image3;
delete ptr_image4;

// Creo el visualizador para VTK
bicotiVisualization3DVTK visualizator;
....(Seteos de camara, luz, etc)....
visualizator.AddPickableActor(ptr_actor1,x1,y1,z1,phi1,lambda1,etc1);
visualizator.AddPickableActor(ptr_actor2,x2,y2,z2,phi2,lambda2,etc2);

// Supongamos que el usuario implemento un bicotiMouseListener que se 
// encargue de interpretar los eventos del mouse y generar en el 
// visualizador los giros o movimientos adecuados
ptr_actor1->SetMouseListener(mouse_listener1);
ptr_actor2->SetMouseListener(mouse_listener2);

// Comienza la visualizacion e interaccion
visualizator.Render(); 
......................................
...Se recupera el estado final........
... y se crea la imagen nueva ........
......................................
delete ptr_actor1;
delete ptr_actor2;



Claudio Risso 2001-06-02