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 );
boost::shared_ptr< boost::function< void(boost::shared_ptr< WRMBranch >) > > m_removeBranchSignal
Signal for updating the selector.
void setDirty()
setter sets the dirty flag
static WKernel * getRunningKernel()
Returns pointer to the currently running kernel.
implements the computation of a kd tree on a point array
boost::shared_ptr< std::vector< bool > > getBitfield()
getter
boost::shared_ptr< std::vector< bool > > m_outputBitfield
bit field of activated fibers
TODO(schurade): Document this!
size_t m_size
number of fibers in the dataset
boost::shared_ptr< WKdTree > m_kdTree
Stores a pointer to the kdTree used for fiber selection.
void recalculate()
update the bitfield when there was a change in the roi structure
bool getDirty()
Get the current dirty-state.
void slotRemoveBranch(boost::shared_ptr< WRMBranch > branch)
listener function for removing rois
WCondition::SPtr m_dirtyCondition
Condition that fires on setDirty.
boost::shared_ptr< boost::function< void(osg::ref_ptr< WROI >) > > m_assocRoiSignal
Signal that can be used to update the selector.
WCondition::SPtr getDirtyCondition()
Condition that fires upon a recalculation of the fiber selection.
boost::shared_ptr< WROIManager > getRoiManager()
get for roi manager
boost::shared_ptr< boost::function< void(osg::ref_ptr< WROI >) > > m_removeRoiSignal
Signal that can be used to update the selector.
~WFiberSelector()
destructor
void slotAddRoi(osg::ref_ptr< WROI > roi)
listener function for inserting rois
boost::shared_ptr< const WDataSetFibers > m_fibers
Pointer to the fiber data set.
Class to encapsulate boost::condition_variable_any.
WFiberSelector(boost::shared_ptr< const WDataSetFibers > fibers)
constructor
boost::shared_ptr< std::vector< float > > m_outputColorMap
Map each fiber to a color.
void slotRemoveRoi(osg::ref_ptr< WROI > roi)
listener function for removing rois
std::list< boost::shared_ptr< WSelectorBranch > > m_branches
list of branches int he roi structure
bool isNothingFiltered() const
Returns true if no fiber gets filtered out because there is no branch in the ROI tree.
class implements the updating of a bitfield for a roi
boost::shared_ptr< WCondition > SPtr
Shared pointer type for WCondition.
boost::shared_ptr< boost::function< void() > > m_changeRoiSignal
Signal that can be used to update the selector.
WColor getFiberColor(size_t fidx) const
Get color for fiber with given index.