#ifndef __CPEXTENSIONS__QT__SIMPLEMPRWIDGET__H__ #define __CPEXTENSIONS__QT__SIMPLEMPRWIDGET__H__ #include #ifdef cpExtensions_QT4 #include #include #include #include #include #include #include #include #define cpExtensions_MAX_POLYS 65535 // ------------------------------------------------------------------------- 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; /** */ struct PolyDataActor { 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 } }; public: explicit SimpleMPRWidget( QWidget* parent = 0 ); virtual ~SimpleMPRWidget( ); // Data management void Clear( ); void SetMainImage( vtkImageData* image ); void AddMesh( vtkPolyData* mesh ); // Visual objects vtkRenderWindowInteractor* GetInteractor( unsigned int i ); vtkActor* GetActor( vtkPolyData* mesh ); 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; }; } // ecapseman } // ecapseman #endif // cpExtensions_QT4 #endif // __CPEXTENSIONS__QT__SIMPLEMPRWIDGET__H__ // eof - $RCSfile$