X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=appli%2FImageMPR%2FImageMPR.cxx;h=0100a138a5faadb54c3841b5c0fb0baa299c5435;hb=a4bc3b8e36e91e45f37a3b7eecb5789c635aa5c0;hp=6cc4ed1ccb1c85980acd0f4757286b16fec94a34;hpb=b4cc15873d07ef87910a4aa6492e74022cda1a25;p=cpPlugins.git diff --git a/appli/ImageMPR/ImageMPR.cxx b/appli/ImageMPR/ImageMPR.cxx index 6cc4ed1..0100a13 100644 --- a/appli/ImageMPR/ImageMPR.cxx +++ b/appli/ImageMPR/ImageMPR.cxx @@ -23,7 +23,10 @@ ImageMPR::ImageMPR( QWidget* parent ) m_UI( new Ui::ImageMPR ), m_ImageReaderClass( "" ), m_ImageWriterClass( "" ), - m_InputImage( NULL ) + m_MeshReaderClass( "" ), + m_MeshWriterClass( "" ), + m_MeshCutterClass( "" ), + m_Image( NULL ) { this->m_UI->setupUi( this ); @@ -60,6 +63,11 @@ ImageMPR::ImageMPR( QWidget* parent ) std::string( "cpPluginsIO." ) + std::string( PLUGIN_EXT ) ); + this->_LoadPlugins( + std::string( PLUGIN_PREFIX ) + + std::string( "cpPluginsBasicFilters." ) + + std::string( PLUGIN_EXT ) + ); } // ------------------------------------------------------------------------- @@ -84,6 +92,7 @@ _LoadPlugins( const std::string& filename ) this->m_ImageWriterClass = ""; this->m_MeshReaderClass = ""; this->m_MeshWriterClass = ""; + this->m_MeshCutterClass = ""; this->m_UI->MenuImageToImage->clear( ); this->m_UI->MenuImageToMesh->clear( ); @@ -106,6 +115,11 @@ _LoadPlugins( const std::string& filename ) this->m_MeshReaderClass = name; else if( category == "MeshWriter" ) this->m_MeshWriterClass = name; + else if( category == "MeshToMeshFilter" ) + { + if( name.find_last_of( "Cutter" ) != std::string::npos ) + this->m_MeshCutterClass = name; + } else if( category == "ImageToImageFilter" ) { QAction* action = @@ -174,6 +188,53 @@ _LoadImage( TPluginImage::Pointer& image ) return( ret ); } +// ------------------------------------------------------------------------- +std::string ImageMPR:: +_ConfigureMeshActors( ) +{ + if( this->m_Mesh.IsNull( ) ) + return( "Valid mesh not found." ); + + this->m_Mesh->CreateVTKActor( ); + vtkActor* vtk_actor = this->m_Mesh->GetVTKActor( ); + if( vtk_actor != NULL ) + { + this->m_MPRObjects->Get3DRenderer( )->AddActor( vtk_actor ); + this->m_MPRObjects->Render( 4 ); + + } // fi + + TMPRObjects::TMPRActors* mprActors = this->m_MPRObjects->GetMPRActors( ); + + std::string err = ""; + for( unsigned int i = 0; i < 3; ++i ) + { + this->m_Cutters[ i ] = this->m_Plugins.CreateProcessObject( this->m_MeshCutterClass ); + this->m_Planes[ i ] = TPluginImplicitFunction::New( ); + this->m_Planes[ i ]->SetFunction( mprActors->GetSliceActors( i )->GetPlaneFunction( ) ); + this->m_Cutters[ i ]->SetInput( 0, this->m_Mesh ); + this->m_Cutters[ i ]->SetInput( 1, this->m_Planes[ i ] ); + std::string lerr = this->m_Cutters[ i ]->Update( ); + if( lerr == "" ) + { + this->m_Cutters[ i ]->GetOutput< TPluginMesh >( 0 )->CreateVTKActor( ); + vtkActor* actor = this->m_Cutters[ i ]->GetOutput< TPluginMesh >( 0 )->GetVTKActor( ); + mprActors->GetSliceActors( i )->AddActor( this->m_Cutters[ i ]->GetVTK< vtkAlgorithm >( ), actor ); + if( i == 0 ) + this->m_MPRObjects->GetXRenderer( )->AddActor( actor ); + else if( i == 1 ) + this->m_MPRObjects->GetYRenderer( )->AddActor( actor ); + else if( i == 2 ) + this->m_MPRObjects->GetZRenderer( )->AddActor( actor ); + + } // fi + err += lerr; + + } // rof + this->m_MPRObjects->RenderAll( ); + return( err ); +} + // ------------------------------------------------------------------------- void ImageMPR:: _triggered_actionOpenPlugins( ) @@ -201,10 +262,10 @@ void ImageMPR:: _triggered_actionOpenInputImage( ) { // Read image - std::string err = this->_LoadImage( this->m_InputImage ); + std::string err = this->_LoadImage( this->m_Image ); if( err == "" ) { - vtkImageData* vtk_id = this->m_InputImage->GetVTKImageData( ); + vtkImageData* vtk_id = this->m_Image->GetVTK< vtkImageData >( ); if( vtk_id != NULL ) { this->m_MPRObjects->SetImage( vtk_id ); @@ -231,7 +292,7 @@ _triggered_actionOpenInputImage( ) void ImageMPR:: _triggered_actionOpenSegmentation( ) { - if( this->m_InputImage.IsNull( ) ) + if( this->m_Image.IsNull( ) ) { QMessageBox::critical( this, @@ -243,10 +304,10 @@ _triggered_actionOpenSegmentation( ) } // fi // Read image - std::string err = this->_LoadImage( this->m_InputSegmentation ); + std::string err = this->_LoadImage( this->m_Segmentation ); if( err == "" ) { - vtkImageData* vtk_id = this->m_InputSegmentation->GetVTKImageData( ); + vtkImageData* vtk_id = this->m_Segmentation->GetVTK< vtkImageData >( ); if( vtk_id != NULL ) { this->m_MPRObjects->AddAuxiliaryImage( vtk_id ); @@ -271,7 +332,7 @@ _triggered_actionOpenSegmentation( ) void ImageMPR:: _triggered_actionOpenInputPolyData( ) { - this->m_InputMesh = NULL; + this->m_Mesh = NULL; // Get a reader from plugins TPluginFilter::Pointer reader = @@ -292,24 +353,15 @@ _triggered_actionOpenInputPolyData( ) // Assign fresh mesh, if any if( err == "" ) { - this->m_InputMesh = reader->GetOutput< TPluginMesh >( 0 ); + this->m_Mesh = reader->GetOutput< TPluginMesh >( 0 ); reader->DisconnectOutputs( ); - if( this->m_InputMesh.IsNotNull( ) ) - { - vtkActor* vtk_actor = this->m_InputMesh->GetVTKActor( ); - if( vtk_actor != NULL ) - { - this->m_MPRObjects->Get3DRenderer( )->AddActor( vtk_actor ); - this->m_MPRObjects->Render( 4 ); - } - else - QMessageBox::critical( - this, - tr( "Error message" ), - tr( "Read mesh does not have a valid vtkActor." ) - ); - - } // fi + err = this->_ConfigureMeshActors( ); + if( err != "" ) + QMessageBox::critical( + this, + tr( "Error message" ), + tr( err.c_str( ) ) + ); } else QMessageBox::critical( @@ -332,7 +384,7 @@ _triggered_actionOpenInputPolyData( ) void ImageMPR:: _triggered_actionImageToImage( ) { - if( this->m_InputImage.IsNull( ) ) + if( this->m_Image.IsNull( ) ) return; // Get filter name @@ -351,7 +403,7 @@ _triggered_actionImageToImage( ) // Execute filter QApplication::setOverrideCursor( Qt::WaitCursor ); this->setEnabled( false ); - filter->SetInput( 0, this->m_InputImage ); + filter->SetInput( 0, this->m_Image ); std::string err = filter->Update( ); QApplication::restoreOverrideCursor( ); this->setEnabled( true ); @@ -361,9 +413,11 @@ _triggered_actionImageToImage( ) { TPluginImage* result = filter->GetOutput< TPluginImage >( 0 ); result->DisconnectPipeline( ); - this->m_InputImage = result; - if( this->m_InputImage.IsNotNull( ) ) - this->m_MPRObjects->SetImage( this->m_InputImage->GetVTKImageData( ) ); + this->m_Image = result; + if( this->m_Image.IsNotNull( ) ) + this->m_MPRObjects->SetImage( + this->m_Image->GetVTK< vtkImageData >( ) + ); } else QMessageBox::critical( @@ -377,7 +431,7 @@ _triggered_actionImageToImage( ) void ImageMPR:: _triggered_actionImageToMesh( ) { - if( this->m_InputImage.IsNull( ) ) + if( this->m_Image.IsNull( ) ) return; // Get filter name @@ -396,7 +450,7 @@ _triggered_actionImageToMesh( ) // Execute filter QApplication::setOverrideCursor( Qt::WaitCursor ); this->setEnabled( false ); - filter->SetInput( 0, this->m_InputImage ); + filter->SetInput( 0, this->m_Image ); std::string err = filter->Update( ); QApplication::restoreOverrideCursor( ); this->setEnabled( true ); @@ -406,10 +460,13 @@ _triggered_actionImageToMesh( ) { TPluginMesh* result = filter->GetOutput< TPluginMesh >( 0 ); result->DisconnectPipeline( ); - this->m_InputMesh = result; - if( this->m_InputMesh.IsNotNull( ) ) - this->m_MPRObjects->Get3DRenderer( )->AddActor( - this->m_InputMesh->GetVTKActor( ) + this->m_Mesh = result; + err = this->_ConfigureMeshActors( ); + if( err != "" ) + QMessageBox::critical( + this, + tr( "Error message" ), + tr( err.c_str( ) ) ); } else