Functions

MITKFltkExample.cpp File Reference

#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)

Function Documentation

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();
}
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines