Page MenuHomePhabricator

bug3199.diff

Authored By
xplanes
Jan 19 2010, 10:59 AM
Size
16 KB
Referenced Files
None
Subscribers
None

bug3199.diff

Index: Core/Code/files.cmake
===================================================================
--- Core/Code/files.cmake (revision 21081)
+++ Core/Code/files.cmake (working copy)
@@ -105,6 +105,7 @@
DataManagement/mitkStandaloneDataStorage.cpp
DataManagement/mitkStateTransitionOperation.cpp
DataManagement/mitkStringProperty.cpp
+ DataManagement/mitkStringVectorProperty.cpp
DataManagement/mitkSurface.cpp
DataManagement/mitkSurfaceOperation.cpp
DataManagement/mitkThinPlateSplineCurvedGeometry.cpp
Index: Core/Code/Rendering/mitkPointSetMapper2D.cpp
===================================================================
--- Core/Code/Rendering/mitkPointSetMapper2D.cpp (revision 21081)
+++ Core/Code/Rendering/mitkPointSetMapper2D.cpp (working copy)
@@ -26,6 +26,7 @@
#include "mitkPointSet.h"
#include "mitkVtkPropRenderer.h"
#include "mitkGL.h"
+#include "mitkStringVectorProperty.h"
//const float selectedColor[]={1.0,0.0,0.6}; //for selected!
@@ -316,18 +317,36 @@
vert[0]=0; vert[1]=(float)m_Point2DSize-scalardiff*2;
// now paint text if available
- if (dynamic_cast<mitk::StringProperty *>(this->GetDataTreeNode()
- ->GetProperty("label")) != NULL)
+ bool showLabel = false;
+ this->GetDataTreeNode()->GetBoolProperty("show label", showLabel);
+ mitk::StringProperty *labelProperty;
+ labelProperty = dynamic_cast<mitk::StringProperty *>(this->GetDataTreeNode()->GetProperty("label") );
+ mitk::StringVectorProperty *stringVectorProperty;
+ stringVectorProperty = dynamic_cast<mitk::StringVectorProperty *>(this->GetDataTreeNode()->GetProperty("label"));
+ if ( showLabel && ( labelProperty != NULL || stringVectorProperty != NULL ) )
{
- const char * pointLabel = dynamic_cast<mitk::StringProperty *>(
- this->GetDataTreeNode()->GetProperty("label"))->GetValue();
- char buffer[20];
- std::string l = pointLabel;
- if (input->GetSize()>1)
- {
- sprintf(buffer,"%d",it->Index());
- l.append(buffer);
- }
+ std::string l;
+ std::vector<std::string> pointLabelVector;
+ if ( labelProperty != NULL )
+ {
+ const char * pointLabel = labelProperty->GetValue();
+ char buffer[20];
+ l = pointLabel;
+ if (input->GetSize()>1)
+ {
+ sprintf(buffer,"%d",it->Index());
+ l.append(buffer);
+ }
+ }
+ else if ( stringVectorProperty != NULL )
+ {
+ pointLabelVector = stringVectorProperty->GetStringVector( timeStep );
+ if ( j < pointLabelVector.size() )
+ {
+ l = pointLabelVector[ j ];
+ }
+ }
+
if (unselectedColor != NULL)
{
mitk::VtkPropRenderer* OpenGLrenderer = dynamic_cast<mitk::VtkPropRenderer*>( renderer );
Index: Core/Code/Rendering/mitkPointSetVtkMapper3D.cpp
===================================================================
--- Core/Code/Rendering/mitkPointSetVtkMapper3D.cpp (revision 21081)
+++ Core/Code/Rendering/mitkPointSetVtkMapper3D.cpp (working copy)
@@ -22,6 +22,7 @@
#include "mitkColorProperty.h"
#include "mitkVtkPropRenderer.h"
#include "mitkPointSet.h"
+#include "mitkStringVectorProperty.h"
#include <vtkActor.h>
#include <vtkAppendPolyData.h>
@@ -38,6 +39,10 @@
#include <vtkVectorText.h>
#include <vtkTransform.h>
#include <vtkTransformPolyDataFilter.h>
+#include <vtkLabeledDataMapper.h>
+#include <vtkStringArray.h>
+#include <vtkPointData.h>
+#include <vtkActor2D.h>
#if (VTK_MAJOR_VERSION >= 5)
#include <vtkPolyDataAlgorithm.h>
@@ -47,7 +52,7 @@
#include <stdlib.h>
-
+const char* STR_LABELS_FIELD = "LABEL";
const mitk::PointSet* mitk::PointSetVtkMapper3D::GetInput()
{
@@ -76,6 +81,25 @@
m_SelectedActor = vtkActor::New();
m_UnselectedActor = vtkActor::New();
m_ContourActor = vtkActor::New();
+
+ // Labels -> Create the polydata
+ m_pointLabels = vtkSmartPointer<vtkPolyData>::New();
+ vtkSmartPointer<vtkPoints> points;
+ points = vtkSmartPointer<vtkPoints>::New();
+ m_pointLabels->SetPoints( points );
+ m_pointLabelsStringArray = vtkSmartPointer<vtkStringArray>::New();
+ m_pointLabelsStringArray->SetName( STR_LABELS_FIELD );
+ m_pointLabels->GetPointData()->AddArray( m_pointLabelsStringArray );
+
+ // Create the mapper
+ m_LabeledDataMapper = vtkSmartPointer<vtkLabeledDataMapper>::New();
+ m_LabeledDataMapper->SetInput( m_pointLabels );
+ m_LabeledDataMapper->SetFieldDataName( STR_LABELS_FIELD );
+ m_LabeledDataMapper->SetLabelModeToLabelFieldData();
+
+ // Create the actor
+ m_ActorPointLabels = vtkSmartPointer<vtkActor2D>::New();
+
}
mitk::PointSetVtkMapper3D::~PointSetVtkMapper3D()
@@ -85,6 +109,11 @@
m_SelectedActor->Delete();
m_UnselectedActor->Delete();
m_ContourActor->Delete();
+
+ m_ActorPointLabels = NULL;
+ m_LabeledDataMapper = NULL;
+ m_pointLabels = NULL;
+ m_pointLabelsStringArray = NULL;
}
void mitk::PointSetVtkMapper3D::ReleaseGraphicsResources(vtkWindow *renWin)
@@ -109,6 +138,9 @@
m_PointsAssembly->RemovePart(m_UnselectedActor);
if(m_PointsAssembly->GetParts()->IsItemPresent(m_ContourActor))
m_PointsAssembly->RemovePart(m_ContourActor);
+ if (m_PointsAssembly->GetParts()->IsItemPresent(m_ActorPointLabels))
+ m_PointsAssembly->RemovePart( m_ActorPointLabels );
+
// exceptional displaying for PositionTracker -> MouseOrientationTool
int mapperID;
@@ -161,17 +193,36 @@
m_PointSize = pointSizeProp->GetValue();
//get the property for creating a label onto every point only once
- bool showLabel = true;
+bool showLabel = false;
this->GetDataTreeNode()->GetBoolProperty("show label", showLabel);
const char * pointLabel=NULL;
+ std::vector<std::string> pointLabelVector;
if(showLabel)
{
- if(dynamic_cast<mitk::StringProperty *>(this->GetDataTreeNode()->GetPropertyList()->GetProperty("label")) != NULL)
- pointLabel =dynamic_cast<mitk::StringProperty *>(this->GetDataTreeNode()->GetPropertyList()->GetProperty("label"))->GetValue();
- else
+ mitk::BaseProperty *labelProperty;
+ labelProperty = this->GetDataTreeNode()->GetPropertyList()->GetProperty("label");
+ if(dynamic_cast<mitk::StringProperty *>(labelProperty) != NULL)
+ {
+ pointLabel =dynamic_cast<mitk::StringProperty *>(labelProperty)->GetValue();
+ }
+ else if(dynamic_cast<mitk::StringVectorProperty *>(labelProperty) != NULL)
+ {
+ mitk::StringVectorProperty *stringVectorProperty;
+ stringVectorProperty = dynamic_cast<mitk::StringVectorProperty *>(labelProperty);
+ pointLabelVector = stringVectorProperty->GetStringVector( timestep );
+ }
+ else
showLabel = false;
}
+ // Labels
+ if(showLabel)
+ {
+ m_pointLabels->GetPoints( )->SetNumberOfPoints( itkPointSet->GetPoints()->Size() );
+ m_pointLabelsStringArray->SetNumberOfValues( itkPointSet->GetPoints()->Size() );
+ }
+
+
//check if the list for the PointDataContainer is the same size as the PointsContainer. Is not, then the points were inserted manually and can not be visualized according to the PointData (selected/unselected)
bool pointDataBroken = (itkPointSet->GetPointData()->Size() != itkPointSet->GetPoints()->Size());
@@ -295,43 +346,69 @@
if (showLabel)
{
- char buffer[20];
- std::string l = pointLabel;
- if ( input->GetSize()>1 )
- {
- sprintf(buffer,"%d",j+1);
- l.append(buffer);
+ if ( pointLabel == NULL )
+ {
+ std::string l;
+ if ( j < pointLabelVector.size() )
+ {
+ l = pointLabelVector[ j ];
+ }
+
+ mitk::Point3D point1;
+ point1 = input->GetPoint(pointsIter->Index(), timestep);
+ m_pointLabels->GetPoints( )->SetPoint(
+ pointsIter->Index(),
+ point1[ 0 ],
+ point1[ 1 ],
+ point1[ 2 ] );
+ m_pointLabelsStringArray->SetValue( pointsIter->Index(), l.c_str() );
}
- // Define the text for the label
- vtkVectorText *label = vtkVectorText::New();
- label->SetText(l.c_str());
+ else
+ {
+
+ char buffer[20];
+ std::string l = pointLabel;
+ if ( pointLabel != NULL )
+ {
+ l = pointLabel;
+ if ( input->GetSize()>1 )
+ {
+ sprintf(buffer,"%d",j+1);
+ l.append(buffer);
+ }
+ }
- //# Set up a transform to move the label to a new position.
- vtkTransform *aLabelTransform =vtkTransform::New();
- aLabelTransform->Identity();
- itk::Point<float> point1 = pointsIter->Value();
- aLabelTransform->Translate(point1[0]+2,point1[1]+2,point1[2]);
- aLabelTransform->Scale(5.7,5.7,5.7);
+ // Define the text for the label
+ vtkVectorText *label = vtkVectorText::New();
+ label->SetText(l.c_str());
- //# Move the label to a new position.
- vtkTransformPolyDataFilter *labelTransform = vtkTransformPolyDataFilter::New();
- labelTransform->SetTransform(aLabelTransform);
- aLabelTransform->Delete();
- labelTransform->SetInput(label->GetOutput());
- label->Delete();
+ //# Set up a transform to move the label to a new position.
+ vtkTransform *aLabelTransform =vtkTransform::New();
+ aLabelTransform->Identity();
+ itk::Point<float> point1 = pointsIter->Value();
+ aLabelTransform->Translate(point1[0]+2,point1[1]+2,point1[2]);
+ aLabelTransform->Scale(5.7,5.7,5.7);
- //add it to the wright PointList
- if (pointType)
- {
- m_vtkSelectedPointList->AddInput(labelTransform->GetOutput());
- ++m_NumberOfSelectedAdded;
- }
- else
- {
- m_vtkUnselectedPointList->AddInput(labelTransform->GetOutput());
- ++m_NumberOfUnselectedAdded;
- }
- labelTransform->Delete();
+ //# Move the label to a new position.
+ vtkTransformPolyDataFilter *labelTransform = vtkTransformPolyDataFilter::New();
+ labelTransform->SetTransform(aLabelTransform);
+ aLabelTransform->Delete();
+ labelTransform->SetInput(label->GetOutput());
+ label->Delete();
+
+ //add it to the wright PointList
+ if (pointType)
+ {
+ m_vtkSelectedPointList->AddInput(labelTransform->GetOutput());
+ ++m_NumberOfSelectedAdded;
+ }
+ else
+ {
+ m_vtkUnselectedPointList->AddInput(labelTransform->GetOutput());
+ ++m_NumberOfUnselectedAdded;
+ }
+ labelTransform->Delete();
+ }
}
if(pointDataIter != itkPointSet->GetPointData()->End())
@@ -353,6 +430,13 @@
m_VtkSelectedPolyDataMapper->Delete();
m_PointsAssembly->AddPart(m_SelectedActor);
}
+ if ( showLabel )
+ {
+ m_pointLabels->Modified();
+ m_ActorPointLabels = vtkSmartPointer<vtkActor2D>::New();
+ m_ActorPointLabels->SetMapper( m_LabeledDataMapper );
+ m_PointsAssembly->AddPart( m_ActorPointLabels );
+ }
m_vtkSelectedPointList->Delete();
if (m_NumberOfUnselectedAdded > 0)
@@ -409,6 +493,7 @@
m_UnselectedActor->VisibilityOff();
m_SelectedActor->VisibilityOff();
m_ContourActor->VisibilityOff();
+ m_ActorPointLabels->VisibilityOff();
return;
}
Index: Core/Code/Rendering/mitkPointSetVtkMapper3D.h
===================================================================
--- Core/Code/Rendering/mitkPointSetVtkMapper3D.h (revision 21081)
+++ Core/Code/Rendering/mitkPointSetVtkMapper3D.h (working copy)
@@ -23,12 +23,17 @@
#include "mitkBaseVtkMapper3D.h"
#include "mitkBaseRenderer.h"
+#include "vtkSmartPointer.h"
+
class vtkActor;
class vtkPropAssembly;
class vtkAppendPolyData;
class vtkPolyData;
class vtkTubeFilter;
class vtkPolyDataMapper;
+class vtkLabeledDataMapper;
+class vtkActor2D;
+class vtkStringArray;
namespace mitk {
@@ -129,10 +134,15 @@
vtkPolyDataMapper *m_VtkSelectedPolyDataMapper;
vtkPolyDataMapper *m_VtkUnselectedPolyDataMapper;
// vtkPolyDataMapper *m_vtkContourPolyDataMapper;
+ vtkSmartPointer<vtkLabeledDataMapper> m_LabeledDataMapper;
vtkActor *m_SelectedActor;
vtkActor *m_UnselectedActor;
vtkActor *m_ContourActor;
+ vtkSmartPointer<vtkActor2D> m_ActorPointLabels;
+
+ vtkSmartPointer<vtkPolyData> m_pointLabels;
+ vtkSmartPointer<vtkStringArray> m_pointLabelsStringArray;
vtkPropAssembly *m_PointsAssembly;
Index: Core/Code/DataManagement/mitkStringVectorProperty.cpp
===================================================================
--- Core/Code/DataManagement/mitkStringVectorProperty.cpp (revision 0)
+++ Core/Code/DataManagement/mitkStringVectorProperty.cpp (revision 0)
@@ -0,0 +1,44 @@
+/*=========================================================================
+
+Program: Medical Imaging & Interaction Toolkit
+Language: C++
+Date: $Date: 2007-12-11 14:46:19 +0100 (mar, 11 dic 2007) $
+Version: $Revision: 13129 $
+
+Copyright (c) German Cancer Research Center, Division of Medical and
+Biological Informatics. All rights reserved.
+See MITKCopyright.txt or http://www.mitk.org/copyright.html for details.
+
+This software is distributed WITHOUT ANY WARRANTY; without even
+the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+PURPOSE. See the above copyright notices for more information.
+
+=========================================================================*/
+
+#include "mitkStringVectorProperty.h"
+
+
+mitk::StringVectorProperty::StringVectorProperty()
+{
+ SetNumberOfTimeSteps( 1 );
+}
+
+std::vector<std::string> &mitk::StringVectorProperty::GetStringVector( int iTimeStep )
+{
+ if ( iTimeStep < m_StringVector.size() )
+ {
+ return m_StringVector[ iTimeStep ];
+ }
+
+ return m_EmptyVector;
+}
+
+bool mitk::StringVectorProperty::operator==( const BaseProperty& property ) const
+{
+ return false;
+}
+
+void mitk::StringVectorProperty::SetNumberOfTimeSteps( int iNumTimeSteps )
+{
+ m_StringVector.resize( iNumTimeSteps );
+}
Property changes on: Core\Code\DataManagement\mitkStringVectorProperty.cpp
___________________________________________________________________
Added: svn:eol-style
+ native
Index: Core/Code/DataManagement/mitkStringVectorProperty.h
===================================================================
--- Core/Code/DataManagement/mitkStringVectorProperty.h (revision 0)
+++ Core/Code/DataManagement/mitkStringVectorProperty.h (revision 0)
@@ -0,0 +1,67 @@
+/*=========================================================================
+
+Program: Medical Imaging & Interaction Toolkit
+Language: C++
+Date: $Date: 2008-02-08 13:23:19 +0100 (vie, 08 feb 2008) $
+Version: $Revision: 13561 $
+
+Copyright (c) German Cancer Research Center, Division of Medical and
+Biological Informatics. All rights reserved.
+See MITKCopyright.txt or http://www.mitk.org/copyright.html for details.
+
+This software is distributed WITHOUT ANY WARRANTY; without even
+the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+PURPOSE. See the above copyright notices for more information.
+
+=========================================================================*/
+
+#ifndef _MITK_STRING_VECTOR_PROPERTY__H_
+#define _MITK_STRING_VECTOR_PROPERTY__H_
+
+#include "mitkBaseProperty.h"
+#include <vector>
+#include <string>
+
+namespace mitk {
+
+/**
+ * @brief Property for vector of strings
+ * @ingroup DataManagement
+ */
+class MITK_CORE_EXPORT StringVectorProperty : public mitk::BaseProperty
+{
+public:
+
+ mitkClassMacro( StringVectorProperty, mitk::BaseProperty );
+
+ itkNewMacro(StringVectorProperty);
+
+ //! Return the string vector reference
+ std::vector<std::string> &GetStringVector( int iTimeStep = 0 );
+
+ //! Resize vector
+ void SetNumberOfTimeSteps( int iNumTimeSteps );
+
+ //! Always return false
+ virtual bool operator==(const BaseProperty& property) const;
+
+private:
+ /**
+ * Default constructor.
+ */
+ StringVectorProperty();
+
+private:
+
+ //! String vector for each time step
+ std::vector< std::vector<std::string> > m_StringVector;
+
+ //! When the time step is not set, return this vector
+ std::vector<std::string> m_EmptyVector;
+};
+
+}
+
+#endif
+
+
Property changes on: Core\Code\DataManagement\mitkStringVectorProperty.h
___________________________________________________________________
Added: svn:eol-style
+ native

File Metadata

Mime Type
text/plain
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
402
Default Alt Text
bug3199.diff (16 KB)