8#ifndef VR_SCENE_GRAPH_H
9#define VR_SCENE_GRAPH_H
25#include <util/common.h>
29#include <osg/MatrixTransform>
31#include <osg/Multisample>
32#include <osg/Material>
33#include <osg/ClipNode>
34#include <osgFX/Scribe>
55class coCombinedButtonInteraction;
76 static void manipulateCallback(
void *sceneGraph, buttonSpecCell *spec);
86 return m_menuGroupNode.get();
90 return m_alwaysVisibleGroupNode.get();
104 return m_scene.get();
109 return m_objectsScene.get();
118 return m_objectsTransform.get();
122 return (m_scaleTransform);
126 return (m_handTransform.get());
142 return (m_pointerType);
152 T *
findFirstNode(
const char *name,
bool startsWith =
false, osg::Node * rootNode = NULL)
155 rootNode = m_objectsRoot;
163 if (!(startsWith ? strncmp(rootNode->getName().c_str(), name, strlen(name)) : strcmp(rootNode->getName().c_str(), name)))
165 T *node =
dynamic_cast<T *
>(rootNode);
170 osg::Group *group =
dynamic_cast<osg::Group *
>(rootNode);
173 for (
unsigned int i = 0; i < group->getNumChildren(); i++)
175 T *node = findFirstNode<T>(name, startsWith, group->getChild(i));
195 m_scaleMode = scaleMode;
199 return m_scaleFactor;
205 return m_scalingAllObjects;
208 bool resetView, osg::Matrix *currentMatrix,
float *scaleFactor)
const;
216 return m_floorHeight;
220 return m_objectsRoot;
234 void setRestrictBox(
float minX,
float maxX,
float minY,
float maxY,
float minZ,
float maxZ);
237 void setColor(
const char *nodeName,
int *color,
float transparency);
238 void setColor(osg::Geode *geode,
int *color,
float transparency);
241 void setShader(
const char *nodeName,
const char *shaderName,
const char *paraFloat,
const char *paraVec2,
const char *paraVec3,
const char *paraVec4,
const char *paraInt,
const char *paraBool,
const char *paraMat2,
const char *paraMat3,
const char *paraMat4);
242 void setShader(osg::Geode *geode,
const char *shaderName,
const char *paraFloat,
const char *paraVec2,
const char *paraVec3,
const char *paraVec4,
const char *paraInt,
const char *paraBool,
const char *paraMat2,
const char *paraMat3,
const char *paraMat4);
243 void setMaterial(
const char *nodeName,
int *ambient,
int *diffuse,
int *specular,
float shininess,
float transparency);
244 void setMaterial(osg::Geode *geode,
int *ambient,
int *diffuse,
int *specular,
float shininess,
float transparency);
255 int readConfigFile();
257 void initHandDeviceGeometry();
259 void initSceneGraph();
260 bool saveScenegraph(
bool withMenu);
262#ifdef PHANTOM_TRACKER
263 int m_forceFeedbackON;
264 int m_forceFeedbackMode;
268 osg::ref_ptr<osg::Group> m_scene, m_objectsScene;
269 osg::ref_ptr<osgFX::Scribe> m_lineHider;
270 osg::ref_ptr<osg::MatrixTransform> m_handTransform;
271 osg::ref_ptr<osg::MatrixTransform> m_handAxisTransform, m_viewerAxisTransform, m_smallSceneAxisTransform;
272 osg::ref_ptr<osg::MatrixTransform> m_worldAxis, m_handAxis, m_viewerAxis, m_objectAxis, m_smallSceneAxis;
273 osg::ref_ptr<osg::Group> m_menuGroupNode;
274 osg::ref_ptr<osg::Group> m_alwaysVisibleGroupNode;
275 osg::ref_ptr<osg::MatrixTransform> m_pointerDepthTransform;
276 float m_pointerDepth;
277 osg::ref_ptr<osg::Node> m_handPlane;
278 osg::ref_ptr<osg::Node> m_handLine;
279 osg::ref_ptr<osg::Node> m_handNormal;
280 osg::ref_ptr<osg::Node> m_handCube;
281 osg::ref_ptr<osg::Node> m_handFly;
282 osg::ref_ptr<osg::Node> m_handDrive;
283 osg::ref_ptr<osg::Node> m_handWalk;
284 osg::ref_ptr<osg::Node> m_handPyramid;
285 osg::ref_ptr<osg::Node> m_handProbe;
286 osg::ref_ptr<osg::Node> m_handAnchor;
287 osg::ref_ptr<osg::Node> m_handSphere;
289 bool showSmallSceneAxis_;
290 bool transparentPointer_;
292 osg::StateSet *m_rootStateSet, *m_objectsStateSet;
293 osg::ClipNode *m_objectsRoot;
297 bool m_textured =
true;
298 bool m_shaders =
true;
299 bool m_coordAxis =
false;
300 bool m_showMenu =
true;
301 bool m_showObjects =
true;
302 bool m_firstTime =
true;
303 bool m_pointerVisible =
false;
305 osg::Matrix m_invBaseMatrix;
306 osg::Matrix m_oldInvBaseMatrix;
315 float m_scaleMode, m_scaleFactor;
316 float m_scaleFactorButton;
317 float m_scaleRestrictFactorMin, m_scaleRestrictFactorMax;
318 float m_transRestrictMinX, m_transRestrictMinY, m_transRestrictMinZ;
319 float m_transRestrictMaxX, m_transRestrictMaxY, m_transRestrictMaxZ;
321 bool m_scalingAllObjects;
322 osg::MatrixTransform *m_scaleTransform, *m_handIconScaleTransform, *m_handAxisScaleTransform;
323 float m_handIconSize;
324 float m_handIconOffset;
328 osg::ref_ptr<osg::MatrixTransform> m_objectsTransform;
329 osg::ref_ptr<osg::Multisample> m_Multisample;
330 typedef std::set<osg::Node *> NodeSet;
331 NodeSet m_specialBoundsNodeList;
332 void dirtySpecialBounds();
335 osg::ref_ptr<osg::Program> emptyProgram_;
337 bool isScenegraphProtected_;
339 typedef std::map<osg::Drawable *, osg::ref_ptr<osg::Material> > StoredMaterialsMap;
340 StoredMaterialsMap storedMaterials;
341 void storeMaterial(osg::Drawable *drawable);
342 bool m_enableHighQualityOption, m_switchToHighQuality, m_highQuality;
345 ui::Menu *m_miscMenu=
nullptr;
346 ui::SelectionList *m_drawStyle=
nullptr;
347 ui::Button *m_trackHead=
nullptr;
348 ui::SelectionList *m_showStats=
nullptr;
349 ui::Button *m_showAxis=
nullptr, *m_allowHighQuality=
nullptr;
350 ui::Button *m_useTextures=
nullptr, *m_useShaders=
nullptr;
double OSGVRUIEXPORT mod(double a, double b)
Definition: ARToolKit.h:33
Definition: coClusterStat.h:29
collaborative interface manager
Definition: coVRCommunication.h:41
Definition: VRSceneGraph.h:61
bool keyEvent(int type, int keySym, int mod)
bool isScalingAllObjects() const
Definition: VRSceneGraph.h:203
bool saveScenegraph(const std::string &filename, bool withMenu=false)
void setMaterial(osg::Geode *geode, int *ambient, int *diffuse, int *specular, float shininess, float transparency)
void toggleHeadTracking(bool state)
void setShader(const char *nodeName, const char *shaderName, const char *paraFloat, const char *paraVec2, const char *paraVec3, const char *paraVec4, const char *paraInt, const char *paraBool, const char *paraMat2, const char *paraMat3, const char *paraMat4)
osg::MatrixTransform * loadAxisGeode(float scale)
void setTransparency(osg::Geode *geode, float transparency)
void setColor(const char *nodeName, int *color, float transparency)
osg::ref_ptr< osg::Node > getHandSphere()
Definition: VRSceneGraph.h:223
void addMenuItem(osg::Group *itemGroup)
float floorHeight()
Definition: VRSceneGraph.h:214
void toggleAxis(bool state)
osg::Group * getAlwaysVisibleGroup()
Definition: VRSceneGraph.h:88
void toggleHighQuality(bool state)
void setScaleFactorButton(float f)
void setMenuMode(bool state)
osg::MatrixTransform * getHandTransform() const
Definition: VRSceneGraph.h:124
osg::StateSet * loadGlobalGeostate()
osg::Vec3 getWorldPointOfInterest() const
void setMultisampling(osg::Multisample::Mode)
void setWireframe(WireframeMode mode)
void addPointerIcon(osg::Node *node)
void setPointerType(int pointerType)
int getPointerType()
Definition: VRSceneGraph.h:140
osg::Group * getScene()
Definition: VRSceneGraph.h:102
WireframeMode
Definition: VRSceneGraph.h:63
@ Disabled
Definition: VRSceneGraph.h:64
@ HiddenLineBlack
Definition: VRSceneGraph.h:66
@ HiddenLineWhite
Definition: VRSceneGraph.h:67
@ Points
Definition: VRSceneGraph.h:68
@ Enabled
Definition: VRSceneGraph.h:65
int m_vectorInteractor
Definition: VRSceneGraph.h:249
void setScaleMode(float scaleMode)
Definition: VRSceneGraph.h:193
osg::MatrixTransform * getTransform() const
Definition: VRSceneGraph.h:116
osg::BoundingSphere getBoundingSphere()
osg::StateSet * loadDefaultGeostate(osg::Material::ColorMode mode=osg::Material::OFF)
osg::ClipNode * objectsRoot()
Definition: VRSceneGraph.h:218
osg::Node * loadHandIcon(const char *name)
void setShader(osg::Geode *geode, const char *shaderName, const char *paraFloat, const char *paraVec2, const char *paraVec3, const char *paraVec4, const char *paraInt, const char *paraBool, const char *paraMat2, const char *paraMat3, const char *paraMat4)
void setColor(osg::Geode *geode, int *color, float transparency)
void setMaterial(const char *nodeName, int *ambient, int *diffuse, int *specular, float shininess, float transparency)
osg::MatrixTransform * getScaleTransform() const
Definition: VRSceneGraph.h:120
void viewAll(bool resetView=false)
void setObjects(bool state)
void applyMenuModeToMenus()
osg::Node * loadHandLine()
bool isHighQuality() const
osg::StateSet * loadTransparentGeostate(osg::Material::ColorMode mode=osg::Material::OFF)
void setTransparency(const char *nodeName, float transparency)
static VRSceneGraph * instance()
void setScaleFromButton(float direction)
void setScaleRestrictFactor(float min, float max)
void removePointerIcon(osg::Node *node)
void scaleAllObjects(bool resetView=false)
osg::Group * getObjectsScene()
Definition: VRSceneGraph.h:107
void getHandWorldPosition(float *, float *, float *)
float scaleFactor()
Definition: VRSceneGraph.h:197
void setNodeBounds(osg::Node *node, const osg::BoundingSphere *bs)
void setRestrictBox(float minX, float maxX, float minY, float maxY, float minZ, float maxZ)
osg::StateSet * loadUnlightedGeostate(osg::Material::ColorMode mode=osg::Material::OFF)
float scaleMode()
Definition: VRSceneGraph.h:189
osg::Group * getMenuGroup()
Definition: VRSceneGraph.h:84
void boundingSphereToMatrices(const osg::BoundingSphere &boundingSphere, bool resetView, osg::Matrix *currentMatrix, float *scaleFactor) const
void setScaleFactor(float scaleFactor, bool sync=true)
T * findFirstNode(const char *name, bool startsWith=false, osg::Node *rootNode=NULL)
Definition: VRSceneGraph.h:152
Definition: coCombinedButtonInteraction.h:22