00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00032 #ifndef _GRAPH_WRAPPER_H_
00033 #define _GRAPH_WRAPPER_H_
00034
00035 #include <iostream>
00036 #include <graphviz/gvc.h>
00037 #include <graphviz/graph.h>
00038 #include <boost/lexical_cast.hpp>
00039 #include <algorithm>
00040 #include <vector>
00041 #include <map>
00042
00043 using namespace std;
00044 using namespace boost;
00045
00054 class GVGraph
00055 {
00056 public:
00058 static const double DotDefaultDPI;
00059
00066 GVGraph(string name,double node_size=50);
00067
00073 ~GVGraph();
00074
00075
00083 void addNode(const string& name);
00084
00091 void addNodes(vector<string>& names);
00092
00102 void removeNode(const string& name);
00103
00109 void clearNodes();
00110
00118 Agnode_t*selectNode(string&name);
00119
00120 Agedge_t*selectEdge(string&source,string&target);
00121
00130 int setNodeAttribute(string name,string attribute,string value);
00131
00132 int setEdgeAttribute(string source,string target,string attribute,string value);
00133
00141 void addEdge(const string& source, const string& target);
00142
00151 void removeEdge(const string& source, const string& target);
00152
00160 void removeEdge(const pair<string, string>& key);
00161
00168 void setRootNode(const string& name);
00169
00176 void applyLayout();
00177
00183 void freeLayout();
00184
00191 void startRender();
00192
00198 GVC_t*getGVCcontext(void);
00199
00200 private:
00208 Agraph_t* _agopen(string name,int kind);
00209
00217 Agsym_t* _agnodeattr(string name,string value);
00218
00226 Agsym_t* _agedgeattr(string name,string value);
00227
00237 string _agget(void*object,string attr,string alt=string());
00238
00248 int _agset(void*object,string attr,string value);
00249
00257 Agnode_t* _agnode(string name);
00258
00268 int _gvLayout(GVC_t*gvc,graph_t*graph,string engine);
00269
00271 GVC_t*_context;
00272
00274 Agraph_t*_graph;
00275
00277 map<string, Agnode_t*> _nodes;
00278
00280 map<pair<string,string>, Agedge_t*> _edges;
00281 };
00282
00283 #endif