30 #include "../kernel/WKernel.h"
31 #include "WFiberSelector.h"
32 #include "WROIManager.h"
36 m_size( fibers->size() ),
40 boost::shared_ptr< std::vector< float > > verts =
m_fibers->getVertices();
41 m_kdTree = boost::shared_ptr< WKdTree >(
new WKdTree( verts->size() / 3, &( ( *verts )[0] ) ) );
44 m_outputColorMap = boost::shared_ptr< std::vector< float > >(
new std::vector< float >( m_size * 4, 1.0 ) );
49 = boost::shared_ptr< boost::function< void() > >(
new boost::function< void() >( boost::bind( &
WFiberSelector::setDirty,
this ) ) );
52 boost::shared_ptr< boost::function< void( osg::ref_ptr< WROI > ) > >(
57 boost::shared_ptr< boost::function< void( osg::ref_ptr< WROI > ) > >(
62 boost::shared_ptr< boost::function< void( boost::shared_ptr< WRMBranch > ) > >(
63 new boost::function<
void( boost::shared_ptr< WRMBranch > ) > (
67 for(
size_t i = 0; i < rois.size(); ++i )
70 ( rois[i] )->getProperties()->getProperty(
"Dirty" )->toPropBool()->set(
true );
82 for( std::list< boost::shared_ptr< WSelectorBranch > >::iterator iter =
m_branches.begin(); iter !=
m_branches.end(); ++iter )
84 std::list< boost::shared_ptr< WSelectorRoi > > rois = ( *iter )->getROIs();
85 for( std::list< boost::shared_ptr< WSelectorRoi > >::iterator roiIter = rois.begin(); roiIter != rois.end(); ++roiIter )
97 boost::shared_ptr< WSelectorBranch > branch;
99 for( std::list< boost::shared_ptr< WSelectorBranch > >::iterator iter =
m_branches.begin(); iter !=
m_branches.end(); ++iter )
108 branch = boost::shared_ptr<WSelectorBranch>(
116 branch->addRoi( sroi );
125 for( std::list< boost::shared_ptr< WSelectorBranch > >::iterator iter =
m_branches.begin(); iter !=
m_branches.end(); ++iter )
127 ( *iter )->removeRoi( roi );
129 if( (*iter )->empty() )
141 for( std::list< boost::shared_ptr< WSelectorBranch > >::iterator iter =
m_branches.begin(); iter !=
m_branches.end(); ++iter )
143 if( branch == ( *iter )->getBranch() )
161 boost::shared_ptr< std::vector< bool > > m_workerBitfield(
new std::vector< bool >(
m_size,
false ) );
162 std::vector< float > m_workerColorMap(
m_size * 4, 1.0 );
166 for( std::list< boost::shared_ptr< WSelectorBranch > >::iterator iter =
m_branches.begin(); iter !=
m_branches.end(); ++iter )
168 boost::shared_ptr< std::vector< bool > > bf = ( *iter )->getBitField();
169 WColor color = ( *iter )->getBranchColor();
171 for(
size_t i = 0; i <
m_size; ++i )
173 ( *m_workerBitfield )[i] = ( *m_workerBitfield )[i] | ( *bf )[i];
178 m_workerColorMap[ 4 * i + 0 ] = color.r();
179 m_workerColorMap[ 4 * i + 1 ] = color.g();
180 m_workerColorMap[ 4 * i + 2 ] = color.b();
181 m_workerColorMap[ 4 * i + 3 ] = color.a();
187 for(
size_t i = 0; i <
m_size; ++i )
189 ( *m_outputBitfield )[i] = ( *m_workerBitfield )[i];
190 ( *m_outputColorMap )[ 4 * i + 0 ] = m_workerColorMap[ 4 * i + 0 ];
191 ( *m_outputColorMap )[ 4 * i + 1 ] = m_workerColorMap[ 4 * i + 1 ];
192 ( *m_outputColorMap )[ 4 * i + 2 ] = m_workerColorMap[ 4 * i + 2 ];
193 ( *m_outputColorMap )[ 4 * i + 3 ] = m_workerColorMap[ 4 * i + 3 ];
219 return WColor( 1.0, 1.0, 1.0, 1.0 );