![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2012 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 00009 00010 #pragma once 00011 00012 #include <vrvOsg/vrvOsg.h> 00013 #include <vrvOsg/DtOsgModelInstance.h> 00014 00015 #include <matrix/vlVector.h> 00016 00017 #include <osg/PrimitiveSet> 00018 #include <osg/Geometry> 00019 00020 namespace osg 00021 { 00022 class Geode; 00023 class Array; 00024 class Texture; 00025 class LineWidth; 00026 class Group; 00027 } 00028 00029 namespace makVrv 00030 { 00031 class DtOsgSegmentPickable; 00032 00035 class DT_DLL_VRVOSG DtExtrudedLineModelInstance : public DtOsgModelInstance 00036 { 00037 public: 00038 enum LineExtrusionMode 00039 { 00040 LineOnly, 00041 ExtrudeWidth, 00042 ExtrudeHeight, 00043 FullExtrusion 00044 }; 00045 00047 DtExtrudedLineModelInstance(DtDe& de); 00048 00050 virtual ~DtExtrudedLineModelInstance(); 00051 00053 virtual void addPoint(const DtVector&, int index = -1); 00054 00056 virtual void removePoint(int index); 00057 00059 virtual void setPosition(int index, const DtVector&); 00060 00062 virtual void clearPoints(); 00063 00066 virtual bool realize(DtModelDefinition& definition); 00067 00069 virtual void addToConnector( DtOsgSceneConnector* connector ); 00070 00072 virtual bool removeFromConnector( DtOsgSceneConnector* connector ); 00073 00075 virtual void setStipplePattern(unsigned int); 00076 00078 virtual void setColor(float r,float g,float b,float a); 00079 00081 virtual void setTextureHeight(double height); 00082 00084 virtual void setTextureWidth(double width); 00085 00087 virtual void setTexture(osg::Texture* texture); 00088 00090 virtual void setUpExtent(float height); 00091 00093 virtual void setDownExtent(float height); 00094 00096 virtual void setLeftExtent(float height); 00097 00099 virtual void setRightExtent(float heigh); 00100 00102 virtual void setWidth(float); 00103 00106 virtual void setHeight(float); 00107 00109 virtual void setDimensions(float width, float height); 00110 00113 virtual void setLineWidth(float width); 00114 00116 virtual void setScribed(bool b); 00117 00120 virtual void setScribeColor(float r, float g, float b, float a); 00121 00123 virtual void setScribeOccluded(bool b); 00124 00126 virtual void setOcclusionEnabled(bool enabled); 00127 00129 virtual void setVisible(bool isVisible) {} 00130 00132 int pointCount() const 00133 { 00134 return myLinePoints.size(); 00135 } 00136 00138 const DtVector& point(int) const; 00139 00141 virtual void setPickable(bool); 00142 00144 bool pickable() const; 00145 00147 void setOrigin(const DtVector& origin); 00148 00150 virtual void updatePoints(); 00151 00153 virtual void setSolid(bool); 00154 00156 virtual void update(); 00157 00158 protected: 00159 00161 virtual void updateMode(); 00162 00164 virtual void updateGeometry(); 00165 00167 virtual void updateTextureCoordinates(); 00168 00170 virtual void addPointsForExtentExtrusion(const DtVector& point); 00171 00173 virtual void addFaceForRotation(const osg::Quat& rotation, const DtVector& point); 00174 00176 virtual void addPointsForFullExtrusion(const DtVector& from, 00177 const DtVector& to); 00178 00180 virtual void updateStippling(); 00181 00183 virtual void updateScribeLine(); 00184 00186 virtual void updateColors(); 00187 00189 virtual bool frontAndBackFaceRendered() const; 00190 00191 virtual void updatePointsForLineStrip(); 00192 virtual void updatePointsForTriangleStrip(); 00193 virtual void updatePointsForExtrusion(); 00194 virtual void createFaces(); 00195 virtual void updateScribeForTriangleStrip(); 00196 virtual void updateScribeForExtrusion(osg::Vec3Array*); 00197 00198 protected: 00199 typedef std::vector<DtVector> PointVector; 00200 00201 osg::ref_ptr<osg::Geode> myShapeGeode; 00202 osg::ref_ptr<osg::Geometry> myShapeGeometry; 00203 osg::ref_ptr<osg::Vec3Array> myShapePoints; 00204 00205 osg::ref_ptr<osg::Geode> myScribeGeode; 00206 osg::ref_ptr<osg::Geometry> myScribeGeometry; 00207 osg::ref_ptr<osg::Vec3Array> myScribePoints; 00208 00209 osg::ref_ptr<osg::Texture> myTexture; 00210 osg::ref_ptr<osg::Vec2Array> myTextureCoordinates; 00211 00212 osg::ref_ptr<osg::LineWidth> myLineWidth; 00213 osg::ref_ptr<osg::Group> myMainTransform; 00214 00218 osg::ref_ptr<osg::Vec3Array> myFaces; 00219 00220 osg::Vec4 myColor; 00221 00222 double myTextureWidth; 00223 double myTextureHeight; 00224 00225 float myUpExtent; 00226 float myDownExtent; 00227 float myLeftExtent; 00228 float myRightExtent; 00229 00230 PointVector myLinePoints; 00231 DtVector myOrigin; 00232 00233 bool myGeometryDirty; 00234 bool myShapePointsDirty; 00235 bool myColorsDirty; 00236 00237 bool myScribeOccluded; 00238 bool myScribed; 00239 bool mySolid; 00240 00241 int myStipplePattern; 00242 LineExtrusionMode myMode; 00243 00246 DtOsgSegmentPickable* myPickable; 00247 bool myIsPickable; 00248 00249 osg::Vec4 myScribeColor; 00250 bool myScribeColorSet; 00251 }; 00252 }