#include <cpPlugins/DataObjects/BoundingBox.h>
#include <limits>
#include <vtkDataSet.h>
+#include <cpInstances_SimpleImages.h>
+#include <cpInstances_Meshes.h>
// -------------------------------------------------------------------------
void cpPlugins::DataObjects::BoundingBox::
this->m_VTK = this->m_Outline->GetOutput( );
}
+// -------------------------------------------------------------------------
+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$