#ifdef cpExtensions_QT4
#include <map>
-#include <string>
-
+#include <set>
#include <QWidget>
-
+#include <vtkInteractorStyleTrackballCamera.h>
+#include <vtkRenderWindowInteractor.h>
+#include <vtkProp.h>
#include <vtkSmartPointer.h>
-#include <vtkImageData.h>
-#include <vtkPolyDataMapper.h>
-#include <vtkPolyDataNormals.h>
-#include <vtkQuadricLODActor.h>
-#include <vtkStripper.h>
+#include <cpExtensions/Visualization/ImageSliceActors.h>
-#include <cpExtensions/Visualization/MPRObjects.h>
+#define cpExtensions_MAX_POLYS 65535
// -------------------------------------------------------------------------
-class QTreeWidgetItem;
class QVTKWidget;
namespace Ui
public:
typedef SimpleMPRWidget Self;
- typedef cpExtensions::Visualization::MPRObjects TMPRObjects;
- typedef TMPRObjects::TStyle TStyle;
- typedef TMPRObjects::TMouseCommand TMouseCommand;
- typedef TMPRObjects::TMouseWheelCommand TMouseWheelCommand;
- typedef TMPRObjects::TKeyCommand TKeyCommand;
- typedef TMPRObjects::TVoidCommand TVoidCommand;
- typedef TMPRObjects::TMouseMoveCommand TMouseMoveCommand;
- typedef TMPRObjects::TMouseClickCommand TMouseClickCommand;
- typedef TMPRObjects::TMouseDoubleClickCommand TMouseDoubleClickCommand;
- typedef TMPRObjects::TExposeCommand TExposeCommand;
- typedef TMPRObjects::TConfigureCommand TConfigureCommand;
- typedef TMPRObjects::TEnterCommand TEnterCommand;
- typedef TMPRObjects::TLeaveCommand TLeaveCommand;
+ struct TActorCmp
+ {
+ 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;
+
+ protected:
+ /**
+ */
+ class _3DInteractorStyle
+ : public vtkInteractorStyleTrackballCamera
+ {
+ public:
+ vtkTypeMacro(
+ _3DInteractorStyle, vtkInteractorStyleTrackballCamera
+ );
+
+ public:
+ static _3DInteractorStyle* New( );
+
+ virtual void OnChar( ) { }
+ virtual void OnKeyDown( ) { }
+ virtual void OnKeyUp( ) { }
+ virtual void OnKeyRelease( ) { }
+ virtual void OnKeyPress( );
+ };
public:
explicit SimpleMPRWidget( QWidget* parent = 0 );
virtual ~SimpleMPRWidget( );
// Data management
- unsigned int GetNumberOfData( ) const;
- bool AddData(
- vtkImageData* data, const std::string& name,
- const std::string& parent
- );
- bool AddData(
- vtkPolyData* data, const std::string& name
- );
- const std::string& GetMainImage( ) const;
- bool SetMainImage( const std::string& name );
- void DeleteData( const std::string& name );
- void DeleteAllData( );
-
- // Some qt accessors
- void SetDataColor(
- const std::string& name,
- const double& r, const double& g, const double& b
- );
- void ShowData( const std::string& name );
- void HideData( const std::string& name );
- void SetWindowLevel( const double& w, const double& l );
- double GetWindow( ) const;
- double GetLevel( ) const;
-
+ void Clear( );
+ 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 );
+
+ protected:
+ void _AssociateSlices( );
- // Visual objects accessors
- std::string GetSelectedData( ) const;
-
private slots:
void _SyncBottom( int a, int b );
void _SyncTop( int a, int b );
protected:
- static double cm_Colors[ 8 ][ 3 ];
+ Ui::SimpleMPRWidget* m_UI;
+ QVTKWidget* m_VTK[ 4 ];
- Ui::SimpleMPRWidget* m_UI;
- vtkSmartPointer< TMPRObjects > m_MPRObjects;
- QVTKWidget* m_VTK[ 4 ];
-
- struct PolyDataActor
- {
- vtkPolyData* Mesh;
- vtkPolyDataNormals* Normals;
- vtkStripper* Stripper;
- vtkPolyDataMapper* Mapper;
- vtkQuadricLODActor* Actor;
-
- PolyDataActor( );
- virtual ~PolyDataActor( );
- void Configure( vtkPolyData* pd );
- };
-
- struct Data
- {
- enum { IMAGE, MESH } Tag;
- vtkImageData* Image;
- PolyDataActor Mesh;
-
- Data( );
- virtual ~Data( );
-
- Data& operator=( const Data& data );
-
- void SetImageData( vtkImageData* data );
- void SetPolyData( vtkPolyData* data );
-
- vtkImageData* GetImage( );
- vtkPolyData* GetMesh( );
- vtkProp* GetMeshActor( );
- };
+ vtkSmartPointer< vtkRenderer > m_Renderers[ 4 ];
+ vtkSmartPointer< TSliceActors > m_2DSlices[ 3 ];
+ vtkSmartPointer< TSliceActors > m_3DSlices[ 3 ];
- std::string m_MainImage;
- std::map< std::string, Data > m_Data;
- std::map< std::string, std::string > m_Tree;
+ TNamedActors m_NamedActors;
};
} // ecapseman