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 WSELECTORBRANCH_H
00026 #define WSELECTORBRANCH_H
00027
00028 #include <list>
00029 #include <vector>
00030
00031 #include "WSelectorRoi.h"
00032 #include "../kernel/WRMBranch.h"
00033
00034
00035
00036
00037 class WSelectorBranch
00038 {
00039 public:
00040
00041
00042
00043
00044
00045 WSelectorBranch( boost::shared_ptr< const WDataSetFibers > fibers, boost::shared_ptr< WRMBranch > branch );
00046
00047
00048
00049
00050 ~WSelectorBranch();
00051
00052
00053
00054
00055
00056 boost::shared_ptr< std::vector<bool> > getBitField();
00057
00058
00059
00060
00061
00062 boost::shared_ptr<WRMBranch> getBranch();
00063
00064
00065
00066
00067
00068 void addRoi( boost::shared_ptr< WSelectorRoi > roi );
00069
00070
00071
00072
00073
00074
00075
00076 std::list< boost::shared_ptr< WSelectorRoi > > getROIs();
00077
00078
00079
00080
00081
00082
00083 void removeRoi( osg::ref_ptr< WROI > roi );
00084
00085
00086
00087
00088
00089
00090 bool empty();
00091
00092
00093
00094
00095 void setDirty();
00096
00097
00098
00099
00100
00101
00102 bool dirty();
00103
00104 protected:
00105
00106
00107
00108
00109 void colorChanged();
00110 private:
00111
00112
00113
00114 void recalculate();
00115
00116
00117
00118
00119 boost::shared_ptr< const WDataSetFibers > m_fibers;
00120
00121
00122
00123
00124 size_t m_size;
00125
00126 bool m_dirty;
00127
00128
00129
00130
00131 boost::shared_ptr< std::vector< bool > > m_bitField;
00132
00133
00134
00135
00136 boost::shared_ptr< std::vector< bool > > m_workerBitfield;
00137
00138
00139
00140
00141 std::list< boost::shared_ptr< WSelectorRoi > > m_rois;
00142
00143
00144
00145
00146 boost::shared_ptr< WRMBranch > m_branch;
00147
00148 boost::shared_ptr< boost::function< void() > > m_changeSignal;
00149 boost::shared_ptr< boost::function< void() > > m_changeRoiSignal;
00150 };
00151
00152 inline boost::shared_ptr< std::vector<bool> > WSelectorBranch::getBitField()
00153 {
00154 if( m_dirty )
00155 {
00156 recalculate();
00157 }
00158 return m_bitField;
00159 }
00160
00161 inline boost::shared_ptr< WRMBranch > WSelectorBranch::getBranch()
00162 {
00163 return m_branch;
00164 }
00165
00166 inline bool WSelectorBranch::empty()
00167 {
00168 return m_rois.empty();
00169 }
00170
00171 inline bool WSelectorBranch::dirty()
00172 {
00173 return m_dirty;
00174 }
00175
00176 #endif // WSELECTORBRANCH_H