#include <QmitkSegmentationView.h>
Definition at line 34 of file QmitkSegmentationView.h.
typedef std::vector<mitk::DataNode*> QmitkSegmentationView::NodeList [protected] |
Definition at line 92 of file QmitkSegmentationView.h.
QmitkSegmentationView::QmitkSegmentationView | ( | ) |
Definition at line 39 of file QmitkSegmentationView.cpp.
:m_Parent(NULL) ,m_Controls(NULL) ,m_MultiWidget(NULL) ,m_PostProcessing(NULL) ,m_RenderingManagerObserverTag(0) { }
QmitkSegmentationView::~QmitkSegmentationView | ( | ) | [virtual] |
Definition at line 48 of file QmitkSegmentationView.cpp.
References m_Controls, and m_PostProcessing.
{ delete m_PostProcessing; delete m_Controls; }
void QmitkSegmentationView::Activated | ( | ) | [virtual] |
Only called when IsExclusiveFunctionality() returns true.
Reimplemented from QmitkFunctionality.
Definition at line 72 of file QmitkSegmentationView.cpp.
References QmitkSlicesInterpolator::EnableInterpolation(), mitk::RenderingManager::GetInstance(), m_Controls, Ui_QmitkSegmentationControls::m_LesionToolSelectionBox, Ui_QmitkSegmentationControls::m_ManualToolSelectionBox, Ui_QmitkSegmentationControls::m_OrganToolSelectionBox, m_RenderingManagerObserverTag, Ui_QmitkSegmentationControls::m_SlicesInterpolator, Ui_QmitkSegmentationControls::pageManual, RenderingManagerReinitialized(), QmitkToolSelectionBox::setEnabled(), and Ui_QmitkSegmentationControls::widgetStack.
{ // should be moved to ::BecomesVisible() or similar if( m_Controls ) { m_Controls->m_ManualToolSelectionBox->setEnabled( true ); m_Controls->m_OrganToolSelectionBox->setEnabled( true ); m_Controls->m_LesionToolSelectionBox->setEnabled( true ); m_Controls->m_SlicesInterpolator->EnableInterpolation( m_Controls->widgetStack->currentWidget() == m_Controls->pageManual ); itk::ReceptorMemberCommand<QmitkSegmentationView>::Pointer command1 = itk::ReceptorMemberCommand<QmitkSegmentationView>::New(); command1->SetCallbackFunction( this, &QmitkSegmentationView::RenderingManagerReinitialized ); m_RenderingManagerObserverTag = mitk::RenderingManager::GetInstance()->AddObserver( mitk::RenderingManagerViewsInitializedEvent(), command1 ); } }
void QmitkSegmentationView::AppendToOrganList | ( | QStringList & | organColors, |
const QString & | organname, | ||
int | r, | ||
int | g, | ||
int | b | ||
) | [protected] |
Definition at line 98 of file QmitkSegmentationOrganNamesHandling.cpp.
Referenced by GetDefaultOrganColorString().
{ organColors.append( organname + QColor(r, g, b).name() ); }
void QmitkSegmentationView::ApplyDisplayOptions | ( | mitk::DataNode * | node ) | [protected] |
Definition at line 726 of file QmitkSegmentationView.cpp.
References QmitkFunctionality::GetPreferences(), mitk::DataNode::GetPropertyValue(), mitk::FloatProperty::New(), mitk::BoolProperty::New(), and mitk::DataNode::SetProperty().
Referenced by ForceDisplayPreferencesUponAllImages().
{ if (!node) return; bool isBinary(false); node->GetPropertyValue("binary", isBinary); if (isBinary) { node->SetProperty( "outline binary", mitk::BoolProperty::New( this->GetPreferences()->GetBool("draw outline", true)) ); node->SetProperty( "outline width", mitk::FloatProperty::New( 2.0 ) ); node->SetProperty( "opacity", mitk::FloatProperty::New( this->GetPreferences()->GetBool("draw outline", true) ? 1.0 : 0.3 ) ); node->SetProperty( "volumerendering", mitk::BoolProperty::New( this->GetPreferences()->GetBool("volume rendering", false) ) ); } }
void QmitkSegmentationView::CheckImageAlignment | ( | ) | [protected] |
Definition at line 630 of file QmitkSegmentationView.cpp.
References mitk::ToolManager::GetReferenceData(), QmitkStdMultiWidget::GetRenderWindow1(), QmitkStdMultiWidget::GetRenderWindow2(), QmitkStdMultiWidget::GetRenderWindow3(), QmitkToolSelectionBox::GetToolManager(), IsRenderWindowAligned(), Ui_QmitkSegmentationControls::lblAlignmentWarning, m_Controls, Ui_QmitkSegmentationControls::m_ManualToolSelectionBox, and m_MultiWidget.
Referenced by RenderingManagerReinitialized(), SetToolManagerSelection(), and SliceRotation().
{ bool wrongAlignment(false); mitk::DataNode::Pointer node = m_Controls->m_ManualToolSelectionBox->GetToolManager()->GetReferenceData(0); if (node.IsNotNull()) { mitk::Image::Pointer image = dynamic_cast<mitk::Image*>( node->GetData() ); if (image.IsNotNull() && m_MultiWidget) { wrongAlignment = !( IsRenderWindowAligned(m_MultiWidget->GetRenderWindow1(), image ) && IsRenderWindowAligned(m_MultiWidget->GetRenderWindow2(), image ) && IsRenderWindowAligned(m_MultiWidget->GetRenderWindow3(), image ) ); } } if (wrongAlignment) { m_Controls->lblAlignmentWarning->show(); } else { m_Controls->lblAlignmentWarning->hide(); } }
void QmitkSegmentationView::CreateNewSegmentation | ( | ) | [protected, slot] |
Definition at line 190 of file QmitkSegmentationView.cpp.
References mitk::Tool::CreateEmptySegmentationNode(), QmitkFunctionality::FireNodeSelected(), QmitkNewSegmentationDialog::GetColor(), QmitkFunctionality::GetDefaultDataStorage(), GetDefaultOrganColorString(), QmitkFunctionality::GetPreferences(), mitk::ToolManager::GetReferenceData(), QmitkNewSegmentationDialog::GetSegmentationName(), mitk::ToolManager::GetToolById(), QmitkToolSelectionBox::GetToolManager(), m_Controls, Ui_QmitkSegmentationControls::m_ManualToolSelectionBox, m_Parent, MITK_DEBUG, MITK_ERROR, OnSelectionChanged(), QmitkNewSegmentationDialog::SetSuggestionList(), and UpdateOrganList().
Referenced by CreateQtPartControl().
{ mitk::DataNode::Pointer node = m_Controls->m_ManualToolSelectionBox->GetToolManager()->GetReferenceData(0); if (node.IsNotNull()) { mitk::Image::Pointer image = dynamic_cast<mitk::Image*>( node->GetData() ); if (image.IsNotNull()) { if (image->GetDimension()>2) { // ask about the name and organ type of the new segmentation QmitkNewSegmentationDialog* dialog = new QmitkNewSegmentationDialog( m_Parent ); // needs a QWidget as parent, "this" is not QWidget QString storedList = QString::fromStdString( this->GetPreferences()->GetByteArray("Organ-Color-List","") ); QStringList organColors; if (storedList.isEmpty()) { organColors = GetDefaultOrganColorString(); } else { /* a couple of examples of how organ names are stored: a simple item is built up like 'name#AABBCC' where #AABBCC is the hexadecimal notation of a color as known from HTML items are stored separated by ';' this makes it necessary to escape occurrences of ';' in name. otherwise the string "hugo;ypsilon#AABBCC;eugen#AABBCC" could not be parsed as two organs but we would get "hugo" and "ypsilon#AABBCC" and "eugen#AABBCC" so the organ name "hugo;ypsilon" is stored as "hugo\;ypsilon" and must be unescaped after loading the following lines could be one split with Perl's negative lookbehind */ // recover string list from BlueBerry view's preferences QString storedString = QString::fromStdString( this->GetPreferences()->GetByteArray("Organ-Color-List","") ); MITK_DEBUG << "storedString: " << storedString.toStdString(); // match a string consisting of any number of repetitions of either "anything but ;" or "\;". This matches everything until the next unescaped ';' QRegExp onePart("(?:[^;]|\\\\;)*"); MITK_DEBUG << "matching " << onePart.pattern().toStdString(); int count = 0; int pos = 0; while( (pos = onePart.indexIn( storedString, pos )) != -1 ) { ++count; int length = onePart.matchedLength(); if (length == 0) break; QString matchedString = storedString.mid(pos, length); MITK_DEBUG << " Captured length " << length << ": " << matchedString.toStdString(); pos += length + 1; // skip separating ';' // unescape possible occurrences of '\;' in the string matchedString.replace("\\;", ";"); // add matched string part to output list organColors << matchedString; } MITK_DEBUG << "Captured " << count << " organ name/colors"; } dialog->SetSuggestionList( organColors ); int dialogReturnValue = dialog->exec(); if ( dialogReturnValue == QDialog::Rejected ) return; // user clicked cancel or pressed Esc or something similar // ask the user about an organ type and name, add this information to the image's (!) propertylist // create a new image of the same dimensions and smallest possible pixel type mitk::ToolManager* toolManager = m_Controls->m_ManualToolSelectionBox->GetToolManager(); mitk::Tool* firstTool = toolManager->GetToolById(0); if (firstTool) { try { mitk::DataNode::Pointer emptySegmentation = firstTool->CreateEmptySegmentationNode( image, dialog->GetSegmentationName().toStdString(), dialog->GetColor() ); if (!emptySegmentation) return; // could be aborted by user UpdateOrganList( organColors, dialog->GetSegmentationName(), dialog->GetColor() ); /* escape ';' here (replace by '\;'), see longer comment above */ std::string stringForStorage = organColors.replaceInStrings(";","\\;").join(";").toStdString(); MITK_DEBUG << "Will store: " << stringForStorage; this->GetPreferences()->PutByteArray("Organ-Color-List", stringForStorage ); this->GetPreferences()->Flush(); this->GetDefaultDataStorage()->Add( emptySegmentation, node ); // add as a child, because the segmentation "derives" from the original this->FireNodeSelected( emptySegmentation ); this->OnSelectionChanged( emptySegmentation ); } catch (std::bad_alloc) { QMessageBox::warning(NULL,"Create new segmentation","Could not allocate memory for new segmentation"); } } } else { QMessageBox::information(NULL,"Segmentation","Segmentation is currently not supported for 2D images"); } } } else { MITK_ERROR << "'Create new segmentation' button should never be clickable unless a patient image is selected..."; } }
void QmitkSegmentationView::CreateQtPartControl | ( | QWidget * | parent ) | [protected, virtual] |
Implements berry::QtViewPart.
Definition at line 742 of file QmitkSegmentationView.cpp.
References Ui_QmitkSegmentationControls::btnNewSegmentation, CreateNewSegmentation(), CreateSegmentationFromSurface(), Ui_QmitkSegmentationControls::CreateSegmentationFromSurface, QmitkToolSelectionBox::EnabledWithReferenceAndWorkingData, QmitkToolSelectionBox::EnabledWithReferenceData, QmitkFunctionality::GetDefaultDataStorage(), QmitkDataStorageComboBox::GetSelectedNode(), QmitkToolSelectionBox::GetToolManager(), Ui_QmitkSegmentationControls::lblAlignmentWarning, Ui_QmitkSegmentationControls::lblReferenceImageSelectionWarning, Ui_QmitkSegmentationControls::lblSegImage, Ui_QmitkSegmentationControls::lblSegmentation, Ui_QmitkSegmentationControls::lblWorkingImageSelectionWarning, m_Controls, Ui_QmitkSegmentationControls::m_LesionToolGUIContainer, Ui_QmitkSegmentationControls::m_LesionToolSelectionBox, Ui_QmitkSegmentationControls::m_ManualToolGUIContainer, Ui_QmitkSegmentationControls::m_ManualToolSelectionBox, Ui_QmitkSegmentationControls::m_OrganToolGUIContainer, Ui_QmitkSegmentationControls::m_OrganToolSelectionBox, m_Parent, m_PostProcessing, ManualToolSelected(), Ui_QmitkSegmentationControls::MaskSurfaces, mitk::NodePredicateDataType::New(), NewNodeObjectsGenerated(), mitk::ToolManager::NewNodeObjectsGenerated, NewNodesGenerated(), mitk::ToolManager::NewNodesGenerated, OnComboBoxSelectionChanged(), OnSelectionChanged(), OnSurfaceSelectionChanged(), Ui_QmitkSegmentationControls::refImageSelector, mitk::ToolManager::SetDataStorage(), QmitkDataStorageComboBox::SetDataStorage(), QmitkToolSelectionBox::SetDisplayedToolGroups(), QmitkToolSelectionBox::SetEnabledMode(), QmitkToolSelectionBox::SetGenerateAccelerators(), QmitkDataStorageComboBox::SetPredicate(), QmitkToolSelectionBox::SetToolGUIArea(), QmitkToolSelectionBox::SetToolManager(), Ui_QmitkSegmentationControls::setupUi(), ToolboxStackPageChanged(), and Ui_QmitkSegmentationControls::widgetStack.
{ // setup the basic GUI of this view m_Parent = parent; m_Controls = new Ui::QmitkSegmentationControls; m_Controls->setupUi(parent); m_Controls->lblWorkingImageSelectionWarning->hide(); m_Controls->lblAlignmentWarning->hide(); m_Controls->lblSegImage->hide(); m_Controls->lblSegmentation->hide(); m_Controls->refImageSelector->SetDataStorage(this->GetDefaultDataStorage()); m_Controls->refImageSelector->SetPredicate(mitk::NodePredicateDataType::New("Image")); if( m_Controls->refImageSelector->GetSelectedNode().IsNotNull() ) m_Controls->lblReferenceImageSelectionWarning->hide(); else m_Controls->refImageSelector->hide(); mitk::ToolManager* toolManager = m_Controls->m_ManualToolSelectionBox->GetToolManager(); toolManager->SetDataStorage( *(this->GetDefaultDataStorage()) ); assert ( toolManager ); // all part of open source MITK m_Controls->m_ManualToolSelectionBox->SetGenerateAccelerators(true); m_Controls->m_ManualToolSelectionBox->SetToolGUIArea( m_Controls->m_ManualToolGUIContainer ); m_Controls->m_ManualToolSelectionBox->SetDisplayedToolGroups("Add Subtract Paint Wipe 'Region Growing' Correction Fill Erase"); m_Controls->m_ManualToolSelectionBox->SetEnabledMode( QmitkToolSelectionBox::EnabledWithReferenceAndWorkingData ); // available only in the 3M application if ( !m_Controls->m_OrganToolSelectionBox->children().count() ) { m_Controls->widgetStack->setItemEnabled( 1, false ); } m_Controls->m_OrganToolSelectionBox->SetToolManager( *toolManager ); m_Controls->m_OrganToolSelectionBox->SetToolGUIArea( m_Controls->m_OrganToolGUIContainer ); m_Controls->m_OrganToolSelectionBox->SetDisplayedToolGroups("'Hippocampus left' 'Hippocampus right' 'Lung left' 'Lung right' 'Liver' 'Heart LV' 'Endocard LV' 'Epicard LV' 'Prostate'"); m_Controls->m_OrganToolSelectionBox->SetEnabledMode( QmitkToolSelectionBox::EnabledWithReferenceData ); // available only in the 3M application if ( !m_Controls->m_LesionToolSelectionBox->children().count() ) { m_Controls->widgetStack->setItemEnabled( 2, false ); } m_Controls->m_LesionToolSelectionBox->SetToolManager( *toolManager ); m_Controls->m_LesionToolSelectionBox->SetToolGUIArea( m_Controls->m_LesionToolGUIContainer ); m_Controls->m_LesionToolSelectionBox->SetDisplayedToolGroups("'Lymph Node'"); m_Controls->m_LesionToolSelectionBox->SetEnabledMode( QmitkToolSelectionBox::EnabledWithReferenceData ); toolManager->NewNodesGenerated += mitk::MessageDelegate<QmitkSegmentationView>( this, &QmitkSegmentationView::NewNodesGenerated ); // update the list of segmentations toolManager->NewNodeObjectsGenerated += mitk::MessageDelegate1<QmitkSegmentationView, mitk::ToolManager::DataVectorType*>( this, &QmitkSegmentationView::NewNodeObjectsGenerated ); // update the list of segmentations // create signal/slot connections connect( m_Controls->refImageSelector, SIGNAL( OnSelectionChanged( const mitk::DataNode* ) ), this, SLOT( OnComboBoxSelectionChanged( const mitk::DataNode* ) ) ); connect( m_Controls->btnNewSegmentation, SIGNAL(clicked()), this, SLOT(CreateNewSegmentation()) ); connect( m_Controls->CreateSegmentationFromSurface, SIGNAL(clicked()), this, SLOT(CreateSegmentationFromSurface()) ); connect( m_Controls->m_ManualToolSelectionBox, SIGNAL(ToolSelected(int)), this, SLOT(ManualToolSelected(int)) ); connect( m_Controls->widgetStack, SIGNAL(currentChanged(int)), this, SLOT(ToolboxStackPageChanged(int)) ); connect(m_Controls->MaskSurfaces, SIGNAL( OnSelectionChanged( const mitk::DataNode* ) ), this, SLOT( OnSurfaceSelectionChanged( ) ) ); m_Controls->MaskSurfaces->SetDataStorage(this->GetDefaultDataStorage()); m_Controls->MaskSurfaces->SetPredicate(mitk::NodePredicateDataType::New("Surface")); m_PostProcessing = new QmitkSegmentationPostProcessing(this->GetDefaultDataStorage(), this, m_Parent); }
void QmitkSegmentationView::CreateSegmentationFromSurface | ( | ) | [protected, slot] |
Definition at line 305 of file QmitkSegmentationView.cpp.
References QmitkFunctionality::GetDataStorage(), mitk::ToolManager::GetReferenceData(), QmitkDataStorageComboBox::GetSelectedNode(), QmitkToolSelectionBox::GetToolManager(), QmitkFunctionality::HandleException(), m_Controls, Ui_QmitkSegmentationControls::m_ManualToolSelectionBox, m_Parent, Ui_QmitkSegmentationControls::MaskSurfaces, mitk::BoolProperty::New(), mitk::StringProperty::New(), mitk::DataNode::New(), and mitk::SurfaceToImageFilter::New().
Referenced by CreateQtPartControl().
{ mitk::DataNode::Pointer surfaceNode = m_Controls->MaskSurfaces->GetSelectedNode(); mitk::Surface::Pointer surface(0); if(surfaceNode.IsNotNull()) surface = dynamic_cast<mitk::Surface*> ( surfaceNode->GetData() ); if(surface.IsNull()) { this->HandleException( "No surface selected.", m_Parent, true); return; } mitk::DataNode::Pointer imageNode = m_Controls->m_ManualToolSelectionBox->GetToolManager()->GetReferenceData(0); mitk::Image::Pointer image(0); if (imageNode.IsNotNull()) image = dynamic_cast<mitk::Image*>( imageNode->GetData() ); if(image.IsNull()) { this->HandleException( "No image selected.", m_Parent, true); return; } mitk::SurfaceToImageFilter::Pointer s2iFilter = mitk::SurfaceToImageFilter::New(); s2iFilter->MakeOutputBinaryOn(); s2iFilter->SetInput(surface); s2iFilter->SetImage(image); s2iFilter->Update(); mitk::DataNode::Pointer resultNode = mitk::DataNode::New(); std::string nameOfResultImage = imageNode->GetName(); nameOfResultImage.append(surfaceNode->GetName()); resultNode->SetProperty("name", mitk::StringProperty::New(nameOfResultImage) ); resultNode->SetProperty("binary", mitk::BoolProperty::New(true) ); resultNode->SetData( s2iFilter->GetOutput() ); this->GetDataStorage()->Add(resultNode, imageNode); }
void QmitkSegmentationView::Deactivated | ( | ) | [virtual] |
Only called when IsExclusiveFunctionality() returns true.
Reimplemented from QmitkFunctionality.
Definition at line 89 of file QmitkSegmentationView.cpp.
References mitk::ToolManager::ActivateTool(), QmitkSlicesInterpolator::EnableInterpolation(), mitk::RenderingManager::GetInstance(), QmitkToolSelectionBox::GetToolManager(), m_Controls, Ui_QmitkSegmentationControls::m_LesionToolSelectionBox, Ui_QmitkSegmentationControls::m_ManualToolSelectionBox, Ui_QmitkSegmentationControls::m_OrganToolSelectionBox, m_RenderingManagerObserverTag, Ui_QmitkSegmentationControls::m_SlicesInterpolator, and QmitkToolSelectionBox::setEnabled().
{ if( m_Controls ) { mitk::RenderingManager::GetInstance()->RemoveObserver( m_RenderingManagerObserverTag ); m_Controls->m_ManualToolSelectionBox->setEnabled( false ); //deactivate all tools m_Controls->m_ManualToolSelectionBox->GetToolManager()->ActivateTool(-1); m_Controls->m_OrganToolSelectionBox->setEnabled( false ); m_Controls->m_LesionToolSelectionBox->setEnabled( false ); m_Controls->m_SlicesInterpolator->EnableInterpolation( false ); } }
mitk::DataNode::Pointer QmitkSegmentationView::FindFirstRegularImage | ( | std::vector< mitk::DataNode * > | nodes ) | [protected] |
Definition at line 525 of file QmitkSegmentationView.cpp.
Referenced by OnSelectionChanged().
{ if (nodes.empty()) return NULL; for(unsigned int i = 0; i < nodes.size(); ++i) { //mitk::DataNode::Pointer node = i.value() bool isImage(false); if (nodes.at(i)->GetData()) { isImage = dynamic_cast<mitk::Image*>(nodes.at(i)->GetData()) != NULL; } // make sure this is not a binary image bool isSegmentation(false); nodes.at(i)->GetBoolProperty("binary", isSegmentation); // return first proper mitk::Image if (isImage && !isSegmentation) return nodes.at(i); } return NULL; }
mitk::DataNode::Pointer QmitkSegmentationView::FindFirstSegmentation | ( | std::vector< mitk::DataNode * > | nodes ) | [protected] |
Definition at line 550 of file QmitkSegmentationView.cpp.
Referenced by OnSelectionChanged().
{ if (nodes.empty()) return NULL; for(unsigned int i = 0; i < nodes.size(); ++i) { bool isImage(false); if (nodes.at(i)->GetData()) { isImage = dynamic_cast<mitk::Image*>(nodes.at(i)->GetData()) != NULL; } bool isSegmentation(false); nodes.at(i)->GetBoolProperty("binary", isSegmentation); // return first proper binary mitk::Image if (isImage && isSegmentation) { return nodes.at(i); } } return NULL; }
void QmitkSegmentationView::ForceDisplayPreferencesUponAllImages | ( | ) | [protected] |
Definition at line 672 of file QmitkSegmentationView.cpp.
References ApplyDisplayOptions(), QmitkFunctionality::GetDefaultDataStorage(), mitk::RenderingManager::GetInstance(), mitk::ToolManager::GetReferenceData(), QmitkToolSelectionBox::GetToolManager(), mitk::ToolManager::GetWorkingData(), m_Controls, Ui_QmitkSegmentationControls::m_ManualToolSelectionBox, m_Parent, and mitk::DataNode::SetVisibility().
Referenced by NewNodesGenerated(), OnPreferencesChanged(), and OnSelectionChanged().
{ if (!m_Parent || !m_Parent->isVisible()) return; // check all images and segmentations in DataStorage: // (items in brackets are implicitly done by previous steps) // 1. // if a reference image is selected, // show the reference image // and hide all other images (orignal and segmentation), // (and hide all segmentations of the other original images) // and show all the reference's segmentations // if no reference image is selected, do do nothing // // 2. // if a segmentation is selected, // show it // (and hide all all its siblings (childs of the same parent, incl, NULL parent)) // if no segmentation is selected, do nothing if (!m_Controls) return; // might happen on initialization (preferences loaded) mitk::DataNode::Pointer referenceData = m_Controls->m_ManualToolSelectionBox->GetToolManager()->GetReferenceData(0); mitk::DataNode::Pointer workingData = m_Controls->m_ManualToolSelectionBox->GetToolManager()->GetWorkingData(0); // 1. if (referenceData.IsNotNull()) { // iterate all images mitk::TNodePredicateDataType<mitk::Image>::Pointer isImage = mitk::TNodePredicateDataType<mitk::Image>::New(); mitk::DataStorage::SetOfObjects::ConstPointer allImages = this->GetDefaultDataStorage()->GetSubset( isImage ); for ( mitk::DataStorage::SetOfObjects::const_iterator iter = allImages->begin(); iter != allImages->end(); ++iter) { mitk::DataNode* node = *iter; // apply display preferences ApplyDisplayOptions(node); // set visibility node->SetVisibility(node == referenceData); } } // 2. if (workingData.IsNotNull()) { workingData->SetVisibility(true); } mitk::RenderingManager::GetInstance()->RequestUpdateAll(); }
QStringList QmitkSegmentationView::GetDefaultOrganColorString | ( | ) | [protected] |
Definition at line 20 of file QmitkSegmentationOrganNamesHandling.cpp.
References AppendToOrganList().
Referenced by CreateNewSegmentation().
{ QStringList organColors; AppendToOrganList(organColors, "Ankle", 255, 255, 153); AppendToOrganList(organColors, "Appendix", 161, 107, 54); AppendToOrganList(organColors, "Blood vessels", 255, 49, 49); AppendToOrganList(organColors, "Bone", 255, 255, 153); AppendToOrganList(organColors, "Brain", 255, 156, 202); AppendToOrganList(organColors, "Bronchial tree", 0, 160, 209); AppendToOrganList(organColors, "Coccyx", 255, 255, 153); AppendToOrganList(organColors, "Colon", 161, 107, 54); AppendToOrganList(organColors, "Cyst", 150, 189, 228); AppendToOrganList(organColors, "Elbow", 255, 255, 153); AppendToOrganList(organColors, "Eye", 18, 7, 161); AppendToOrganList(organColors, "Fallopian tube", 161, 19, 39); AppendToOrganList(organColors, "Fat", 237, 255, 41); AppendToOrganList(organColors, "Gall Bladder", 86, 127, 24); AppendToOrganList(organColors, "Hand", 255, 222, 199); AppendToOrganList(organColors, "Heart", 153, 0, 0); AppendToOrganList(organColors, "Hip", 255, 255, 153); AppendToOrganList(organColors, "Kidney", 250, 89, 0); AppendToOrganList(organColors, "Knee", 255, 255, 153); AppendToOrganList(organColors, "Larynx", 102, 0, 0); AppendToOrganList(organColors, "Liver", 194, 142, 0); AppendToOrganList(organColors, "Lung", 107, 220, 255); AppendToOrganList(organColors, "Lymph node", 10, 250, 56); AppendToOrganList(organColors, "Muscle", 102, 0, 0); AppendToOrganList(organColors, "Nerve", 255, 234, 79); AppendToOrganList(organColors, "Nose", 255, 222, 199); AppendToOrganList(organColors, "Oesophagus", 102, 0, 0); AppendToOrganList(organColors, "Ovaries", 234, 0, 117); AppendToOrganList(organColors, "Pancreas", 249, 171, 61); AppendToOrganList(organColors, "Pelvis", 255, 255, 153); AppendToOrganList(organColors, "Penis", 255, 222, 199); AppendToOrganList(organColors, "Pharynx", 102, 0, 0); AppendToOrganList(organColors, "Prostate", 209, 163, 117); AppendToOrganList(organColors, "Rectum", 161, 107, 54); AppendToOrganList(organColors, "Sacrum", 255, 255, 153); AppendToOrganList(organColors, "Seminal vesicle", 199, 232, 255); AppendToOrganList(organColors, "Shoulder", 255, 255, 153); AppendToOrganList(organColors, "Spinal cord", 255, 234, 79); AppendToOrganList(organColors, "Spleen", 249, 108, 61); AppendToOrganList(organColors, "Stomach", 161, 107, 54); AppendToOrganList(organColors, "Teeth", 255, 252, 216); AppendToOrganList(organColors, "Testicles", 199, 232, 255); AppendToOrganList(organColors, "Thyroid", 255, 179, 184); AppendToOrganList(organColors, "Tongue", 102, 0, 0); AppendToOrganList(organColors, "Tumor", 147, 112, 17); AppendToOrganList(organColors, "Urethra", 197, 204, 0); AppendToOrganList(organColors, "Urinary bladder", 197, 204, 0); AppendToOrganList(organColors, "Uterus", 161, 19, 39); AppendToOrganList(organColors, "Vagina", 161, 19, 39); AppendToOrganList(organColors, "Vertebra", 255, 255, 153); AppendToOrganList(organColors, "Wrist", 255, 255, 153); return organColors; }
bool QmitkSegmentationView::IsRenderWindowAligned | ( | QmitkRenderWindow * | renderWindow, |
mitk::Image * | image | ||
) | [protected] |
Definition at line 659 of file QmitkSegmentationView.cpp.
References mitk::SegTool2D::DetermineAffectedImageSlice(), mitk::BaseRenderer::GetCurrentWorldGeometry2D(), and mitk::RenderWindowBase::GetRenderer().
Referenced by CheckImageAlignment().
{ if (!renderWindow) return false; // for all 2D renderwindows of m_MultiWidget check alignment mitk::PlaneGeometry::ConstPointer displayPlane = dynamic_cast<const mitk::PlaneGeometry*>( renderWindow->GetRenderer()->GetCurrentWorldGeometry2D() ); if (displayPlane.IsNull()) return false; int affectedDimension(-1); int affectedSlice(-1); return mitk::SegTool2D::DetermineAffectedImageSlice( image, displayPlane, affectedDimension, affectedSlice ); }
void QmitkSegmentationView::ManualToolSelected | ( | int | id ) | [protected, slot] |
Definition at line 348 of file QmitkSegmentationView.cpp.
References QmitkStdMultiWidget::DisableNavigationControllerEventListening(), QmitkStdMultiWidget::EnableNavigationControllerEventListening(), and m_MultiWidget.
Referenced by CreateQtPartControl().
{ // disable crosshair movement when a manual drawing tool is active (otherwise too much visual noise) if (m_MultiWidget) { if (id >= 0) { m_MultiWidget->DisableNavigationControllerEventListening(); } else { m_MultiWidget->EnableNavigationControllerEventListening(); } } }
void QmitkSegmentationView::NewNodeObjectsGenerated | ( | mitk::ToolManager::DataVectorType * | nodes ) |
Definition at line 59 of file QmitkSegmentationView.cpp.
References QmitkFunctionality::FireNodeSelected(), QmitkToolSelectionBox::GetToolManager(), m_Controls, and Ui_QmitkSegmentationControls::m_ManualToolSelectionBox.
Referenced by CreateQtPartControl().
{ if (!nodes) return; mitk::ToolManager* toolManager = m_Controls->m_ManualToolSelectionBox->GetToolManager(); if (!toolManager) return; for (mitk::ToolManager::DataVectorType::iterator iter = nodes->begin(); iter != nodes->end(); ++iter) { this->FireNodeSelected( *iter ); // only last iteration meaningful, multiple generated objects are not taken into account here } }
void QmitkSegmentationView::NewNodesGenerated | ( | ) |
Definition at line 54 of file QmitkSegmentationView.cpp.
References ForceDisplayPreferencesUponAllImages().
Referenced by CreateQtPartControl().
void QmitkSegmentationView::OnComboBoxSelectionChanged | ( | const mitk::DataNode * | node ) | [protected, slot] |
Definition at line 406 of file QmitkSegmentationView.cpp.
References Ui_QmitkSegmentationControls::lblReferenceImageSelectionWarning, m_Controls, OnSelectionChanged(), and Ui_QmitkSegmentationControls::refImageSelector.
Referenced by CreateQtPartControl(), and OnSelectionChanged().
{ mitk::DataNode* selectedNode = const_cast<mitk::DataNode*>(node); if( selectedNode != NULL ) { m_Controls->refImageSelector->show(); m_Controls->lblReferenceImageSelectionWarning->hide(); this->OnSelectionChanged( const_cast<mitk::DataNode*>(node) ); } else { m_Controls->refImageSelector->hide(); m_Controls->lblReferenceImageSelectionWarning->show(); } }
void QmitkSegmentationView::OnPreferencesChanged | ( | const berry::IBerryPreferences * | ) | [virtual] |
Called when the preferences object of this view changed.
Reimplemented from QmitkFunctionality.
Definition at line 172 of file QmitkSegmentationView.cpp.
References ForceDisplayPreferencesUponAllImages().
void QmitkSegmentationView::OnSelectionChanged | ( | std::vector< mitk::DataNode * > | ) | [virtual] |
Called when the selection in the workbench changed
Reimplemented from QmitkFunctionality.
Definition at line 440 of file QmitkSegmentationView.cpp.
References Ui_QmitkSegmentationControls::CreateSegmentationFromSurface, QmitkDataStorageComboBox::Find(), FindFirstRegularImage(), FindFirstSegmentation(), ForceDisplayPreferencesUponAllImages(), QmitkFunctionality::GetDefaultDataStorage(), QmitkDataStorageComboBox::GetSelectedNode(), m_Controls, m_Parent, Ui_QmitkSegmentationControls::MaskSurfaces, MITK_ERROR, mitk::NodePredicateAnd::New(), mitk::NodePredicateNot::New(), mitk::BoolProperty::New(), mitk::NodePredicateProperty::New(), OnComboBoxSelectionChanged(), OnSelectionChanged(), Ui_QmitkSegmentationControls::refImageSelector, and SetToolManagerSelection().
{ // if Image and Surface are selected, enable button if ( (m_Controls->refImageSelector->GetSelectedNode().IsNull()) || (m_Controls->MaskSurfaces->GetSelectedNode().IsNull())) m_Controls->CreateSegmentationFromSurface->setEnabled(false); else m_Controls->CreateSegmentationFromSurface->setEnabled(true); if (!m_Parent || !m_Parent->isVisible()) return; // reaction to BlueBerry selection events // this method will try to figure out if a relevant segmentation and its corresponding original image were selected // a warning is issued if the selection is invalid // appropriate reactions are triggered otherwise mitk::DataNode::Pointer referenceData = FindFirstRegularImage( nodes ); //m_Controls->refImageSelector->GetSelectedNode(); //FindFirstRegularImage( nodes ); mitk::DataNode::Pointer workingData = FindFirstSegmentation( nodes ); bool invalidSelection( !nodes.empty() && ( nodes.size() > 2 || // maximum 2 selected nodes (nodes.size() == 2 && (workingData.IsNull() || referenceData.IsNull()) ) || // with two nodes, one must be the original image, one the segmentation ( workingData.GetPointer() == referenceData.GetPointer() ) //one node is selected as reference and working image // one item is always ok (might be working or reference or nothing ) ); if (invalidSelection) { // TODO visible warning when two images are selected MITK_ERROR << "WARNING: No image, too many (>2) or two equal images were selected."; workingData = NULL; if( m_Controls->refImageSelector->GetSelectedNode().IsNull() ) referenceData = NULL; } if ( workingData.IsNotNull() && referenceData.IsNull() ) { // find the DataStorage parent of workingData // try to find a "normal image" parent, select this as reference image mitk::TNodePredicateDataType<mitk::Image>::Pointer isImage = mitk::TNodePredicateDataType<mitk::Image>::New(); mitk::NodePredicateProperty::Pointer isBinary = mitk::NodePredicateProperty::New("binary", mitk::BoolProperty::New(true)); mitk::NodePredicateNot::Pointer isNotBinary = mitk::NodePredicateNot::New( isBinary ); mitk::NodePredicateAnd::Pointer isNormalImage = mitk::NodePredicateAnd::New( isImage, isNotBinary ); mitk::DataStorage::SetOfObjects::ConstPointer possibleParents = this->GetDefaultDataStorage()->GetSources( workingData, isNormalImage ); if (possibleParents->size() > 0) { if (possibleParents->size() > 1) { // TODO visible warning for this rare case MITK_ERROR << "Selected binary image has multiple parents. Using arbitrary first one for segmentation."; } referenceData = (*possibleParents)[0]; } } //set comboBox to reference image disconnect( m_Controls->refImageSelector, SIGNAL( OnSelectionChanged( const mitk::DataNode* ) ), this, SLOT( OnComboBoxSelectionChanged( const mitk::DataNode* ) ) ); m_Controls->refImageSelector->setCurrentIndex( m_Controls->refImageSelector->Find(referenceData) ); connect( m_Controls->refImageSelector, SIGNAL( OnSelectionChanged( const mitk::DataNode* ) ), this, SLOT( OnComboBoxSelectionChanged( const mitk::DataNode* ) ) ); // if Image and Surface are selected, enable button if ( (m_Controls->refImageSelector->GetSelectedNode().IsNull()) || (m_Controls->MaskSurfaces->GetSelectedNode().IsNull()) || (!referenceData)) m_Controls->CreateSegmentationFromSurface->setEnabled(false); else m_Controls->CreateSegmentationFromSurface->setEnabled(true); SetToolManagerSelection(referenceData, workingData); ForceDisplayPreferencesUponAllImages(); }
void QmitkSegmentationView::OnSelectionChanged | ( | mitk::DataNode * | node ) | [virtual] |
Invoked when the DataManager selection changed.
Definition at line 421 of file QmitkSegmentationView.cpp.
Referenced by CreateNewSegmentation(), CreateQtPartControl(), OnComboBoxSelectionChanged(), and OnSelectionChanged().
{ std::vector<mitk::DataNode*> nodes; nodes.push_back( node ); this->OnSelectionChanged( nodes ); }
void QmitkSegmentationView::OnSurfaceSelectionChanged | ( | ) | [protected, slot] |
Definition at line 430 of file QmitkSegmentationView.cpp.
References Ui_QmitkSegmentationControls::CreateSegmentationFromSurface, QmitkDataStorageComboBox::GetSelectedNode(), m_Controls, Ui_QmitkSegmentationControls::MaskSurfaces, and Ui_QmitkSegmentationControls::refImageSelector.
Referenced by CreateQtPartControl().
{ // if Image and Surface are selected, enable button if ( (m_Controls->refImageSelector->GetSelectedNode().IsNull()) || (m_Controls->MaskSurfaces->GetSelectedNode().IsNull())) m_Controls->CreateSegmentationFromSurface->setEnabled(false); else m_Controls->CreateSegmentationFromSurface->setEnabled(true); }
void QmitkSegmentationView::RenderingManagerReinitialized | ( | const itk::EventObject & | ) |
Definition at line 177 of file QmitkSegmentationView.cpp.
References CheckImageAlignment().
Referenced by Activated().
{ CheckImageAlignment(); }
void QmitkSegmentationView::SetMultiWidget | ( | QmitkStdMultiWidget * | multiWidget ) | [protected] |
Definition at line 120 of file QmitkSegmentationView.cpp.
References QmitkFunctionality::GetDefaultDataStorage(), QmitkStdMultiWidget::GetSlicesRotator(), QmitkStdMultiWidget::GetSlicesSwiveller(), QmitkToolSelectionBox::GetToolManager(), QmitkSlicesInterpolator::Initialize(), m_Controls, Ui_QmitkSegmentationControls::m_ManualToolSelectionBox, m_MultiWidget, m_Parent, Ui_QmitkSegmentationControls::m_SlicesInterpolator, m_SlicesRotationObserverTag1, m_SlicesRotationObserverTag2, QmitkSlicesInterpolator::SetDataStorage(), and SliceRotation().
Referenced by StdMultiWidgetAvailable(), StdMultiWidgetClosed(), and StdMultiWidgetNotAvailable().
{ if (m_MultiWidget) { mitk::SlicesCoordinator* coordinator = m_MultiWidget->GetSlicesRotator(); if (coordinator) { coordinator->RemoveObserver( m_SlicesRotationObserverTag1 ); } coordinator = m_MultiWidget->GetSlicesSwiveller(); if (coordinator) { coordinator->RemoveObserver( m_SlicesRotationObserverTag2 ); } } // save the current multiwidget as the working widget m_MultiWidget = multiWidget; if (m_MultiWidget) { mitk::SlicesCoordinator* coordinator = m_MultiWidget->GetSlicesRotator(); if (coordinator) { itk::ReceptorMemberCommand<QmitkSegmentationView>::Pointer command2 = itk::ReceptorMemberCommand<QmitkSegmentationView>::New(); command2->SetCallbackFunction( this, &QmitkSegmentationView::SliceRotation ); m_SlicesRotationObserverTag1 = coordinator->AddObserver( mitk::SliceRotationEvent(), command2 ); } coordinator = m_MultiWidget->GetSlicesSwiveller(); if (coordinator) { itk::ReceptorMemberCommand<QmitkSegmentationView>::Pointer command2 = itk::ReceptorMemberCommand<QmitkSegmentationView>::New(); command2->SetCallbackFunction( this, &QmitkSegmentationView::SliceRotation ); m_SlicesRotationObserverTag2 = coordinator->AddObserver( mitk::SliceRotationEvent(), command2 ); } } if (m_Parent) { m_Parent->setEnabled(m_MultiWidget); } // tell the interpolation about toolmanager and multiwidget (and data storage) if (m_Controls && m_MultiWidget) { mitk::ToolManager* toolManager = m_Controls->m_ManualToolSelectionBox->GetToolManager(); m_Controls->m_SlicesInterpolator->SetDataStorage( *(this->GetDefaultDataStorage())); m_Controls->m_SlicesInterpolator->Initialize( toolManager, m_MultiWidget ); } }
void QmitkSegmentationView::SetToolManagerSelection | ( | const mitk::DataNode * | referenceData, |
const mitk::DataNode * | workingData | ||
) | [protected] |
Definition at line 576 of file QmitkSegmentationView.cpp.
References Ui_QmitkSegmentationControls::btnNewSegmentation, CheckImageAlignment(), mitk::DataNode::GetName(), QmitkToolSelectionBox::GetToolManager(), Ui_QmitkSegmentationControls::lblReferenceImageSelectionWarning, Ui_QmitkSegmentationControls::lblSegImage, Ui_QmitkSegmentationControls::lblSegmentation, Ui_QmitkSegmentationControls::lblWorkingImageSelectionWarning, m_Controls, Ui_QmitkSegmentationControls::m_ManualToolSelectionBox, mitk::ToolManager::SetReferenceData(), mitk::ToolManager::SetWorkingData(), and Ui_QmitkSegmentationControls::widgetStack.
Referenced by OnSelectionChanged().
{ // called as a result of new BlueBerry selections // tells the ToolManager for manual segmentation about new selections // updates GUI information about what the user should select mitk::ToolManager* toolManager = m_Controls->m_ManualToolSelectionBox->GetToolManager(); toolManager->SetReferenceData(const_cast<mitk::DataNode*>(referenceData)); toolManager->SetWorkingData( const_cast<mitk::DataNode*>(workingData)); // check original image m_Controls->btnNewSegmentation->setEnabled(referenceData != NULL); if (referenceData) { m_Controls->lblReferenceImageSelectionWarning->hide(); } else { m_Controls->lblReferenceImageSelectionWarning->show(); m_Controls->lblWorkingImageSelectionWarning->hide(); m_Controls->lblSegImage->hide(); m_Controls->lblSegmentation->hide(); } // check, wheter reference image is aligned like render windows. Otherwise display a visible warning (because 2D tools will probably not work) CheckImageAlignment(); // check segmentation if (referenceData) { if (!workingData) { m_Controls->lblWorkingImageSelectionWarning->show(); if( m_Controls->widgetStack->currentIndex() == 0 ) { m_Controls->lblSegImage->hide(); m_Controls->lblSegmentation->hide(); } } else { m_Controls->lblWorkingImageSelectionWarning->hide(); if( m_Controls->widgetStack->currentIndex() == 0 ) { m_Controls->lblSegmentation->setText( workingData->GetName().c_str() ); m_Controls->lblSegmentation->show(); m_Controls->lblSegImage->show(); } } } }
void QmitkSegmentationView::SliceRotation | ( | const itk::EventObject & | ) |
Definition at line 182 of file QmitkSegmentationView.cpp.
References CheckImageAlignment().
Referenced by SetMultiWidget().
{ CheckImageAlignment(); }
void QmitkSegmentationView::StdMultiWidgetAvailable | ( | QmitkStdMultiWidget & | stdMultiWidget ) | [virtual] |
Called when a StdMultiWidget is available. Should not be used anymore, see GetActiveStdMultiWidget()
Reimplemented from QmitkFunctionality.
Definition at line 105 of file QmitkSegmentationView.cpp.
References SetMultiWidget().
{ SetMultiWidget(&stdMultiWidget); }
void QmitkSegmentationView::StdMultiWidgetClosed | ( | QmitkStdMultiWidget & | stdMultiWidget ) | [virtual] |
Called when a StdMultiWidget is available. Should not be used anymore, see GetActiveStdMultiWidget()
Reimplemented from QmitkFunctionality.
Definition at line 115 of file QmitkSegmentationView.cpp.
References SetMultiWidget().
{ SetMultiWidget(NULL); }
void QmitkSegmentationView::StdMultiWidgetNotAvailable | ( | ) | [virtual] |
Called when no StdMultiWidget is available anymore. Should not be used anymore, see GetActiveStdMultiWidget()
Reimplemented from QmitkFunctionality.
Definition at line 110 of file QmitkSegmentationView.cpp.
References SetMultiWidget().
{ SetMultiWidget(NULL); }
void QmitkSegmentationView::ToolboxStackPageChanged | ( | int | id ) | [protected, slot] |
Definition at line 364 of file QmitkSegmentationView.cpp.
References QmitkSlicesInterpolator::EnableInterpolation(), mitk::ToolManager::GetReferenceData(), QmitkToolSelectionBox::GetToolManager(), mitk::ToolManager::GetWorkingData(), Ui_QmitkSegmentationControls::lblSegImage, Ui_QmitkSegmentationControls::lblSegmentation, m_Controls, Ui_QmitkSegmentationControls::m_ManualToolSelectionBox, Ui_QmitkSegmentationControls::m_SlicesInterpolator, and Ui_QmitkSegmentationControls::widgetStack.
Referenced by CreateQtPartControl().
{ // interpolation only with manual tools visible m_Controls->m_SlicesInterpolator->EnableInterpolation( id == 0 ); if( id == 0 ) { mitk::DataNode::Pointer workingData = m_Controls->m_ManualToolSelectionBox->GetToolManager()->GetWorkingData(0); if( workingData.IsNotNull() ) { m_Controls->lblSegmentation->setText( workingData->GetName().c_str() ); m_Controls->lblSegImage->show(); m_Controls->lblSegmentation->show(); } } else { m_Controls->lblSegImage->hide(); m_Controls->lblSegmentation->hide(); } // this is just a workaround, should be removed when all tools support 3D+t if (id==2) // lesions { mitk::DataNode::Pointer node = m_Controls->m_ManualToolSelectionBox->GetToolManager()->GetReferenceData(0); if (node.IsNotNull()) { mitk::Image::Pointer image = dynamic_cast<mitk::Image*>( node->GetData() ); if (image.IsNotNull()) { if (image->GetDimension()>3) { m_Controls->widgetStack->setCurrentIndex(0); QMessageBox::information(NULL,"Segmentation","Lesion segmentation is currently not supported for 4D images"); } } } } }
void QmitkSegmentationView::UpdateOrganList | ( | QStringList & | organColors, |
const QString & | organname, | ||
mitk::Color | colorname | ||
) | [protected] |
Definition at line 79 of file QmitkSegmentationOrganNamesHandling.cpp.
Referenced by CreateNewSegmentation().
{ QString listElement( organname + QColor(color.GetRed() * 255 , color.GetGreen() * 255 , color.GetBlue() * 255).name() ); // remove previous definition if necessary int oldIndex = organColors.indexOf( QRegExp(QRegExp::escape(organname) + "#......", Qt::CaseInsensitive)); if (oldIndex < 0 || organColors.at(oldIndex) != listElement ) { if (oldIndex >= 0) { organColors.removeAt( oldIndex ); } // add colored organ name AND sort list organColors.append( listElement ); organColors.sort(); } }
Definition at line 133 of file QmitkSegmentationView.h.
Referenced by Activated(), CheckImageAlignment(), CreateNewSegmentation(), CreateQtPartControl(), CreateSegmentationFromSurface(), Deactivated(), ForceDisplayPreferencesUponAllImages(), NewNodeObjectsGenerated(), OnComboBoxSelectionChanged(), OnSelectionChanged(), OnSurfaceSelectionChanged(), SetMultiWidget(), SetToolManagerSelection(), ToolboxStackPageChanged(), and ~QmitkSegmentationView().
QmitkStdMultiWidget* QmitkSegmentationView::m_MultiWidget [protected] |
Definition at line 136 of file QmitkSegmentationView.h.
Referenced by CheckImageAlignment(), ManualToolSelected(), and SetMultiWidget().
QWidget* QmitkSegmentationView::m_Parent [protected] |
Saves the parent of this view (this is the scrollarea created in CreatePartControl(void*)
Reimplemented from QmitkFunctionality.
Definition at line 130 of file QmitkSegmentationView.h.
Referenced by CreateNewSegmentation(), CreateQtPartControl(), CreateSegmentationFromSurface(), ForceDisplayPreferencesUponAllImages(), OnSelectionChanged(), and SetMultiWidget().
Definition at line 138 of file QmitkSegmentationView.h.
Referenced by CreateQtPartControl(), and ~QmitkSegmentationView().
unsigned long QmitkSegmentationView::m_RenderingManagerObserverTag [protected] |
Definition at line 140 of file QmitkSegmentationView.h.
Referenced by Activated(), and Deactivated().
unsigned long QmitkSegmentationView::m_SlicesRotationObserverTag1 [protected] |
Definition at line 141 of file QmitkSegmentationView.h.
Referenced by SetMultiWidget().
unsigned long QmitkSegmentationView::m_SlicesRotationObserverTag2 [protected] |
Definition at line 142 of file QmitkSegmentationView.h.
Referenced by SetMultiWidget().