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