]> Creatis software - cpPlugins.git/blobdiff - lib/cpPlugins/DataObjects/BoundingBox.cxx
...
[cpPlugins.git] / lib / cpPlugins / DataObjects / BoundingBox.cxx
index dfceb29f255081a30e7baac44e0be4e2c06848fa..4a81b0b6a578c12250f7ba7b9f4fd755f6185ece 100644 (file)
@@ -1,8 +1,6 @@
 #include <cpPlugins/DataObjects/BoundingBox.h>
 #include <limits>
 #include <vtkDataSet.h>
-#include <cpInstances_SimpleImages.h>
-#include <cpInstances_Meshes.h>
 
 // -------------------------------------------------------------------------
 void cpPlugins::DataObjects::BoundingBox::
@@ -12,44 +10,7 @@ SetDataObject( DataObject* o )
   auto v = o->GetVTK< vtkObjectBase >( );
   if( v != NULL )      this->SetVTK( v );
   else if( i != NULL ) this->SetITK( i );
-}
-
-// -------------------------------------------------------------------------
-void cpPlugins::DataObjects::BoundingBox::
-SetITK( itk::LightObject* o )
-{
-  bool     r = this->_ITKImage< 1 >( o );
-  if( !r ) r = this->_ITKImage< 2 >( o );
-  if( !r ) r = this->_ITKImage< 3 >( o );
-  if( !r ) r = this->_ITKImage< 4 >( o );
-  if( !r ) r = this->_ITKPointSet< float, 2 >( o );
-  if( !r ) r = this->_ITKPointSet< double, 2 >( o );
-  if( !r ) r = this->_ITKPointSet< float, 3 >( o );
-  if( !r ) r = this->_ITKPointSet< double, 3 >( o );
-  if( r )
-    this->_UpdateVTK( );
-}
-
-// -------------------------------------------------------------------------
-void cpPlugins::DataObjects::BoundingBox::
-SetVTK( vtkObjectBase* o )
-{
-  auto ds = dynamic_cast< vtkDataSet* >( o );
-  if( ds != NULL )
-  {
-    double bounds[ 6 ];
-    ds->GetBounds( bounds );
-    this->m_Points[ 0 ].clear( );
-    this->m_Points[ 1 ].clear( );
-    this->m_Points[ 0 ].push_back( bounds[ 0 ] );
-    this->m_Points[ 1 ].push_back( bounds[ 1 ] );
-    this->m_Points[ 0 ].push_back( bounds[ 2 ] );
-    this->m_Points[ 1 ].push_back( bounds[ 3 ] );
-    this->m_Points[ 0 ].push_back( bounds[ 4 ] );
-    this->m_Points[ 1 ].push_back( bounds[ 5 ] );
-    this->_UpdateVTK( );
-
-  } // fi
+  this->_UpdateVTK( );
 }
 
 // -------------------------------------------------------------------------
@@ -82,38 +43,7 @@ Blend( Self* other )
     if( other->m_Points[ 1 ][ d ] > this->m_Points[ 1 ][ d ] )
       this->m_Points[ 1 ][ d ] = other->m_Points[ 1 ][ d ];
   this->Modified( );
-}
-
-// -------------------------------------------------------------------------
-template< class _TPoint >
-void cpPlugins::DataObjects::BoundingBox::
-SetMinimum( const _TPoint& p )
-{
-  this->_SetPoint( 0, p );
-}
-
-// -------------------------------------------------------------------------
-template< class _TPoint >
-void cpPlugins::DataObjects::BoundingBox::
-SetMaximum( const _TPoint& p )
-{
-  this->_SetPoint( 1, p );
-}
-
-// -------------------------------------------------------------------------
-template< class _TPoint >
-_TPoint cpPlugins::DataObjects::BoundingBox::
-GetMinimum( ) const
-{
-  return( this->_GetPoint< _TPoint >( 0 ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TPoint >
-_TPoint cpPlugins::DataObjects::BoundingBox::
-GetMaximum( ) const
-{
-  return( this->_GetPoint< _TPoint >( 1 ) );
+  this->_UpdateVTK( );
 }
 
 // -------------------------------------------------------------------------
@@ -137,17 +67,22 @@ cpPlugins::DataObjects::BoundingBox::
 void cpPlugins::DataObjects::BoundingBox::
 _UpdateVTK( )
 {
+  auto dobj = this->GetVTK< vtkDataSet >( );
+  if( dobj == NULL )
+    return;
+
   // Get bounds
-  double bounds[ 6 ] = { 0 };
-  unsigned int dim = this->m_Points[ 0 ].size( );
-  dim = ( this->m_Points[ 1 ].size( ) < dim )? this->m_Points[ 1 ].size( ): dim;
-  dim = ( dim < 3 )? dim: 3;
-  for( unsigned int d = 0; d < dim; ++d )
-  {
-    bounds[ d << 1 ] = this->m_Points[ 0 ][ d ];
-    bounds[ ( d << 1 ) + 1 ] = this->m_Points[ 1 ][ d ];
+  double bounds[ 6 ];
+  dobj->GetBounds( bounds );
 
-  } // rof
+  this->m_Points[ 0 ].clear( );
+  this->m_Points[ 1 ].clear( );
+  this->m_Points[ 0 ].push_back( bounds[ 0 ] );
+  this->m_Points[ 0 ].push_back( bounds[ 2 ] );
+  this->m_Points[ 0 ].push_back( bounds[ 4 ] );
+  this->m_Points[ 1 ].push_back( bounds[ 1 ] );
+  this->m_Points[ 1 ].push_back( bounds[ 3 ] );
+  this->m_Points[ 1 ].push_back( bounds[ 5 ] );
 
   // Update vtk objects
   this->m_Outline->SetBounds( bounds );
@@ -155,93 +90,4 @@ _UpdateVTK( )
   this->m_VTK = this->m_Outline->GetOutput( );
 }
 
-// -------------------------------------------------------------------------
-template< class _TPoint >
-void cpPlugins::DataObjects::BoundingBox::
-_SetPoint( unsigned int m, const _TPoint& p )
-{
-  this->m_Points[ m ].clear( );
-  for( unsigned int d = 0; d < _TPoint::PointDimension; ++d )
-    this->m_Points[ m ].push_back( double( p[ d ] ) );
-  this->_UpdateVTK( );
-  this->Modified( );
-}
-
-// -------------------------------------------------------------------------
-template< class _TPoint >
-_TPoint cpPlugins::DataObjects::BoundingBox::
-_GetPoint( unsigned int m ) const
-{
-  unsigned int dim = this->m_Points[ m ].size( );
-  dim = ( _TPoint::PointDimension < dim )? _TPoint::PointDimension: dim;
-  _TPoint p;
-  p.Fill( 0 );
-  for( unsigned int d = 0; d < dim; ++d )
-    p[ d ] = this->m_Points[ m ][ d ];
-  return( p );
-}
-
-// -------------------------------------------------------------------------
-template< unsigned int _NDim >
-bool cpPlugins::DataObjects::BoundingBox::
-_ITKImage( itk::LightObject* o )
-{
-  auto image = dynamic_cast< itk::ImageBase< _NDim >* >( o );
-  if( image == NULL )
-    return( false );
-
-  auto region = image->GetLargestPossibleRegion( );
-  auto i0 = region.GetIndex( );
-  auto i1 = i0 + region.GetSize( );
-
-  typename itk::ImageBase< _NDim >::PointType p0, p1;
-  image->TransformIndexToPhysicalPoint( i0, p0 );
-  image->TransformIndexToPhysicalPoint( i1, p1 );
-  this->m_Points[ 0 ].clear( );
-  this->m_Points[ 1 ].clear( );
-
-  for( unsigned int d = 0; d < _NDim; ++d )
-  {
-    this->m_Points[ 0 ].push_back( double( p0[ d ] ) );
-    this->m_Points[ 1 ].push_back( double( p1[ d ] ) );
-
-  } // rof
-  this->Modified( );
-  return( true );
-}
-
-// -------------------------------------------------------------------------
-template< class _TScalar, unsigned int _NDim >
-bool cpPlugins::DataObjects::BoundingBox::
-_ITKPointSet( itk::LightObject* o )
-{
-  typedef itk::PointSet< _TScalar, _NDim > _TPointSet;
-  typedef itk::BoundingBox< typename _TPointSet::PointIdentifier, _NDim, _TScalar, typename _TPointSet::PointsContainer > _TBBox;
-
-  auto ps = dynamic_cast< _TPointSet* >( o );
-  if( ps == NULL )
-    return( false );
-
-  this->m_Points[ 0 ].clear( );
-  this->m_Points[ 1 ].clear( );
-
-  typename _TBBox::Pointer bb = _TBBox::New( );
-  bb->SetPoints( ps->GetPoints( ) );
-  if( bb->ComputeBoundingBox( ) )
-  {
-    auto p0 = bb->GetMinimum( );
-    auto p1 = bb->GetMaximum( );
-    for( unsigned int d = 0; d < _NDim; ++d )
-    {
-      this->m_Points[ 0 ].push_back( double( p0[ d ] ) );
-      this->m_Points[ 1 ].push_back( double( p1[ d ] ) );
-
-    } // rof
-    this->Modified( );
-    return( true );
-  }
-  else
-    return( false );
-}
-
 // eof - $RCSfile$