Open
Graph Drawing
Framework

 v.2012.05
 

EdgeAttributes.h
Go to the documentation of this file.
00001 /*
00002  * $Revision: 2299 $
00003  * 
00004  * last checkin:
00005  *   $Author: gutwenger $ 
00006  *   $Date: 2012-05-07 15:57:08 +0200 (Mon, 07 May 2012) $ 
00007  ***************************************************************/
00008  
00043 #ifdef _MSC_VER
00044 #pragma once
00045 #endif
00046 
00047 #ifndef OGDF_EDGE_ATTRIBUTES_H
00048 #define OGDF_EDGE_ATTRIBUTES_H
00049 
00050 #include <ogdf/basic/geometry.h>
00051 #include <ogdf/basic/Graph.h>
00052 
00053 namespace ogdf {
00054 
00055 class OGDF_EXPORT EdgeAttributes
00056 {
00057    //helping data structure that stores the graphical attributes of an edge
00058    //that are needed for the force-directed  algorithms.
00059 
00060    //outputstream for EdgeAttributes
00061    friend ostream &operator<< (ostream &,const EdgeAttributes &);
00062    
00063    //inputstream for EdgeAttributes
00064    friend istream &operator>> (istream &,EdgeAttributes &);
00065            
00066    public:
00067       
00068       EdgeAttributes();    //constructor
00069       ~EdgeAttributes();   //destructor
00070       
00071       void set_EdgeAttributes(double l,edge e_orig,edge e_sub)
00072       {
00073        length = l;
00074        e_original = e_orig;
00075        e_subgraph = e_sub;
00076       } 
00077 
00078       void set_length(double l) {length = l;}
00079       double get_length() const {return length;}
00080 
00081 
00082       //needed for the divide et impera step in FMMM      
00083 
00084       void set_original_edge (edge e) {e_original = e;}
00085       void set_subgraph_edge (edge e) {e_subgraph = e;} 
00086       edge get_original_edge() const {return e_original;}
00087       edge get_subgraph_edge() const {return e_subgraph;}
00088 
00089      //needed for the preprocessing step in FMMM (set/get_original_edge are needed, too)
00090      
00091      void set_copy_edge (edge e) {e_subgraph = e;} 
00092      edge get_copy_edge() const {return e_subgraph;}
00093 
00094      //needed for multilevel step
00095 
00096      void set_higher_level_edge (edge e) {e_subgraph = e;} 
00097      edge get_higher_level_edge() const {return e_subgraph;}
00098      bool is_moon_edge() const {return moon_edge;}
00099      void make_moon_edge() { moon_edge = true;}
00100      bool is_extra_edge() const {return extra_edge;}
00101      void make_extra_edge() { extra_edge = true;}
00102      void mark_as_normal_edge() {extra_edge = false;}
00103      void init_mult_values() { e_subgraph = NULL; moon_edge = false;}
00104 
00105    private:         
00106      double length;
00107      edge e_original;
00108      edge e_subgraph;     
00109      bool moon_edge; //indicates if this edge is associasted with a moon node
00110      bool extra_edge;//indicates if this edge is an extra edge that is added to
00111                      //enforce few edge crossings
00112 };
00113 }//namespace ogdf
00114 #endif
00115 
00116