Open
Graph Drawing
Framework

 v.2010.10
 

EdgeAttributes.h

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