#ifndef SCENEGRAPH_H_ #define SCENEGRAPH_H_ #include #include #include #include #include #include #include #include #include #include #include "../include/ThemePack.h" #include "../include/GraphicObject.h" #include "../include/GraphicObject2DImage.h" #include "../include/GraphicObject3DModell.h" #include "../include/Sound.h" #include "../include/XMLNode.h" #include "../include/Entity.h" #include "../include/Coordinates.h" using namespace std; class Scenegraph { public: Scenegraph(); virtual ~Scenegraph(); map mEntitiesOpenSG; map mEntitiesOpenGL; // methods void createBackground(); void createScenegraph(OSG::NodePtr camBeacon, OSG::NodePtr lightBeacon, OSG::NodePtr lightNode); void createLight(); void createObjectMaps(); void doOpenGL(); void addImage2D(string name, string id, Coordinates *position, Coordinates *size); void deleteImage2D(string id); void addObject3D(string name, string id, Coordinates *position); void deleteObject3D(string id); void addCube(string id, Coordinates *position, float xSize, float ySize, float zSize, unsigned short hor, unsigned short vert, unsigned short depth); void deleteCube(string id); void addSphere(Coordinates *position, unsigned short depth, float radius); void deleteSphere(string id); void addPlane(string id, Coordinates *position, float xSize, float ySize, unsigned short hor, unsigned short vert); void deletePlane(string id); void addCone(string id, Coordinates *position, float height, float botRadius, unsigned short sides, bool doSide, bool doBottom); void deleteCone(string id); void addCylinder(string id, Coordinates *position, float height, float radius, unsigned short sides, bool doSide, bool doTop, bool doBottom); void deleteCylinder(string id); void addTorus(string id, Coordinates *position, float innerRadius, float outerRadius, unsigned short sides, unsigned short rings); void deleteTorus(string id); void deleteEntity(string id); void changePosition(string id,Coordinates *position); void addLine(string id, Coordinates *begin, Coordinates *end, float width, Coordinates *color); void deleteLine(string id); void setEndsOfLine(string id, Coordinates *begin, Coordinates *end); OSG::NodePtr getRoot(); private: // variables OSG::NodePtr mRoot, mBackGeoNode, mBackTransNode; OSG::Matrix mBackMatrix; OSG::TransformPtr mBackTransCore; XMLNode mTpXmlNode; string mPathToTP; //vector mEntity; pthread_mutex_t mutex1;// = PTHREAD_MUTEX_INITIALIZER; vector mObjectsInScenegraph; map mGraphicObjects2DImage; map mGraphicObjects3DModell; vector mObjectsInCurrentScenegraph; vector mObjectsInCurrentXMLFile; // methods bool isNameInScenegraph(string id); }; #endif /*SCENEGRAPH_H_*/ #ifndef ENTITY_H_ #define ENTITY_H_ #include #include #include #include #include "../include/GraphicObject2DImage.h" #include "../include/GraphicObject3DModell.h" #include "../include/Coordinates.h" #include "../include/Scenegraph.h" using namespace std; class Entity { public: Entity(); virtual ~Entity(); virtual void setPosition(Coordinates *position) = 0; virtual void setBeginAndEnd(Coordinates *begin, Coordinates *end) = 0; virtual void deleteEntity(Scenegraph *scenegraph, string id) = 0; virtual OSG::NodePtr getNode() = 0; // is only implemented in EntityOpenSGRenderable virtual void drawOpenGL() = 0; private: Coordinates* mPosition; // TODO: setColor() and getColor() in EntityOpenSGRenderable implementieren Coordinates* mColor; }; #endif /*ENTITY_H_*/ #ifndef ENTITYOPENGLRENDERABLE_H_ #define ENTITYOPENGLRENDERABLE_H_ #include "../include/Entity.h" class EntityOpenGLRenderable : public Entity { public: EntityOpenGLRenderable(); virtual ~EntityOpenGLRenderable(); void setPosition(Coordinates *position); virtual void setBeginAndEnd(Coordinates *begin, Coordinates *end) = 0; virtual void drawOpenGL() = 0; void deleteEntity(Scenegraph *scenegraph, string id); private: float mWidth; bool mPositionIsSet; // true if mPosition is allready manualy specified }; #endif /*ENTITYOPENGLRENDERABLE_H_*/ #ifndef ENTITYOPENSGRENDERABLE_H_ #define ENTITYOPENSGRENDERABLE_H_ #include "../include/Entity.h" class EntityOpenSGRenderable : public Entity { public: EntityOpenSGRenderable(); virtual ~EntityOpenSGRenderable(); void setPosition(Coordinates *position); void setBeginAndEnd(Coordinates *begin, Coordinates *end); OSG::NodePtr getNode(); void deleteEntity(Scenegraph *scenegraph, string id); private: OSG::Matrix mTranslation; OSG::Matrix mTransformation; OSG::NodePtr mTransformationNode; OSG::TransformPtr mTransformationCore; OSG::NodePtr mGeometryNode; OSG::GeometryPtr mGeometryCore; void setNodesAndCores(); }; #endif /*ENTITYOPENSGRENDERABLE_H_*/