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(this->GetDataTreeNode() - ->GetProperty("label")) != NULL) + bool showLabel = false; + this->GetDataTreeNode()->GetBoolProperty("show label", showLabel); + mitk::StringProperty *labelProperty; + labelProperty = dynamic_cast(this->GetDataTreeNode()->GetProperty("label") ); + mitk::StringVectorProperty *stringVectorProperty; + stringVectorProperty = dynamic_cast(this->GetDataTreeNode()->GetProperty("label")); + if ( showLabel && ( labelProperty != NULL || stringVectorProperty != NULL ) ) { - const char * pointLabel = dynamic_cast( - 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 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( 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 #include @@ -38,6 +39,10 @@ #include #include #include +#include +#include +#include +#include #if (VTK_MAJOR_VERSION >= 5) #include @@ -47,7 +52,7 @@ #include - +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::New(); + vtkSmartPointer points; + points = vtkSmartPointer::New(); + m_pointLabels->SetPoints( points ); + m_pointLabelsStringArray = vtkSmartPointer::New(); + m_pointLabelsStringArray->SetName( STR_LABELS_FIELD ); + m_pointLabels->GetPointData()->AddArray( m_pointLabelsStringArray ); + + // Create the mapper + m_LabeledDataMapper = vtkSmartPointer::New(); + m_LabeledDataMapper->SetInput( m_pointLabels ); + m_LabeledDataMapper->SetFieldDataName( STR_LABELS_FIELD ); + m_LabeledDataMapper->SetLabelModeToLabelFieldData(); + + // Create the actor + m_ActorPointLabels = vtkSmartPointer::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 pointLabelVector; if(showLabel) { - if(dynamic_cast(this->GetDataTreeNode()->GetPropertyList()->GetProperty("label")) != NULL) - pointLabel =dynamic_cast(this->GetDataTreeNode()->GetPropertyList()->GetProperty("label"))->GetValue(); - else + mitk::BaseProperty *labelProperty; + labelProperty = this->GetDataTreeNode()->GetPropertyList()->GetProperty("label"); + if(dynamic_cast(labelProperty) != NULL) + { + pointLabel =dynamic_cast(labelProperty)->GetValue(); + } + else if(dynamic_cast(labelProperty) != NULL) + { + mitk::StringVectorProperty *stringVectorProperty; + stringVectorProperty = dynamic_cast(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 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 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::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 m_LabeledDataMapper; vtkActor *m_SelectedActor; vtkActor *m_UnselectedActor; vtkActor *m_ContourActor; + vtkSmartPointer m_ActorPointLabels; + + vtkSmartPointer m_pointLabels; + vtkSmartPointer 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 &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 +#include + +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 &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 > m_StringVector; + + //! When the time step is not set, return this vector + std::vector m_EmptyVector; +}; + +} + +#endif + + Property changes on: Core\Code\DataManagement\mitkStringVectorProperty.h ___________________________________________________________________ Added: svn:eol-style + native