![]() |
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 DtExtrudedModelInstance : public DtOsgModelInstance 00036 { 00037 public: 00038 enum LineExtrusionMode 00039 { 00040 LineOnly, 00041 ExtrudeWidth, 00042 ExtrudeHeight, 00043 FullExtrusion 00044 }; 00045 00047 DtExtrudedModelInstance(DtDe& de); 00048 00050 virtual ~DtExtrudedModelInstance(); 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 setVisible(bool isVisible) {} 00127 00128 int pointCount() const 00129 { 00130 return myLinePoints.size(); 00131 } 00132 00133 const DtVector& point(int) const; 00134 00136 virtual void setLockUpdates(bool); 00137 00139 bool updatesLocked() const 00140 { 00141 return myUpdatesLocked; 00142 } 00143 00144 virtual void setPickable(bool); 00145 bool pickable() const; 00146 00147 void setOrigin(const DtVector& origin); 00148 00150 virtual void updatePoints(); 00151 00153 virtual void setSolid(bool); 00154 00155 protected: 00156 00158 virtual void updateMode(); 00159 00161 virtual void updateGeometry(); 00162 00164 virtual void updateTextureCoordinates(); 00165 00167 virtual void addPointsForExtentExtrusion(const DtVector& point); 00168 00170 virtual void addFaceForRotation(const osg::Quat& rotation, const DtVector& point); 00171 00173 virtual void addPointsForFullExtrusion(const DtVector& from, 00174 const DtVector& to); 00175 00177 virtual void updateStippling(); 00178 00180 virtual void updateScribeLine(); 00181 00183 virtual void updateColors(); 00184 00186 virtual bool frontAndBackFaceRendered() const; 00187 00188 virtual void updatePointsForLineStrip(); 00189 virtual void updatePointsForTriangleStrip(); 00190 virtual void updatePointsForExtrusion(); 00191 virtual void createFaces(); 00192 virtual void updateScribeForTriangleStrip(); 00193 virtual void updateScribeForExtrusion(osg::Vec3Array*); 00194 00195 protected: 00196 typedef std::vector<DtVector> PointVector; 00197 00198 osg::ref_ptr<osg::Geode> myShapeGeode; 00199 osg::ref_ptr<osg::Geometry> myShapeGeometry; 00200 osg::ref_ptr<osg::Vec3Array> myShapePoints; 00201 00202 osg::ref_ptr<osg::Geode> myScribeGeode; 00203 osg::ref_ptr<osg::Geometry> myScribeGeometry; 00204 osg::ref_ptr<osg::Vec3Array> myScribePoints; 00205 00206 osg::ref_ptr<osg::Texture> myTexture; 00207 osg::ref_ptr<osg::Vec2Array> myTextureCoordinates; 00208 00209 osg::ref_ptr<osg::LineWidth> myLineWidth; 00210 osg::ref_ptr<osg::Group> myMainTransform; 00211 00215 osg::ref_ptr<osg::Vec3Array> myFaces; 00216 00217 osg::Vec4 myColor; 00218 00219 double myTextureWidth; 00220 double myTextureHeight; 00221 00222 float myUpExtent; 00223 float myDownExtent; 00224 float myLeftExtent; 00225 float myRightExtent; 00226 00227 PointVector myLinePoints; 00228 00229 DtVector myOrigin; 00230 00231 bool myGeometryDirty; 00232 bool myShapePointsDirty; 00233 bool myColorsDirty; 00234 00235 bool myUpdatesLocked; 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 }