#include #include #include #include #include #include #include // ------------------------------------------------------------------------- void cpPlugins::Mesh:: SetITK( itk::LightObject* o ) { this->Superclass::SetITK( o ); bool r = this->_ITK_2_VTK< itk::Mesh< float, 2 > >( o ); if( !r ) r = this->_ITK_2_VTK< itk::Mesh< double, 2 > >( o ); if( !r ) r = this->_ITK_2_VTK< itk::Mesh< float, 3 > >( o ); if( !r ) r = this->_ITK_2_VTK< itk::Mesh< double, 3 > >( o ); if( !r ) r = this->_ITK_2_VTK< itk::QuadEdgeMesh< float, 2 > >( o ); if( !r ) r = this->_ITK_2_VTK< itk::QuadEdgeMesh< double, 2 > >( o ); if( !r ) r = this->_ITK_2_VTK< itk::QuadEdgeMesh< float, 3 > >( o ); if( !r ) r = this->_ITK_2_VTK< itk::QuadEdgeMesh< double, 3 > >( o ); } // ------------------------------------------------------------------------- void cpPlugins::Mesh:: SetVTK( vtkObjectBase* o ) { 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; vtkPolyData* mesh = dynamic_cast< vtkPolyData* >( o ); if( mesh == NULL ) { this->m_ITKObject = NULL; this->Modified( ); return; } // fi if( this->m_VTKObject.GetPointer( ) != mesh ) { this->m_VTKObject = mesh; // Copy points /* TODO _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->m_ITKObject = NULL; // TODO: replace this this->Modified( ); } // fi } // ------------------------------------------------------------------------- cpPlugins::Mesh:: Mesh( ) : Superclass( ) { } // ------------------------------------------------------------------------- cpPlugins::Mesh:: ~Mesh( ) { } // eof - $RCSfile$