#ifdef cpExtensions_QT4
#include <map>
+#include <set>
#include <QWidget>
-#include <vtkPolyDataNormals.h>
-#include <vtkQuadricLODActor.h>
-#include <vtkRenderer.h>
-#include <vtkStripper.h>
+#include <vtkProp.h>
#include <vtkSmartPointer.h>
#include <cpExtensions/Visualization/ImageSliceActors.h>
public:
typedef SimpleMPRWidget Self;
- typedef cpExtensions::Visualization::ImageSliceActors TSliceActors;
-
- /**
- */
- struct PolyDataActor
+ struct TActorCmp
{
- vtkSmartPointer< vtkPolyData > Data;
- vtkSmartPointer< vtkPolyDataNormals > Normals;
- vtkSmartPointer< vtkStripper > Stripper;
- vtkSmartPointer< vtkPolyDataMapper > Mapper;
- vtkSmartPointer< vtkActor > Actor;
-
- void Configure( vtkPolyData* data )
- {
- this->Data = data;
- double r[ 2 ];
- this->Data->GetScalarRange( r );
-
- this->Normals = vtkSmartPointer< vtkPolyDataNormals >::New( );
- this->Stripper = vtkSmartPointer< vtkStripper >::New( );
- this->Mapper = vtkSmartPointer< vtkPolyDataMapper >::New( );
- this->Normals->SetInputData( this->Data );
- this->Normals->SetFeatureAngle( 60.0 );
- this->Stripper->SetInputConnection(
- this->Normals->GetOutputPort( )
- );
- this->Mapper->SetInputConnection(
- this->Stripper->GetOutputPort( )
- );
- this->Mapper->UseLookupTableScalarRangeOff( );
- this->Mapper->SetScalarRange( r[ 0 ], r[ 1 ] );
-
- unsigned long nPolys = this->Data->GetNumberOfPolys( );
- if( nPolys < cpExtensions_MAX_POLYS )
- {
- this->Actor = vtkSmartPointer< vtkActor >::New( );
- this->Actor->SetMapper( this->Mapper );
- }
- else
- {
- vtkSmartPointer< vtkQuadricLODActor > actor =
- vtkSmartPointer< vtkQuadricLODActor >::New( );
- actor->SetMapper( this->Mapper );
- actor->DeferLODConstructionOff( );
- this->Actor = actor.GetPointer( );
-
- } // fi
- }
+ bool operator()(
+ const vtkSmartPointer< vtkProp >& a,
+ const vtkSmartPointer< vtkProp >& b
+ ) const
+ { return( a.GetPointer( ) < b.GetPointer( ) ); }
};
+ typedef std::set< vtkSmartPointer< vtkProp >, TActorCmp > TActors;
+ typedef std::map< std::string, TActors > TNamedActors;
+ typedef cpExtensions::Visualization::ImageSliceActors TSliceActors;
public:
explicit SimpleMPRWidget( QWidget* parent = 0 );
// Data management
void Clear( );
- void SetMainImage( vtkImageData* image );
- void SetMainActor( vtkImageActor* actor );
- void AddImage( vtkImageData* image );
- void AddImageActor( vtkImageActor* actor );
- void AddMesh( vtkPolyData* mesh );
- void AddMeshActor( vtkProp3D* actor );
- void AddActor( vtkProp* actor );
+ void SetMainImage( vtkImageData* image, const std::string& name );
+ void SetMainActor( vtkImageActor* actor, const std::string& name );
+ void AddImage( vtkImageData* image, const std::string& name );
+ void AddImageActor( vtkImageActor* actor, const std::string& name );
+ void AddMesh( vtkPolyData* mesh, const std::string& name );
+ void AddMeshActor( vtkProp3D* actor, const std::string& name );
+ void AddActor( vtkProp* actor, const std::string& name );
+ const TActors& GetActors( const std::string& name ) const;
// Visual objects
vtkRenderWindowInteractor* GetInteractor( unsigned int i );
vtkRenderer* GetRenderer( unsigned int i );
vtkRenderWindow* GetRenderWindow( unsigned int i );
- /* TODO
- std::vector< std::pair< vtkImageActor*, vtkRenderer* > >
- GetMainImageActors( );
- vtkActor* GetActor( vtkPolyData* mesh );
- */
protected:
void _AssociateSlices( );
vtkSmartPointer< TSliceActors > m_2DSlices[ 3 ];
vtkSmartPointer< TSliceActors > m_3DSlices[ 3 ];
- std::map< vtkPolyData*, PolyDataActor > m_PolyDatas;
+ TNamedActors m_NamedActors;
};
} // ecapseman