31 #include "../kernel/WKernel.h"
32 #include "WFiberSelector.h"
33 #include "WROIManager.h"
37 m_size( fibers->size() ),
41 std::shared_ptr< std::vector< float > > verts =
m_fibers->getVertices();
42 m_kdTree = std::shared_ptr< WKdTree >(
new WKdTree( verts->size() / 3, &( ( *verts )[0] ) ) );
50 = std::shared_ptr< boost::function< void() > >(
new boost::function< void() >( boost::bind( &
WFiberSelector::setDirty,
this ) ) );
53 std::shared_ptr< boost::function< void( osg::ref_ptr< WROI > ) > >(
54 new boost::function< void( osg::ref_ptr< WROI > ) > ( boost::bind( &
WFiberSelector::slotAddRoi,
this, boost::placeholders::_1 ) ) );
58 std::shared_ptr< boost::function< void( osg::ref_ptr< WROI > ) > >(
61 boost::placeholders::_1 ) ) );
65 std::shared_ptr< boost::function< void( std::shared_ptr< WRMBranch > ) > >(
66 new boost::function< void( std::shared_ptr< WRMBranch > ) > (
70 for(
size_t i = 0; i < rois.size(); ++i )
73 ( rois[i] )->getProperties()->getProperty(
"Dirty" )->toPropBool()->set(
true );
85 for( std::list< std::shared_ptr< WSelectorBranch > >::iterator iter =
m_branches.begin(); iter !=
m_branches.end(); ++iter )
87 std::list< std::shared_ptr< WSelectorRoi > > rois = ( *iter )->getROIs();
88 for( std::list< std::shared_ptr< WSelectorRoi > >::iterator roiIter = rois.begin(); roiIter != rois.end(); ++roiIter )
100 std::shared_ptr< WSelectorBranch > branch;
102 for( std::list< std::shared_ptr< WSelectorBranch > >::iterator iter =
m_branches.begin(); iter !=
m_branches.end(); ++iter )
111 branch = std::shared_ptr<WSelectorBranch>(
119 branch->addRoi( sroi );
128 for( std::list< std::shared_ptr< WSelectorBranch > >::iterator iter =
m_branches.begin(); iter !=
m_branches.end(); ++iter )
130 ( *iter )->removeRoi( roi );
132 if( ( *iter )->empty() )
144 for( std::list< std::shared_ptr< WSelectorBranch > >::iterator iter =
m_branches.begin(); iter !=
m_branches.end(); ++iter )
146 if( branch == ( *iter )->getBranch() )
164 std::shared_ptr< std::vector< bool > > m_workerBitfield(
new std::vector< bool >(
m_size,
false ) );
165 std::vector< float > m_workerColorMap(
m_size * 4, 1.0 );
169 for( std::list< std::shared_ptr< WSelectorBranch > >::iterator iter =
m_branches.begin(); iter !=
m_branches.end(); ++iter )
171 std::shared_ptr< std::vector< bool > > bf = ( *iter )->getBitField();
172 WColor color = ( *iter )->getBranchColor();
174 for(
size_t i = 0; i <
m_size; ++i )
176 ( *m_workerBitfield )[i] = ( *m_workerBitfield )[i] | ( *bf )[i];
181 m_workerColorMap[ 4 * i + 0 ] = color.r();
182 m_workerColorMap[ 4 * i + 1 ] = color.g();
183 m_workerColorMap[ 4 * i + 2 ] = color.b();
184 m_workerColorMap[ 4 * i + 3 ] = color.a();
190 for(
size_t i = 0; i <
m_size; ++i )
192 ( *m_outputBitfield )[i] = ( *m_workerBitfield )[i];
193 ( *m_outputColorMap )[ 4 * i + 0 ] = m_workerColorMap[ 4 * i + 0 ];
194 ( *m_outputColorMap )[ 4 * i + 1 ] = m_workerColorMap[ 4 * i + 1 ];
195 ( *m_outputColorMap )[ 4 * i + 2 ] = m_workerColorMap[ 4 * i + 2 ];
196 ( *m_outputColorMap )[ 4 * i + 3 ] = m_workerColorMap[ 4 * i + 3 ];
222 return WColor( 1.0, 1.0, 1.0, 1.0 );
Class to encapsulate boost::condition_variable_any.
std::shared_ptr< WCondition > SPtr
Shared pointer type for WCondition.
std::shared_ptr< boost::function< void(osg::ref_ptr< WROI >) > > m_assocRoiSignal
Signal that can be used to update the selector.
std::shared_ptr< std::vector< bool > > m_outputBitfield
bit field of activated fibers
WColor getFiberColor(size_t fidx) const
Get color for fiber with given index.
void slotRemoveBranch(std::shared_ptr< WRMBranch > branch)
listener function for removing rois
std::shared_ptr< boost::function< void() > > m_changeRoiSignal
Signal that can be used to update the selector.
std::list< std::shared_ptr< WSelectorBranch > > m_branches
list of branches int he roi structure
void slotAddRoi(osg::ref_ptr< WROI > roi)
listener function for inserting rois
WFiberSelector(std::shared_ptr< const WDataSetFibers > fibers)
constructor
void setDirty()
setter sets the dirty flag
std::shared_ptr< std::vector< bool > > getBitfield()
getter
WCondition::SPtr getDirtyCondition()
Condition that fires upon a recalculation of the fiber selection.
size_t m_size
number of fibers in the dataset
void recalculate()
update the bitfield when there was a change in the roi structure
std::shared_ptr< const WDataSetFibers > m_fibers
Pointer to the fiber data set.
std::shared_ptr< boost::function< void(std::shared_ptr< WRMBranch >) > > m_removeBranchSignal
Signal for updating the selector.
std::shared_ptr< WKdTree > m_kdTree
Stores a pointer to the kdTree used for fiber selection.
bool getDirty()
Get the current dirty-state.
WCondition::SPtr m_dirtyCondition
Condition that fires on setDirty.
~WFiberSelector()
destructor
std::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::shared_ptr< boost::function< void(osg::ref_ptr< WROI >) > > m_removeRoiSignal
Signal that can be used to update the selector.
bool isNothingFiltered() const
Returns true if no fiber gets filtered out because there is no branch in the ROI tree.
implements the computation of a kd tree on a point array
static WKernel * getRunningKernel()
Returns pointer to the currently running kernel.
std::shared_ptr< WROIManager > getRoiManager()
get for roi manager
TODO(schurade): Document this!
class implements the updating of a bitfield for a roi