#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().
1.7.2