Esempio n. 1
0
void mitk::LabelSet::RemoveLabel(PixelType pixelValue)
{
  auto it = m_LabelContainer.rbegin();
  PixelType nextActivePixelValue = it->first;

  for (; it != m_LabelContainer.rend(); ++it)
  {
    if (it->first == pixelValue)
    {
      it->second->RemoveAllObservers();
      m_LabelContainer.erase(pixelValue);
      break;
    }
    nextActivePixelValue = it->first;
  }

  if (m_ActiveLabelValue == pixelValue)
  {
    if (ExistLabel(nextActivePixelValue))
      SetActiveLabel(nextActivePixelValue);
    else
      SetActiveLabel(m_LabelContainer.rbegin()->first);
  }

  RemoveLabelEvent.Send();

  Modified();
}
Esempio n. 2
0
bool LayerSurface::LoadLabelFromFile( const QString& filename )
{
  // create annotation
  SurfaceLabel* label = new SurfaceLabel( this );
  bool ret = label->LoadLabel( filename );
  if ( !ret )
  {
    delete label;
    return false;
  }

  QFileInfo fi(filename);
  if ( fi.suffix() == ".label" )
  {
    label->SetName( fi.completeBaseName() );
  }
  else
  {
    label->SetName( fi.fileName() );
  }

  m_labels.push_back( label );

  SetActiveLabel( m_labels.size() - 1 );

  UpdateOverlay(false);

  emit Modified();
  emit SurfaceLabelAdded( label );
  return true;
}
Esempio n. 3
0
// TODO Parameter as Smartpointer
void mitk::LabelSet::AddLabel(mitk::Label *label)
{
  unsigned int max_size = mitk::Label::MAX_LABEL_VALUE + 1;
  if (m_LabelContainer.size() >= max_size)
    return;

  mitk::Label::Pointer newLabel(label->Clone());

  // TODO use layer of label parameter
  newLabel->SetLayer(m_Layer);

  PixelType pixelValue;
  if (m_LabelContainer.empty())
  {
    pixelValue = newLabel->GetValue();
  }
  else
  {
    pixelValue = m_LabelContainer.rbegin()->first;

    if (pixelValue >= newLabel->GetValue() && m_LabelContainer.find(newLabel->GetValue()) != m_LabelContainer.end())
    {
      ++pixelValue;
      newLabel->SetValue(pixelValue);
    }
    else
    {
      pixelValue = newLabel->GetValue();
    }
  }

  // new map entry
  m_LabelContainer[pixelValue] = newLabel;
  UpdateLookupTable(pixelValue);

  // add DICOM information of the label
  DICOMSegmentationPropertyHandler::SetDICOMSegmentProperties(newLabel);

  itk::SimpleMemberCommand<LabelSet>::Pointer command = itk::SimpleMemberCommand<LabelSet>::New();
  command->SetCallbackFunction(this, &LabelSet::OnLabelModified);
  newLabel->AddObserver(itk::ModifiedEvent(), command);
  // newLabel->AddObserver(itk::ModifiedEvent(),command);

  SetActiveLabel(newLabel->GetValue());
  AddLabelEvent.Send();
  Modified();
}
Esempio n. 4
0
void mitk::LabelSet::SetNextActiveLabel()
{
  auto it = m_LabelContainer.begin();

  for (; it != m_LabelContainer.end(); ++it)
  {
    if (it->first == m_ActiveLabelValue)
    {
      // go to next label
      ++it;
      if (it == m_LabelContainer.end())
      {
        // end of container; next label is first label
        it = m_LabelContainer.begin();
      }
      break; // found the active label; finish loop
    }
  }

  SetActiveLabel(it->first);
}