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 WFIBERDRAWABLE_H
00026 #define WFIBERDRAWABLE_H
00027
00028 #include <vector>
00029
00030 #include <boost/shared_ptr.hpp>
00031 #include <boost/thread.hpp>
00032 #include <boost/thread/thread.hpp>
00033
00034 #include <osg/Drawable>
00035 #include <osg/ShapeDrawable>
00036 #include <osg/Group>
00037
00038 #include "WExportWGE.h"
00039
00040
00041
00042
00043 class WGE_EXPORT WFiberDrawable: public osg::Drawable
00044 {
00045 public:
00046
00047
00048
00049
00050
00051
00052
00053
00054 WFiberDrawable();
00055
00056
00057
00058
00059
00060
00061
00062
00063 WFiberDrawable( const WFiberDrawable& pg, const osg::CopyOp& copyop = osg::CopyOp::SHALLOW_COPY );
00064
00065
00066
00067
00068
00069
00070 virtual osg::Object* cloneType() const;
00071
00072
00073
00074
00075
00076
00077
00078 virtual osg::Object* clone( const osg::CopyOp& copyop ) const;
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095 virtual void drawImplementation( osg::RenderInfo& renderInfo ) const;
00096
00097
00098
00099
00100
00101
00102 void setUseTubes( bool flag );
00103
00104 using osg::Drawable::setBound;
00105
00106
00107
00108
00109
00110 void setBitfield( boost::shared_ptr< std::vector< bool > > bitField );
00111
00112
00113
00114
00115
00116 void setStartIndexes( boost::shared_ptr< std::vector< size_t > > idx );
00117
00118
00119
00120
00121
00122 void setPointsPerLine( boost::shared_ptr< std::vector< size_t > > ppl );
00123
00124
00125
00126
00127
00128 void setVerts( boost::shared_ptr< std::vector< float > > verts );
00129
00130
00131
00132
00133
00134 void setTangents( boost::shared_ptr< std::vector< float > > tangents );
00135
00136
00137
00138
00139
00140 void setColor( boost::shared_ptr< std::vector< float > > color );
00141
00142 protected:
00143 private:
00144
00145
00146
00147
00148
00149 void drawFibers( osg::RenderInfo& renderInfo ) const;
00150
00151
00152
00153
00154 void drawTubes() const;
00155
00156 boost::shared_mutex m_recalcLock;
00157
00158 bool m_useTubes;
00159
00160 boost::shared_ptr< std::vector< bool > > m_active;
00161
00162 boost::shared_ptr< std::vector< size_t > > m_startIndexes;
00163 boost::shared_ptr< std::vector< size_t > > m_pointsPerLine;
00164 boost::shared_ptr< std::vector< float > > m_verts;
00165 boost::shared_ptr< std::vector< float > > m_tangents;
00166 boost::shared_ptr< std::vector< float > > m_colors;
00167 };
00168
00169 inline void WFiberDrawable::setUseTubes( bool flag )
00170 {
00171 m_useTubes = flag;
00172 }
00173
00174 inline void WFiberDrawable::setBitfield( boost::shared_ptr< std::vector< bool > > bitField )
00175 {
00176 m_active = bitField;
00177 }
00178
00179 inline void WFiberDrawable::setStartIndexes( boost::shared_ptr< std::vector< size_t > > idx )
00180 {
00181 m_startIndexes = idx;
00182 }
00183
00184 inline void WFiberDrawable::setPointsPerLine( boost::shared_ptr< std::vector< size_t > > ppl )
00185 {
00186 m_pointsPerLine = ppl;
00187 }
00188
00189 inline void WFiberDrawable::setVerts( boost::shared_ptr< std::vector< float > > verts )
00190 {
00191 m_verts = verts;
00192 }
00193
00194 inline void WFiberDrawable::setTangents( boost::shared_ptr< std::vector< float > > tangents )
00195 {
00196 m_tangents = tangents;
00197 }
00198
00199 inline void WFiberDrawable::setColor( boost::shared_ptr< std::vector< float > > color )
00200 {
00201 m_colors = color;
00202 }
00203
00204 #endif // WFIBERDRAWABLE_H