20 #ifndef TULIP_LAYOUT_H 
   21 #define TULIP_LAYOUT_H 
   23 #include <tulip/tuliphash.h> 
   24 #include <tulip/PropertyTypes.h> 
   25 #include <tulip/Observable.h> 
   26 #include <tulip/AbstractProperty.h> 
   27 #include <tulip/PropertyAlgorithm.h> 
   28 #include <tulip/minmaxproperty.h> 
   38 class PropertyContext;
 
   41 typedef AbstractProperty<tlp::PointType, tlp::LineType> AbstractLayoutProperty;
 
   42 typedef MinMaxProperty<tlp::PointType, tlp::LineType> LayoutMinMaxProperty;
 
   54   static const std::string propertyTypename;
 
   55   std::string getTypename()
 const {
 
   56     return propertyTypename;
 
   68   Coord getMax(
Graph *subgraph=NULL);
 
   75   Coord getMin(
Graph *subgraph=NULL);
 
   87   void translate(
const Vec3f &move, 
Graph *subgraph=NULL);
 
   99   void translate(
const Vec3f &move, Iterator<node> *itNodes, Iterator<edge> *itEdges);
 
  107   void scale(
const Vec3f &scaleFactors, 
Graph *subgraph=NULL);
 
  119   void scale(
const Vec3f &scaleFactors, Iterator<node> *itNodes, Iterator<edge> *itEdges);
 
  127   void rotateX(
const double &alpha, 
Graph *subgraph=NULL);
 
  135   void rotateY(
const double &alpha, 
Graph *subgraph=NULL);
 
  143   void rotateZ(
const double &alpha, 
Graph *subgraph=NULL);
 
  155   void rotateX(
const double &alpha, Iterator<node> *itNodes, Iterator<edge> *itEdges);
 
  167   void rotateY(
const double &alpha, Iterator<node> *itNodes, Iterator<edge> *itEdges);
 
  179   void rotateZ(
const double &alpha, Iterator<node> *itNodes, Iterator<edge> *itEdges);
 
  187   void center(
Graph *subgraph=NULL);
 
  196   void center(
const Vec3f &newCenter, 
Graph *subgraph=NULL);
 
  203   void normalize(
Graph *subgraph=NULL);
 
  208   void perfectAspectRatio();
 
  223   double edgeLength(
const edge e) 
const;
 
  230   double averageEdgeLength(
const Graph *subgraph=NULL) 
const;
 
  239   double averageAngularResolution(
const Graph *subgraph=NULL) 
const;
 
  249   double averageAngularResolution(
const node n, 
const Graph *subgraph=NULL) 
const;
 
  259   std::vector<double> angularResolutions(
const node n, 
const Graph *subgraph=NULL) 
const;
 
  268   void computeEmbedding(
Graph *subgraph=NULL);
 
  278   void computeEmbedding(
const node n, 
Graph *subgraph=NULL);
 
  287   virtual void setNodeValue(
const node, 
const Coord &v);
 
  288   virtual void setEdgeValue(
const edge, 
const std::vector<Coord> &v);
 
  289   virtual void setAllNodeValue(
const Coord &v);
 
  290   virtual void setAllEdgeValue(
const std::vector<Coord> &v);
 
  297   void resetBoundingBox();
 
  298   void rotate(
const double& alpha, 
int rot, Iterator<node> *, Iterator<edge> *);
 
  300   void treatEvent(
const Event&);
 
  312   static const std::string propertyTypename;
 
  313   std::string getTypename()
 const {
 
  314     return propertyTypename;