#include <QmitkBoundingObjectWidget.h>
Definition at line 33 of file QmitkBoundingObjectWidget.h.
typedef std::map< QTreeWidgetItem*, mitk::DataNode* > QmitkBoundingObjectWidget::ItemNodeMapType [protected] |
Definition at line 76 of file QmitkBoundingObjectWidget.h.
enum QmitkBoundingObjectWidget::BoundingObjectType [protected] |
QmitkBoundingObjectWidget::QmitkBoundingObjectWidget | ( | QWidget * | parent = 0 , |
Qt::WindowFlags | f = 0 |
||
) |
Definition at line 36 of file QmitkBoundingObjectWidget.cpp.
References CreateBoundingObject(), m_addComboBox, m_DelButton, m_LoadButton, m_SaveButton, m_TreeWidget, OnDelButtonClicked(), OnItemDataChanged(), OnItemDoubleClicked(), and SelectionChanged().
:QWidget( parent, f ), m_DataStorage(NULL), m_lastSelectedItem(NULL), m_ItemNodeMap() { QBoxLayout* mainLayout = new QVBoxLayout(this); QHBoxLayout* buttonLayout = new QHBoxLayout(); QStringList boList; boList << tr("add") << tr("cube") << tr("cone") << tr("ellipse") << tr("cylinder"); m_addComboBox = new QComboBox(); m_addComboBox->addItems(boList); m_addComboBox->setItemIcon(1, QIcon(":/QmitkSegmentationConstructionKitView/Cube_48.png")); m_addComboBox->setItemIcon(2, QIcon(":/QmitkSegmentationConstructionKitView/Pyramid_48.png")); m_addComboBox->setItemIcon(3, QIcon(":/QmitkSegmentationConstructionKitView/Ellipsoid_48.png")); m_addComboBox->setItemIcon(4, QIcon(":/QmitkSegmentationConstructionKitView/Cylinder_48.png")); buttonLayout->addWidget(m_addComboBox); m_DelButton = new QPushButton("del"); buttonLayout->addWidget(m_DelButton); m_SaveButton = new QPushButton("save"); buttonLayout->addWidget(m_SaveButton); m_SaveButton->setEnabled(false); m_LoadButton = new QPushButton("load"); buttonLayout->addWidget(m_LoadButton); m_LoadButton->setEnabled(false); m_TreeWidget = new QTreeWidget(this); m_TreeWidget->setColumnCount(3); QStringList sList; sList << tr("name") << tr("inverted") << tr("visible"); m_TreeWidget->setHeaderLabels(sList); m_TreeWidget->setColumnWidth(0, 250); m_TreeWidget->setColumnWidth(1, 50); m_TreeWidget->setColumnWidth(2, 50); m_TreeWidget->setAutoScroll(true); m_TreeWidget->setSelectionMode(QAbstractItemView::SingleSelection); mainLayout->addWidget(m_TreeWidget); mainLayout->addLayout(buttonLayout); connect( m_addComboBox , SIGNAL(currentIndexChanged(int)), this, SLOT(CreateBoundingObject(int)) ); connect( m_TreeWidget, SIGNAL(itemSelectionChanged()), this, SLOT(SelectionChanged()) ); /*connect( m_SaveButton, SIGNAL(clicked()), this, SLOT(OnSaveButtonClicked()) ); connect( m_LoadButton, SIGNAL(clicked()), this, SLOT(OnLoadButtonClicked()) );*/ connect( m_DelButton, SIGNAL(clicked()), this, SLOT(OnDelButtonClicked()) ); connect(m_TreeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), this, SLOT(OnItemDoubleClicked(QTreeWidgetItem*, int)) ); connect(m_TreeWidget, SIGNAL(itemChanged(QTreeWidgetItem*, int)), this, SLOT(OnItemDataChanged(QTreeWidgetItem*, int)) ); }
QmitkBoundingObjectWidget::~QmitkBoundingObjectWidget | ( | ) |
Definition at line 94 of file QmitkBoundingObjectWidget.cpp.
{ }
void QmitkBoundingObjectWidget::AddItem | ( | mitk::DataNode * | node ) | [protected] |
Definition at line 159 of file QmitkBoundingObjectWidget.cpp.
References mitk::DataNode::GetData(), mitk::DataNode::GetStringProperty(), m_ItemNodeMap, m_TreeWidget, and MITK_ERROR.
Referenced by CreateBoundingObject().
{ mitk::BoundingObject* boundingObject; boundingObject = dynamic_cast<mitk::BoundingObject*> (node->GetData()); std::string name; node->GetStringProperty("name", name); if (boundingObject) { QTreeWidgetItem* item = new QTreeWidgetItem(); item->setData(0, Qt::EditRole, QString::fromLocal8Bit(name.c_str())); item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsUserCheckable); //checkbox for positive flag item->setData(1, Qt::CheckStateRole, tr("")); item->setCheckState(1, Qt::Unchecked); //checkbox for visibleflag item->setData(2, Qt::CheckStateRole, tr("")); item->setCheckState(2, Qt::Checked); m_TreeWidget->addTopLevelItem(item); m_ItemNodeMap.insert(std::make_pair(item, node)); m_TreeWidget->selectAll(); QList<QTreeWidgetItem*> items = m_TreeWidget->selectedItems(); for( int i = 0; i<items.size(); i++) { m_TreeWidget->setItemSelected(items.at(i), false); } m_TreeWidget->setItemSelected(item, true); } else MITK_ERROR << name << " is not a bounding object or does not exist in data storage" << endl; }
void QmitkBoundingObjectWidget::BoundingObjectsChanged | ( | const QString & | ) | [signal] |
Referenced by CreateBoundingObject(), and OnItemDataChanged().
void QmitkBoundingObjectWidget::CreateBoundingObject | ( | int | type ) | [protected, slot] |
Definition at line 312 of file QmitkBoundingObjectWidget.cpp.
References mitk::DataStorage::Add(), AddItem(), BoundingObjectsChanged(), CONE, CUBOID, CYLINDER, ELLIPSOID, mitk::BaseRenderer::GetInstance(), mitk::RenderingManager::GetInstance(), mitk::PlaneGeometry::IntersectionLine(), mitk::PlaneGeometry::IntersectionPoint(), m_addComboBox, m_DataStorage, mitk::BoolProperty::New(), mitk::FloatProperty::New(), mitk::ColorProperty::New(), mitk::StringProperty::New(), mitk::DataNode::New(), mitk::Cylinder::New(), mitk::Ellipsoid::New(), mitk::Cone::New(), and mitk::Cuboid::New().
Referenced by QmitkBoundingObjectWidget().
{ //get cross position mitk::Point3D pos; mitk::RenderingManager::RenderWindowVector windows = mitk::RenderingManager::GetInstance()->GetAllRegisteredRenderWindows(); //hopefully we have the renderwindows in the "normal" order const mitk::PlaneGeometry *plane1 = mitk::BaseRenderer::GetInstance(windows.at(0))->GetSliceNavigationController()->GetCurrentPlaneGeometry(); const mitk::PlaneGeometry *plane2 = mitk::BaseRenderer::GetInstance(windows.at(1))->GetSliceNavigationController()->GetCurrentPlaneGeometry(); const mitk::PlaneGeometry *plane3 = mitk::BaseRenderer::GetInstance(windows.at(2))->GetSliceNavigationController()->GetCurrentPlaneGeometry(); mitk::Line3D line; if ( (plane1 != NULL) && (plane2 != NULL) && (plane1->IntersectionLine( plane2, line )) ) { if ( !((plane3 != NULL) && (plane3->IntersectionPoint( line, pos ))) ) { return; } } if (type != 0) { mitk::BoundingObject::Pointer boundingObject; static int i = 1; QString name; name.setNum(i); switch (type-1) { case CUBOID: boundingObject = mitk::Cuboid::New(); name.prepend("Cube_"); break; case CONE: boundingObject = mitk::Cone::New(); name.prepend("Cone_"); break; case ELLIPSOID: boundingObject = mitk::Ellipsoid::New(); name.prepend("Ellipse_"); break; case CYLINDER: boundingObject = mitk::Cylinder::New(); name.prepend("Cylinder_"); break; default: return; break; } i++; m_addComboBox->setCurrentIndex(0); // set initial size mitk::Vector3D size; size.Fill(10); boundingObject->GetGeometry()->SetSpacing( size ); boundingObject->GetGeometry()->Translate(pos.GetVectorFromOrigin()); boundingObject->GetTimeSlicedGeometry()->UpdateInformation(); //create node mitk::DataNode::Pointer node = mitk::DataNode::New(); node->SetData( boundingObject); node->SetProperty("name", mitk::StringProperty::New( name.toLocal8Bit().data())); node->SetProperty("color", mitk::ColorProperty::New(0.0, 0.0, 1.0)); node->SetProperty("opacity", mitk::FloatProperty::New(0.7)); node->SetProperty("bounding object", mitk::BoolProperty::New(true)); node->SetProperty("helper object", mitk::BoolProperty::New(true)); m_DataStorage->Add(node); mitk::RenderingManager::GetInstance()->RequestUpdateAll(); emit BoundingObjectsChanged(tr("bounding objects")); AddItem(node); } }
mitk::DataNode::Pointer QmitkBoundingObjectWidget::GetAllBoundingObjects | ( | ) |
Definition at line 397 of file QmitkBoundingObjectWidget.cpp.
References mitk::DataStorage::GetSubset(), m_DataStorage, mitk::BoolProperty::New(), mitk::NodePredicateProperty::New(), mitk::BoundingObjectGroup::New(), mitk::DataNode::New(), and mitk::BoundingObjectGroup::Union.
Referenced by QmitkToolRoiDataSelectionBox::OnRoiDataSelectionChanged().
{ mitk::DataNode::Pointer boundingObjectGroupNode = mitk::DataNode::New(); mitk::BoundingObjectGroup::Pointer boundingObjectGroup = mitk::BoundingObjectGroup::New(); boundingObjectGroup->SetCSGMode(mitk::BoundingObjectGroup::Union); mitk::NodePredicateProperty::Pointer prop = mitk::NodePredicateProperty::New("bounding object", mitk::BoolProperty::New(true)); mitk::DataStorage::SetOfObjects::ConstPointer allBO = m_DataStorage->GetSubset(prop); for (mitk::DataStorage::SetOfObjects::const_iterator it = allBO->begin(); it != allBO->end(); ++it) { mitk::DataNode::Pointer node = *it; mitk::BoundingObject::Pointer boundingObject = dynamic_cast<mitk::BoundingObject*> (node->GetData()); if (boundingObject) boundingObjectGroup->AddBoundingObject(boundingObject); } boundingObjectGroupNode->SetData(boundingObjectGroup); if (boundingObjectGroup->GetCount() >0) return boundingObjectGroupNode; return NULL; }
mitk::DataStorage * QmitkBoundingObjectWidget::GetDataStorage | ( | ) |
Definition at line 292 of file QmitkBoundingObjectWidget.cpp.
References m_DataStorage.
{ return m_DataStorage; }
mitk::BoundingObject::Pointer QmitkBoundingObjectWidget::GetSelectedBoundingObject | ( | ) |
Definition at line 273 of file QmitkBoundingObjectWidget.cpp.
References mitk::DataNode::GetData(), and GetSelectedBoundingObjectNode().
{ mitk::BoundingObject* boundingObject; mitk::DataNode* node = this->GetSelectedBoundingObjectNode(); if (node) { boundingObject = dynamic_cast<mitk::BoundingObject*> (node->GetData()); if (boundingObject) return boundingObject; } return NULL; }
mitk::DataNode::Pointer QmitkBoundingObjectWidget::GetSelectedBoundingObjectNode | ( | ) |
Definition at line 422 of file QmitkBoundingObjectWidget.cpp.
References m_ItemNodeMap, and m_TreeWidget.
Referenced by GetSelectedBoundingObject().
{ QList <QTreeWidgetItem*> selectedItems = m_TreeWidget->selectedItems(); if (selectedItems.size() <1) return NULL; QTreeWidgetItem* item = selectedItems.first(); mitk::DataNode* node = m_ItemNodeMap.find(item)->second; return node; }
void QmitkBoundingObjectWidget::OnDelButtonClicked | ( | ) | [protected, slot] |
Definition at line 307 of file QmitkBoundingObjectWidget.cpp.
References RemoveItem().
Referenced by QmitkBoundingObjectWidget().
{ RemoveItem(); }
void QmitkBoundingObjectWidget::OnItemDataChanged | ( | QTreeWidgetItem * | item, |
int | col | ||
) | [protected, slot] |
Definition at line 209 of file QmitkBoundingObjectWidget.cpp.
References BoundingObjectsChanged(), mitk::DataNode::GetData(), mitk::RenderingManager::GetInstance(), m_ItemNodeMap, m_TreeWidget, mitk::DataNode::SetName(), mitk::BoundingObject::SetPositive(), and mitk::DataNode::SetVisibility().
Referenced by QmitkBoundingObjectWidget().
{ if (m_ItemNodeMap.size() < 1) return; ItemNodeMapType::iterator it = m_ItemNodeMap.find(item); if (it == m_ItemNodeMap.end()) return; mitk::DataNode* node = it->second; //name if (col == 0) { m_TreeWidget->closePersistentEditor(item, col); node->SetName(item->text(0).toLocal8Bit().data()); } //positive else if (col == 1) { mitk::BoundingObject* boundingObject = dynamic_cast<mitk::BoundingObject*> (node->GetData()); if (boundingObject) boundingObject->SetPositive(!(item->checkState(1))); emit BoundingObjectsChanged(tr("bounding objects")); } //visible else if (col == 2) { node->SetVisibility(item->checkState(2)); } mitk::RenderingManager::GetInstance()->RequestUpdateAll(); }
void QmitkBoundingObjectWidget::OnItemDoubleClicked | ( | QTreeWidgetItem * | item, |
int | col | ||
) | [protected, slot] |
Definition at line 201 of file QmitkBoundingObjectWidget.cpp.
References m_TreeWidget.
Referenced by QmitkBoundingObjectWidget().
{ if (col == 0) { m_TreeWidget->openPersistentEditor(item, col); } }
void QmitkBoundingObjectWidget::RemoveItem | ( | ) | [protected] |
Definition at line 245 of file QmitkBoundingObjectWidget.cpp.
References mitk::DataNode::GetData(), m_DataStorage, m_ItemNodeMap, m_TreeWidget, and mitk::DataStorage::Remove().
Referenced by OnDelButtonClicked().
{ //selection mode is set to single selection, so there should not be more than one selected item QList <QTreeWidgetItem*> selectedItems = m_TreeWidget->selectedItems(); QTreeWidgetItem* item = selectedItems.first(); QString str = item->text(0); ItemNodeMapType::iterator it = m_ItemNodeMap.find(item); if (it == m_ItemNodeMap.end()) return; mitk::DataNode* node = it->second; mitk::BoundingObject* boundingObject; if (node) { boundingObject = dynamic_cast<mitk::BoundingObject*> (node->GetData()); if (boundingObject) { //delete item; m_TreeWidget->takeTopLevelItem(m_TreeWidget->indexOfTopLevelItem(item)); m_ItemNodeMap.erase(m_ItemNodeMap.find(item)); m_DataStorage->Remove(node); } } }
void QmitkBoundingObjectWidget::SelectionChanged | ( | ) | [protected, slot] |
Definition at line 118 of file QmitkBoundingObjectWidget.cpp.
References mitk::GlobalInteraction::GetInstance(), mitk::DataNode::GetInteractor(), m_ItemNodeMap, m_lastSelectedItem, m_TreeWidget, mitk::AffineInteractor::New(), and mitk::DataNode::SetInteractor().
Referenced by QmitkBoundingObjectWidget().
{ QList<QTreeWidgetItem*> selectedItems = m_TreeWidget->selectedItems(); if (selectedItems.size() < 1) return; QTreeWidgetItem* selectedItem = selectedItems.first(); if (selectedItem == m_lastSelectedItem) return; if (m_lastSelectedItem != NULL) { m_TreeWidget->closePersistentEditor(m_lastSelectedItem, 0); ItemNodeMapType::iterator it = m_ItemNodeMap.find(m_lastSelectedItem); if (it != m_ItemNodeMap.end()) { mitk::DataNode* last_node = it->second; mitk::AffineInteractor::Pointer last_interactor = dynamic_cast<mitk::AffineInteractor*> (last_node->GetInteractor()); if (last_interactor) mitk::GlobalInteraction::GetInstance()->RemoveInteractor(last_interactor); } } ItemNodeMapType::iterator it = m_ItemNodeMap.find(selectedItem); if (it == m_ItemNodeMap.end()) return; mitk::DataNode* new_node = it->second; mitk::AffineInteractor::Pointer new_interactor = mitk::AffineInteractor::New("AffineInteractions ctrl-drag", new_node); new_node->SetInteractor(new_interactor); mitk::GlobalInteraction::GetInstance()->AddInteractor(new_interactor); m_lastSelectedItem = selectedItem; }
void QmitkBoundingObjectWidget::SetDataStorage | ( | mitk::DataStorage * | dataStorage ) |
Definition at line 287 of file QmitkBoundingObjectWidget.cpp.
References m_DataStorage.
Referenced by QmitkToolRoiDataSelectionBox::SetDataStorage().
{ m_DataStorage = dataStorage; }
void QmitkBoundingObjectWidget::setEnabled | ( | bool | flag ) |
Definition at line 99 of file QmitkBoundingObjectWidget.cpp.
References mitk::RenderingManager::GetInstance(), m_ItemNodeMap, and mitk::DataNode::SetVisibility().
Referenced by QmitkToolRoiDataSelectionBox::OnRoiDataSelectionChanged().
{ ItemNodeMapType::iterator it = m_ItemNodeMap.begin(); while( it != m_ItemNodeMap.end()) { mitk::DataNode* node = it->second; QTreeWidgetItem* item = it->first; if (flag) node->SetVisibility(item->checkState(2)); else node->SetVisibility(flag); ++it; } QWidget::setEnabled(flag); mitk::RenderingManager::GetInstance()->RequestUpdateAll(); }
QComboBox* QmitkBoundingObjectWidget::m_addComboBox [protected] |
Definition at line 70 of file QmitkBoundingObjectWidget.h.
Referenced by CreateBoundingObject(), and QmitkBoundingObjectWidget().
Definition at line 68 of file QmitkBoundingObjectWidget.h.
Referenced by CreateBoundingObject(), GetAllBoundingObjects(), GetDataStorage(), RemoveItem(), and SetDataStorage().
QPushButton* QmitkBoundingObjectWidget::m_DelButton [protected] |
Definition at line 71 of file QmitkBoundingObjectWidget.h.
Referenced by QmitkBoundingObjectWidget().
Definition at line 77 of file QmitkBoundingObjectWidget.h.
Referenced by AddItem(), GetSelectedBoundingObjectNode(), OnItemDataChanged(), RemoveItem(), SelectionChanged(), and setEnabled().
QTreeWidgetItem* QmitkBoundingObjectWidget::m_lastSelectedItem [protected] |
Definition at line 74 of file QmitkBoundingObjectWidget.h.
Referenced by SelectionChanged().
QPushButton* QmitkBoundingObjectWidget::m_LoadButton [protected] |
Definition at line 73 of file QmitkBoundingObjectWidget.h.
Referenced by QmitkBoundingObjectWidget().
QPushButton* QmitkBoundingObjectWidget::m_SaveButton [protected] |
Definition at line 72 of file QmitkBoundingObjectWidget.h.
Referenced by QmitkBoundingObjectWidget().
QTreeWidget* QmitkBoundingObjectWidget::m_TreeWidget [protected] |
Definition at line 69 of file QmitkBoundingObjectWidget.h.
Referenced by AddItem(), GetSelectedBoundingObjectNode(), OnItemDataChanged(), OnItemDoubleClicked(), QmitkBoundingObjectWidget(), RemoveItem(), and SelectionChanged().