00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef WFIBERSELECTOR_H
00026 #define WFIBERSELECTOR_H
00027
00028 #include <list>
00029 #include <vector>
00030
00031 #include "../dataHandler/WDataSetFibers.h"
00032
00033 #include "WSelectorRoi.h"
00034 #include "WSelectorBranch.h"
00035
00036 #include "WKdTree.h"
00037
00038 #include "WExportKernel.h"
00039
00040
00041
00042
00043 class OWKERNEL_EXPORT WFiberSelector
00044 {
00045 public:
00046
00047
00048
00049
00050 explicit WFiberSelector( boost::shared_ptr< const WDataSetFibers > fibers );
00051
00052
00053
00054
00055 ~WFiberSelector();
00056
00057
00058
00059
00060
00061
00062 size_t size();
00063
00064
00065
00066
00067
00068 boost::shared_ptr< std::vector< bool > > getBitfield();
00069
00070
00071
00072
00073
00074 boost::shared_ptr< std::vector< size_t > > getStarts();
00075
00076
00077
00078
00079
00080 boost::shared_ptr< std::vector< size_t > > getLengths();
00081
00082
00083
00084
00085
00086 void setDirty();
00087
00088 protected:
00089
00090
00091
00092
00093 void slotAddRoi( osg::ref_ptr< WROI > roi );
00094
00095
00096
00097
00098
00099 void slotRemoveRoi( osg::ref_ptr< WROI > roi );
00100
00101
00102
00103
00104
00105 void slotRemoveBranch( boost::shared_ptr< WRMBranch > branch );
00106
00107 private:
00108
00109
00110
00111 void recalculate();
00112
00113
00114
00115
00116 boost::shared_ptr< const WDataSetFibers > m_fibers;
00117
00118 size_t m_size;
00119
00120 bool m_dirty;
00121
00122
00123
00124
00125 boost::shared_ptr< WKdTree > m_kdTree;
00126
00127 boost::shared_ptr< std::vector< bool > >m_outputBitfield;
00128
00129 boost::shared_ptr< std::vector< bool > >m_workerBitfield;
00130
00131 std::list< boost::shared_ptr<WSelectorBranch> >m_branches;
00132
00133 boost::shared_ptr< boost::function< void( osg::ref_ptr< WROI > ) > > m_assocRoiSignal;
00134 boost::shared_ptr< boost::function< void( osg::ref_ptr< WROI > ) > > m_removeRoiSignal;
00135 boost::shared_ptr< boost::function< void( boost::shared_ptr< WRMBranch > ) > > m_removeBranchSignal;
00136 boost::shared_ptr< boost::function< void() > > m_changeRoiSignal;
00137 };
00138
00139 inline size_t WFiberSelector::size()
00140 {
00141 return m_size;
00142 }
00143
00144 inline boost::shared_ptr< std::vector< size_t > > WFiberSelector::getStarts()
00145 {
00146 return m_fibers->getLineStartIndexes();
00147 }
00148
00149 inline boost::shared_ptr< std::vector< size_t > > WFiberSelector::getLengths()
00150 {
00151 return m_fibers->getLineLengths();
00152 }
00153
00154 #endif // WFIBERSELECTOR_H