X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpPlugins%2FInterface%2FMesh.cxx;h=d56d1929aebeb81719640b70f20d80460975c775;hb=b20f90fb12b2d66ca0aadfe093ddf6520067db6f;hp=0dc2f9aab5ab3872b59cdbf5247d5b614a6c18eb;hpb=2da3b422ceb0b6abfd336200a4ede6efe982ebe2;p=cpPlugins.git diff --git a/lib/cpPlugins/Interface/Mesh.cxx b/lib/cpPlugins/Interface/Mesh.cxx index 0dc2f9a..d56d192 100644 --- a/lib/cpPlugins/Interface/Mesh.cxx +++ b/lib/cpPlugins/Interface/Mesh.cxx @@ -1,72 +1,91 @@ #include +#include +#include +#include +#include + #include // ------------------------------------------------------------------------- void cpPlugins::Interface::Mesh:: -SetVTK( vtkObject* mesh ) +SetVTK( vtkObject* object ) { - if( dynamic_cast< vtkPolyData* >( mesh ) != NULL ) - this->m_VTKObject = mesh; - else - this->m_VTKObject = NULL; - this->m_Mapper = NULL; - this->m_Actor = NULL; - this->Modified( ); -} + typedef itk::Mesh< double, 3 > _TMesh; + typedef _TMesh::CellType _TCell; + typedef _TCell::CellAutoPointer _TCellAutoPointer; + typedef itk::LineCell< _TCell > _TLine; + typedef itk::TriangleCell< _TCell > _TTriangle; + typedef itk::PolygonCell< _TCell > _TPolygon; -// ------------------------------------------------------------------------- -void cpPlugins::Interface::Mesh:: -CreateVTKActor( ) -{ - vtkPolyData* pd = this->GetVTK< vtkPolyData >( ); - if( - pd != NULL && - ( - this->m_Mapper.GetPointer( ) == NULL || - this->m_Actor.GetPointer( ) == NULL - ) - ) + vtkPolyData* mesh = dynamic_cast< vtkPolyData* >( object ); + if( mesh == NULL ) { - double range[ 2 ]; - pd->GetScalarRange( range ); - - this->m_Mapper = vtkSmartPointer< vtkPolyDataMapper >::New( ); - this->m_Actor = vtkSmartPointer< vtkActor >::New( ); - this->m_Mapper->SetInputData( pd ); - this->m_Mapper->UseLookupTableScalarRangeOff( ); - this->m_Mapper->SetScalarRange( - range[ 0 ], ( ( range[ 1 ] - range[ 0 ] ) * 0.75 ) + range[ 0 ] - ); - this->m_Actor->SetMapper( this->m_Mapper ); + this->m_ITKObject = NULL; this->Modified( ); + return; } // fi -} -// ------------------------------------------------------------------------- -vtkActor* cpPlugins::Interface::Mesh:: -GetVTKActor( ) -{ - return( this->m_Actor ); -} + if( this->m_VTKObject.GetPointer( ) != mesh ) + { + this->m_VTKObject = mesh; -// ------------------------------------------------------------------------- -const vtkActor* cpPlugins::Interface::Mesh:: -GetVTKActor( ) const -{ - return( this->m_Actor ); -} + // Copy points + _TMesh::Pointer imesh = _TMesh::New( ); + double point[ 3 ]; + for( long i = 0; i < mesh->GetNumberOfPoints( ); ++i ) + { + mesh->GetPoint( i, point ); + _TMesh::PointType ipoint; + ipoint[ 0 ] = point[ 0 ]; + ipoint[ 1 ] = point[ 1 ]; + ipoint[ 2 ] = point[ 2 ]; + imesh->SetPoint( i, ipoint ); + + } // rof + + // Copy cells + for( long i = 0; i < mesh->GetNumberOfCells( ); ++i ) + { + auto cell = mesh->GetCell( i ); + long nPoints = cell->GetNumberOfPoints( ); + _TCellAutoPointer icell; + if( nPoints == 2 ) + { + icell.TakeOwnership( new _TLine ); + icell->SetPointId( 0, cell->GetPointId( 0 ) ); + icell->SetPointId( 1, cell->GetPointId( 1 ) ); + } + else if( nPoints == 3 ) + { + icell.TakeOwnership( new _TTriangle ); + icell->SetPointId( 0, cell->GetPointId( 0 ) ); + icell->SetPointId( 1, cell->GetPointId( 1 ) ); + icell->SetPointId( 2, cell->GetPointId( 2 ) ); + } + else if( nPoints > 3 ) + { + _TPolygon* polygon = new _TPolygon( ); + for( long j = 0; j < nPoints; ++j ) + polygon->AddPointId( cell->GetPointId( j ) ); + icell.TakeOwnership( polygon ); + } // fi + imesh->SetCell( imesh->GetNumberOfCells( ), icell ); + + } // rof + + this->m_ITKObject = imesh; + this->Modified( ); + + } // fi +} // ------------------------------------------------------------------------- cpPlugins::Interface::Mesh:: Mesh( ) - : Superclass( ), - m_Mapper( NULL ), - m_Actor( NULL ) + : Superclass( ) { - this->m_ClassName = "cpPlugins::Interface::Mesh"; - this->m_ClassCategory = "BasicObject"; } // -------------------------------------------------------------------------