Signals | Public Member Functions | Protected Types | Protected Slots | Protected Member Functions | Protected Attributes

QmitkBoundingObjectWidget Class Reference

#include <QmitkBoundingObjectWidget.h>

Collaboration diagram for QmitkBoundingObjectWidget:
Collaboration graph
[legend]

List of all members.

Signals

void BoundingObjectsChanged (const QString &)

Public Member Functions

 QmitkBoundingObjectWidget (QWidget *parent=0, Qt::WindowFlags f=0)
 ~QmitkBoundingObjectWidget ()
void SetDataStorage (mitk::DataStorage *dataStorage)
mitk::DataStorageGetDataStorage ()
mitk::BoundingObject::Pointer GetSelectedBoundingObject ()
mitk::DataNode::Pointer GetSelectedBoundingObjectNode ()
mitk::DataNode::Pointer GetAllBoundingObjects ()
void setEnabled (bool flag)

Protected Types

enum  BoundingObjectType { CUBOID, CONE, ELLIPSOID, CYLINDER }
typedef std::map
< QTreeWidgetItem
*, mitk::DataNode * > 
ItemNodeMapType

Protected Slots

void CreateBoundingObject (int type)
void OnDelButtonClicked ()
void SelectionChanged ()
void OnItemDoubleClicked (QTreeWidgetItem *item, int col)
void OnItemDataChanged (QTreeWidgetItem *item, int col)

Protected Member Functions

void AddItem (mitk::DataNode *node)
void RemoveItem ()

Protected Attributes

mitk::DataStoragem_DataStorage
QTreeWidget * m_TreeWidget
QComboBox * m_addComboBox
QPushButton * m_DelButton
QPushButton * m_SaveButton
QPushButton * m_LoadButton
QTreeWidgetItem * m_lastSelectedItem
ItemNodeMapType m_ItemNodeMap

Detailed Description

Definition at line 33 of file QmitkBoundingObjectWidget.h.


Member Typedef Documentation

typedef std::map< QTreeWidgetItem*, mitk::DataNode* > QmitkBoundingObjectWidget::ItemNodeMapType [protected]

Definition at line 76 of file QmitkBoundingObjectWidget.h.


Member Enumeration Documentation

Enumerator:
CUBOID 
CONE 
ELLIPSOID 
CYLINDER 

Definition at line 79 of file QmitkBoundingObjectWidget.h.


Constructor & Destructor Documentation

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.

{

}

Member Function Documentation

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]
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();
}

Member Data Documentation

Definition at line 70 of file QmitkBoundingObjectWidget.h.

Referenced by CreateBoundingObject(), and QmitkBoundingObjectWidget().

QPushButton* QmitkBoundingObjectWidget::m_DelButton [protected]

Definition at line 71 of file QmitkBoundingObjectWidget.h.

Referenced by QmitkBoundingObjectWidget().

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]

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines