#ifndef __CPEXTENSIONS__QT__SIMPLEMPRWIDGET__H__ #define __CPEXTENSIONS__QT__SIMPLEMPRWIDGET__H__ #include #ifdef cpExtensions_QT4 #include #include #include #include #include #include #include #include /* #include #include #include #include #include #include #include #include */ // ------------------------------------------------------------------------- // TODO: class QTreeWidgetItem; class QVTKWidget; namespace Ui { class SimpleMPRWidget; } // ------------------------------------------------------------------------- namespace cpExtensions { namespace QT { /** */ class cpExtensions_EXPORT SimpleMPRWidget : public QWidget { Q_OBJECT; public: typedef SimpleMPRWidget Self; typedef cpExtensions::Visualization::ImageSliceActors TActors; /* TODO 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 PolyDataActor { vtkSmartPointer< vtkPolyData > Data; vtkSmartPointer< vtkPolyDataNormals > Normals; vtkSmartPointer< vtkStripper > Stripper; vtkSmartPointer< vtkPolyDataMapper > Mapper; vtkSmartPointer< vtkQuadricLODActor > 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->Actor = vtkSmartPointer< vtkQuadricLODActor >::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 ] - r[ 0 ] ) * 0.75 ) + r[ 0 ] ); this->Actor->SetMapper( this->Mapper ); this->Actor->DeferLODConstructionOff( ); } }; public: explicit SimpleMPRWidget( QWidget* parent = 0 ); virtual ~SimpleMPRWidget( ); // Data management void Clear( ); void SetMainImage( vtkImageData* image ); void AddMesh( vtkPolyData* mesh ); /* TODO 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; vtkRenderWindowInteractor* GetInteractor( unsigned int i ); // Visual objects accessors std::string GetSelectedData( ) const; vtkProp* GetProp( const std::string& name ); */ private slots: void _SyncBottom( int a, int b ); void _SyncTop( int a, int b ); protected: Ui::SimpleMPRWidget* m_UI; QVTKWidget* m_VTK[ 4 ]; vtkSmartPointer< vtkRenderer > m_Renderers[ 4 ]; vtkSmartPointer< TActors > m_2DSlices[ 3 ]; vtkSmartPointer< TActors > m_3DSlices[ 3 ]; std::map< vtkPolyData*, PolyDataActor > m_PolyDatas; /* TODO static double cm_Colors[ 8 ][ 3 ]; vtkSmartPointer< TMPRObjects > m_MPRObjects; 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( ); }; std::string m_MainImage; std::map< std::string, Data > m_Data; std::map< std::string, std::string > m_Tree; */ }; } // ecapseman } // ecapseman #endif // cpExtensions_QT4 #endif // __CPEXTENSIONS__QT__SIMPLEMPRWIDGET__H__ // eof - $RCSfile$