30 #include <itkCommand.h> 31 #include <vtkProperty.h> 33 #include <QMessageBox> 37 m_SurfaceBasedInterpolatorController(
mitk::SurfaceBasedInterpolationController::GetInstance()),
38 m_ToolManager(nullptr),
45 Q_ASSERT(m_ToolManager);
54 itk::ReceptorMemberCommand<QmitkSurfaceBasedInterpolatorWidget>::Pointer command =
55 itk::ReceptorMemberCommand<QmitkSurfaceBasedInterpolatorWidget>::New();
57 m_SurfaceInterpolationInfoChangedObserverTag =
58 m_SurfaceBasedInterpolatorController->AddObserver(itk::ModifiedEvent(), command);
61 m_InterpolatedSurfaceNode->SetName(
"Surface Interpolation feedback");
66 m_InterpolatedSurfaceNode->SetVisibility(
false);
69 m_3DContourNode->SetName(
"Drawn Contours");
75 m_3DContourNode->SetVisibility(
77 m_3DContourNode->SetVisibility(
79 m_3DContourNode->SetVisibility(
81 m_3DContourNode->SetVisibility(
88 m_Timer =
new QTimer(
this);
92 m_Controls.m_cbShowPositionNodes->setEnabled(
false);
94 this->setEnabled(
false);
99 m_DataStorage = &storage;
107 if (m_DataStorage->Exists(m_3DContourNode))
108 m_DataStorage->Remove(m_3DContourNode);
110 if (m_DataStorage->Exists(m_InterpolatedSurfaceNode))
111 m_DataStorage->Remove(m_InterpolatedSurfaceNode);
114 m_SurfaceBasedInterpolatorController->RemoveObserver(m_SurfaceInterpolationInfoChangedObserverTag);
121 if (m_InterpolatedSurfaceNode.IsNotNull())
122 m_InterpolatedSurfaceNode->SetVisibility(status);
124 if (m_3DContourNode.IsNotNull())
125 m_3DContourNode->SetVisibility(
133 mitk::Surface::Pointer interpolatedSurface = m_SurfaceBasedInterpolatorController->GetInterpolationResult();
135 if (interpolatedSurface.IsNotNull())
137 m_InterpolatedSurfaceNode->SetData(interpolatedSurface);
138 m_3DContourNode->SetData(m_SurfaceBasedInterpolatorController->GetContoursAsSurface());
143 m_InterpolatedSurfaceNode->SetData(
nullptr);
144 m_3DContourNode->SetData(
nullptr);
151 mitk::DataStorage::SetOfObjects::ConstPointer allContourMarkers =
154 for (mitk::DataStorage::SetOfObjects::ConstIterator it = allContourMarkers->Begin(); it != allContourMarkers->End();
162 unsigned int numberOfExistingTools = m_ToolManager->
GetTools().size();
164 for (
unsigned int i = 0; i < numberOfExistingTools; i++)
168 if (manualSegmentationTool)
170 manualSegmentationTool->SetShowMarkerNodes(state);
190 float currentColor[3];
191 m_InterpolatedSurfaceNode->GetColor(currentColor);
193 float yellow[3] = {255.0, 255.0, 0.0};
195 if (currentColor[2] == yellow[2])
203 m_InterpolatedSurfaceNode->Update();
213 this->setEnabled(
false);
222 this->setEnabled(
false);
228 this->setEnabled(
false);
232 m_WorkingImage = workingImage;
234 this->setEnabled(
true);
239 m_SurfaceBasedInterpolatorController->Interpolate();
244 Q_ASSERT(m_ToolManager);
251 m_Controls.m_cbShowPositionNodes->setEnabled(enabled);
258 for (
unsigned int i = 0; i < m_ToolManager->
GetTools().size(); i++)
267 if (!m_DataStorage->Exists(m_InterpolatedSurfaceNode))
269 m_DataStorage->Add(m_InterpolatedSurfaceNode);
272 if (!m_DataStorage->Exists(m_3DContourNode))
274 m_DataStorage->Add(m_3DContourNode);
277 mitk::Vector3D spacing = m_WorkingImage->GetGeometry(0)->GetSpacing();
278 double minSpacing(100);
279 double maxSpacing(0);
280 for (
int i = 0; i < 3; i++)
282 if (spacing[i] < minSpacing)
284 minSpacing = spacing[i];
286 else if (spacing[i] > maxSpacing)
288 maxSpacing = spacing[i];
292 m_SurfaceBasedInterpolatorController->SetWorkingImage(m_WorkingImage);
293 m_SurfaceBasedInterpolatorController->SetActiveLabel(m_WorkingImage->GetActiveLabel()->GetValue());
294 m_SurfaceBasedInterpolatorController->SetMaxSpacing(maxSpacing);
295 m_SurfaceBasedInterpolatorController->SetMinSpacing(minSpacing);
296 m_SurfaceBasedInterpolatorController->SetDistanceImageVolume(50000);
298 int ret = QMessageBox::Yes;
300 if (m_SurfaceBasedInterpolatorController->EstimatePortionOfNeededMemory() > 0.5)
303 msgBox.setText(
"Due to short handed system memory the 3D interpolation may be very slow!");
304 msgBox.setInformativeText(
"Are you sure you want to activate the 3D interpolation?");
305 msgBox.setStandardButtons(QMessageBox::No | QMessageBox::Yes);
309 if (m_Watcher.isRunning())
310 m_Watcher.waitForFinished();
312 if (ret == QMessageBox::Yes)
315 m_Watcher.setFuture(m_Future);
320 if (m_DataStorage->Exists(m_InterpolatedSurfaceNode))
322 m_DataStorage->Remove(m_InterpolatedSurfaceNode);
324 if (m_DataStorage->Exists(m_3DContourNode))
326 m_DataStorage->Remove(m_3DContourNode);
332 m_Activated = enabled;
339 if (m_InterpolatedSurfaceNode.IsNotNull() && m_InterpolatedSurfaceNode->GetData())
350 if (m_Watcher.isRunning())
351 m_Watcher.waitForFinished();
354 m_Watcher.setFuture(m_Future);
Data management class that handles 'was created by' relations.
static BaseRenderer * GetInstance(vtkRenderWindow *renWin)
static vtkRenderWindow * GetRenderWindowByName(const std::string &name)
DataCollection - Class to facilitate loading/accessing structured data.
Constants for most interaction classes, due to the generic StateMachines.
BaseData * GetData() const
Get the data object (instance of BaseData, e.g., an Image) managed by this DataNode.
unsigned int GetDimension() const
Get dimension of the image.
mitk::DataStorage::Pointer m_DataStorage
static RenderingManager * GetInstance()
static Pointer New(const char *_arg)
void RequestUpdate(vtkRenderWindow *renderWindow)
static UndoModel * GetCurrentUndoModel()
gives access to the currently used UndoModel Introduced to access special functions of more specific ...
LabelSetImage class for handling labels and layers in a segmentation session.
virtual void Clear()=0
clears undo and Redolist
void RequestUpdateAll(RequestType type=REQUEST_UPDATE_ALL)
Class for nodes of the DataTree.