27 #include "../graphicsEngine/WROIBox.h"
28 #include "../graphicsEngine/WROIArbitrary.h"
31 #include "WSelectorRoi.h"
34 WSelectorRoi::WSelectorRoi( osg::ref_ptr< WROI > roi, boost::shared_ptr< const WDataSetFibers > fibers, boost::shared_ptr< WKdTree> kdTree ) :
38 m_size( fibers->size() ),
41 m_bitField = boost::shared_ptr< std::vector<bool> >(
new std::vector<bool>(
m_size, false ) );
47 = boost::shared_ptr< boost::function< void() > >(
new boost::function< void() >( boost::bind( &
WSelectorRoi::setDirty,
this ) ) );
65 if( osg::dynamic_pointer_cast<WROIBox>(
m_roi ).
get() )
70 osg::ref_ptr<WROIBox> box = osg::dynamic_pointer_cast<
WROIBox>(
m_roi );
74 m_boxMin[1] = box->getMinPos()[1];
76 m_boxMin[2] = box->getMinPos()[2];
82 if( osg::dynamic_pointer_cast<WROIArbitrary>(
m_roi ).get() )
86 float threshold =
static_cast<float>( roi->getThreshold() );
89 size_t ny = roi->getCoordDimensions()[1];
91 double dx = roi->getCoordOffsets()[0];
92 double dy = roi->getCoordOffsets()[1];
93 double dz = roi->getCoordOffsets()[2];
97 size_t x =
static_cast<size_t>( ( *m_currentArray )[i * 3 ] / dx );
98 size_t y =
static_cast<size_t>( ( *m_currentArray )[i * 3 + 1] / dy );
99 size_t z =
static_cast<size_t>( ( *m_currentArray )[i * 3 + 2] / dz );
100 int index = x + y * nx + z * nx * ny;
102 if( static_cast<float>( roi->getValue( index ) ) - threshold > 0.1 )
118 int root = left + ( ( right - left ) / 2 );
119 int axis1 = ( axis + 1 ) % 3;
120 int pointIndex =
m_kdTree->m_tree[root] * 3;
124 boxTest( root + 1, right, axis1 );
128 boxTest( left, root - 1, axis1 );
132 int axis2 = ( axis + 2 ) % 3;
134 >=
m_boxMin[axis1] && ( *m_currentArray )[pointIndex + axis2] <=
m_boxMax[axis2]
135 && ( *m_currentArray )[pointIndex + axis2] >=
m_boxMin[axis2] )
139 boxTest( left, root - 1, axis1 );
140 boxTest( root + 1, right, axis1 );