#include <string>
#include <FL/Fl.h>
#include <FL/Fl_Window.h>
#include <FL/Fl_Box.h>
#include <Fl/Fl_File_Chooser.h>
#include "FLmitkRenderWindow/FLmitkRenderWindow.h"
#include "mitkPicFileReader.h"
#include "mitkStringProperty.h"
#include "mitkLevelWindowProperty.h"
#include "mitkSliceNavigationController.h"
#include "mitkDataNodeFactory.h"
#include "mitkSample.h"
Go to the source code of this file.
Functions | |
int | main (int argc, char **argv) |
int main | ( | int | argc, |
char ** | argv | ||
) |
Definition at line 36 of file MITKFltkExample.cpp.
References mitk::Geometry3D::New(), mitk::DataNodeFactory::New(), mitk::SliceNavigationController::New(), and mitk::SliceNavigationController::Transversal.
{ const char* fileName = NULL; if (argc == 2 && argv[1]) { fileName = argv[1]; } else { fileName = fl_file_chooser("Open file","*.dcm;*.png;*.jog;*.tiff;*.dcm;*.DCM;*.seq;*.pic;*.pic.gz;*.seq.gz;*.pic;*.pic.gz;*.png;*.stl",NULL); } if (!fileName) { exit(0);} UserInterface ui; mitk::SliceNavigationController::Pointer &sliceCtrl = ui.mainWid->sliceCtrl; sliceCtrl = mitk::SliceNavigationController::New("navigation"); ui.mainWid->InitRenderer(); ui.mainWid->GetRenderer()->SetMapperID(1); mitk::DataTree::Pointer tree = mitk::DataTree::New(); mitk::DataNodeFactory::Pointer factory = mitk::DataNodeFactory::New(); factory->SetFileName( fileName ); factory->Update(); if (factory->GetNumberOfOutputs() > 1) { fl_alert("WARNING: More than one image in file. Only showing first one."); } mitk::DataTreePreOrderIterator it(tree); mitk::DataNode::Pointer node = factory->GetOutput( 0 ); assert(node.IsNotNull()); { it.Add( node ); ui.mainWid->SetNode(node); } ui.mainWid->GetRenderer()->SetData(&it); ui.mainWid->RequestUpdate(); mitk::BoundingBox::Pointer bb = mitk::DataTree::ComputeVisibleBoundingBox(&it); mitk::Geometry3D::Pointer geometry = mitk::Geometry3D::New(); geometry->Initialize(); geometry->SetBounds(bb->GetBounds()); //tell the navigator the geometry to be sliced (with geometry a Geometry3D::ConstPointer) sliceCtrl->SetInputWorldGeometry(geometry.GetPointer()); //tell the navigator in which direction it shall slice the data sliceCtrl->SetViewDirection(mitk::SliceNavigationController::Transversal); //Connect one or more BaseRenderer to this navigator, i.e.: events sent //by the navigator when stepping through the slices (e.g. by //sliceCtrl->GetSlice()->Next()) will be received by the BaseRenderer //(in this example only slice-changes, see also ConnectGeometryTimeEvent //and ConnectGeometryEvents.) sliceCtrl->ConnectGeometrySliceEvent(ui.mainWid->GetRenderer()); //create a world geometry and send the information to the connected renderer(s) sliceCtrl->Update(); sliceCtrl->GetSlice()->SetPos(3); ui.sliceSlider->bounds(0,sliceCtrl->GetSlice()->GetSteps()-1); ui.sliceSlider->precision(0); ui.mainWid->RequestUpdate(); ui.mainWin->show(argc, argv); return Fl::run(); }