Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "mitkCreateSurfaceTool.h"
00019
00020 #include "mitkCreateSurfaceTool.xpm"
00021
00022 #include "mitkShowSegmentationAsSurface.h"
00023 #include "mitkProgressBar.h"
00024 #include "mitkStatusBar.h"
00025 #include "mitkToolManager.h"
00026
00027 #include "itkCommand.h"
00028
00029 namespace mitk {
00030 MITK_TOOL_MACRO(MitkExt_EXPORT, CreateSurfaceTool, "Surface creation tool");
00031 }
00032
00033 mitk::CreateSurfaceTool::CreateSurfaceTool()
00034 {
00035 }
00036
00037 mitk::CreateSurfaceTool::~CreateSurfaceTool()
00038 {
00039 }
00040
00041 const char** mitk::CreateSurfaceTool::GetXPM() const
00042 {
00043 return mitkCreateSurfaceTool_xpm;
00044 }
00045
00046 const char* mitk::CreateSurfaceTool::GetName() const
00047 {
00048 return "Surface";
00049 }
00050
00051 std::string mitk::CreateSurfaceTool::GetErrorMessage()
00052 {
00053 return "No surfaces created for these segmentations:";
00054 }
00055
00056 bool mitk::CreateSurfaceTool::ProcessOneWorkingData( DataNode* node )
00057 {
00058 if (node)
00059 {
00060 Image::Pointer image = dynamic_cast<Image*>( node->GetData() );
00061 if (image.IsNull()) return false;
00062
00063 try
00064 {
00065 mitk::ShowSegmentationAsSurface::Pointer surfaceFilter = mitk::ShowSegmentationAsSurface::New();
00066
00067
00068 itk::SimpleMemberCommand<CreateSurfaceTool>::Pointer goodCommand = itk::SimpleMemberCommand<CreateSurfaceTool>::New();
00069 goodCommand->SetCallbackFunction(this, &CreateSurfaceTool::OnSurfaceCalculationDone);
00070 surfaceFilter->AddObserver(mitk::ResultAvailable(), goodCommand);
00071 itk::SimpleMemberCommand<CreateSurfaceTool>::Pointer badCommand = itk::SimpleMemberCommand<CreateSurfaceTool>::New();
00072 badCommand->SetCallbackFunction(this, &CreateSurfaceTool::OnSurfaceCalculationDone);
00073 surfaceFilter->AddObserver(mitk::ProcessingError(), badCommand);
00074
00075 DataNode::Pointer nodepointer = node;
00076 surfaceFilter->SetPointerParameter("Input", image);
00077 surfaceFilter->SetPointerParameter("Group node", nodepointer);
00078 surfaceFilter->SetParameter("Show result", true );
00079 surfaceFilter->SetParameter("Sync visibility", false );
00080 surfaceFilter->SetDataStorage( *m_ToolManager->GetDataStorage() );
00081
00082 ProgressBar::GetInstance()->AddStepsToDo(1);
00083 StatusBar::GetInstance()->DisplayText("Surface creation started in background...");
00084 surfaceFilter->StartAlgorithm();
00085 }
00086 catch(...)
00087 {
00088 return false;
00089 }
00090 }
00091
00092 return true;
00093 }
00094
00095 void mitk::CreateSurfaceTool::OnSurfaceCalculationDone()
00096 {
00097 ProgressBar::GetInstance()->Progress();
00098 m_ToolManager->NewNodesGenerated();
00099 }
00100