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