20 #ifndef Tulip_GLSCENE_H
21 #define Tulip_GLSCENE_H
23 #include <tulip/tulipconf.h>
24 #include <tulip/GlLODCalculator.h>
25 #include <tulip/GlLayer.h>
26 #include <tulip/Color.h>
27 #include <tulip/Observable.h>
33 class GlLODCalculator;
34 class GlGraphComposite;
49 enum SelectedEntityType {
53 SIMPLE_ENTITY_SELECTED = 3
56 SelectedEntity():simpleEntity(NULL),complexEntityId((
unsigned int)(-1)),entityType(UNKNOW_SELECTED),complexEntityGraph(NULL) {}
57 SelectedEntity(
GlSimpleEntity *entity):simpleEntity(entity),complexEntityId((
unsigned int)(-1)),entityType(SIMPLE_ENTITY_SELECTED),complexEntityGraph(NULL) {}
58 SelectedEntity(
Graph *graph,
unsigned int id,SelectedEntityType type):simpleEntity(NULL),complexEntityId(
id),entityType(type),complexEntityGraph(graph) {}
61 assert(simpleEntity!=NULL);
65 unsigned int getComplexEntityId()
const {
66 assert(complexEntityId!=(
unsigned int)(-1));
67 return complexEntityId;
70 Graph *getComplexEntityGraph()
const {
71 assert(complexEntityGraph!=NULL);
72 return complexEntityGraph;
75 SelectedEntityType getEntityType()
const {
88 if(entityType == NODE_SELECTED) {
89 return node(complexEntityId);
106 if(entityType == EDGE_SELECTED) {
107 return edge(complexEntityId);
117 unsigned int complexEntityId;
118 SelectedEntityType entityType;
119 Graph *complexEntityGraph;
161 GlScene(GlLODCalculator *calculator=NULL);
169 void initGlParameters();
194 void computeAjustSceneToSize(
int width,
int height, Coord *center, Coord *eye,
float *sceneRadius,
float *xWhiteFactor,
float *yWhiteFactor,
BoundingBox *sceneBoundingBox=NULL,
float *zoomFactor=NULL);
201 void ajustSceneToSize(
int width,
int height);
207 void zoomXY(
int step,
const int x,
const int y);
213 void zoom(
float factor,
const Coord& dest);
225 void zoomFactor(
float factor);
230 void translateCamera(
const int x,
const int y,
const int z);
238 void rotateScene(
const int x,
const int y,
const int z);
250 bool selectEntities(RenderingEntitiesFlag type,
int x,
int y,
int h,
int w,
GlLayer *layer,std::vector<SelectedEntity>& selectedEntities);
255 void outputSVG(
unsigned int size,
const std::string& filename);
260 void outputEPS(
unsigned int size,
const std::string& filename);
265 unsigned char * getImage();
272 viewport=newViewport;
298 backgroundColor=color;
305 return backgroundColor;
312 this->viewOrtho=viewOrtho;
328 GlLayer *createLayer(
const std::string &name);
337 GlLayer *createLayerBefore(
const std::string &layerName,
const std::string &beforeLayerWithName);
346 GlLayer *createLayerAfter(
const std::string &layerName,
const std::string &afterLayerWithName);
353 void addExistingLayer(
GlLayer *layer);
361 bool addExistingLayerBefore(
GlLayer *layer,
const std::string &beforeLayerWithName);
369 bool addExistingLayerAfter(
GlLayer *layer,
const std::string &afterLayerWithName);
375 GlLayer *getLayer(
const std::string& name);
383 void removeLayer(
const std::string& name,
bool deleteLayer=
true);
391 void removeLayer(
GlLayer *layer,
bool deleteLayer=
true);
405 for(std::vector<std::pair<std::string,GlLayer*> >::iterator it=layersList.begin(); it!=layersList.end(); ++it)
414 void getXML(std::string &out);
419 void getXMLOnlyForCameras(std::string &out);
424 void setWithXML(std::string &in,
Graph *graph);
430 return lodCalculator;
437 lodCalculator=calculator;
438 calculator->setScene(*
this);
451 return glGraphComposite;
466 assert(graphLayer!=NULL);
467 return graphLayer->getCamera();
475 assert(graphLayer!=NULL);
476 graphLayer->setCamera(camera);
483 clearBufferAtDraw = clear;
490 return clearBufferAtDraw;
495 std::vector<std::pair<std::string,GlLayer *> > layersList;
496 GlLODCalculator *lodCalculator;
497 Vector<int, 4> viewport;
498 Color backgroundColor;
504 bool clearBufferAtDraw;
530 void notifyModifyLayer(
const std::string &name,
GlLayer *layer);
545 #endif // Tulip_GLSCENE_H