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