COIN-OR::LEMON - Graph Library

source: glemon-0.x/graph_displayer_canvas.cc @ 31:66e85f44a66f

gui
Last change on this file since 31:66e85f44a66f was 31:66e85f44a66f, checked in by Hegyi Péter, 19 years ago

Uh, long comment arrives... Zoom update does not happen after editorial steps. Nodes initial color is light blue, if there is any item under them. Strange node-text relations disappeared. Initial values of new items are given now in a more common way. The wood-cutter way of handling default values of properties is now changed.

  • Property exe set to *
File size: 3.0 KB
Line 
1#include <graph_displayer_canvas.h>
2#include <broken_edge.h>
3#include <math.h>
4
5GraphDisplayerCanvas::GraphDisplayerCanvas(Graph & gr, CoordinatesMap & cm, MapStorage & ms, MapWin * mw):g(gr),nodesmap(g),edgesmap(g),edgetextmap(g),nodetextmap(g),displayed_graph(*(root()), 0, 0),mapstorage(ms),isbutton(0),active_item(NULL),target_item(NULL),mapwin(mw)
6{
7 
8  actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::moveEventHandler), false);
9  actual_tool=CREATE_NODE;
10
11  active_node=INVALID;
12  active_edge=INVALID;
13
14  //set_center_scroll_region(true);
15
16  //first edges are drawn, to hide joining with nodes later
17
18  for (EdgeIt i(g); i!=INVALID; ++i)
19  {
20
21    //drawing green lines, coordinates are from cm
22
23    Gnome::Canvas::Points coos;
24    coos.push_back(Gnome::Art::Point(cm[g.source(i)].x,cm[g.source(i)].y));
25    coos.push_back(Gnome::Art::Point(cm[g.target(i)].x,cm[g.target(i)].y));
26   
27    edgesmap[i]=new BrokenEdge(displayed_graph, coos, *this);
28    *(edgesmap[i]) << Gnome::Canvas::Properties::fill_color("green");
29    edgesmap[i]->property_width_pixels().set_value(10);   
30   
31    //initializing edge-text as well, to empty string
32
33    xy<double> text_pos=edgesmap[i]->getArrowPos();
34    text_pos+=(xy<double>(10,10));
35
36    edgetextmap[i]=new Gnome::Canvas::Text(displayed_graph, text_pos.x, text_pos.y, "");
37    edgetextmap[i]->property_fill_color().set_value("darkgreen");
38  }
39
40  //afterwards nodes come to be drawn
41
42  NodeIt i(g);
43  int maxx=0, maxy=0, minx=(int)cm[i].x, miny=(int)cm[i].y;
44
45  for (; i!=INVALID; ++i)
46  {
47    //minimum and maximum is gathered to be able to zoom to the graph correctly (whole figure should be seen)
48
49    if(cm[i].x>maxx)maxx=(int)cm[i].x;
50    if(cm[i].y>maxy)maxy=(int)cm[i].y;
51    if(cm[i].x<minx)minx=(int)cm[i].x;
52    if(cm[i].y<miny)miny=(int)cm[i].y;
53
54    //drawing bule nodes, with black line around them
55
56    nodesmap[i]=new Gnome::Canvas::Ellipse(displayed_graph, cm[i].x-20, cm[i].y-20, cm[i].x+20, cm[i].y+20);
57    *(nodesmap[i]) << Gnome::Canvas::Properties::fill_color("blue");
58    *(nodesmap[i]) << Gnome::Canvas::Properties::outline_color("black");
59
60    //initializing edge-text as well, to empty string
61
62    xy<double> text_pos((cm[i].x+node_property_defaults[N_RADIUS]+5),(cm[i].y+node_property_defaults[N_RADIUS]+5));
63
64    nodetextmap[i]=new Gnome::Canvas::Text(displayed_graph, text_pos.x, text_pos.y, "");
65    nodetextmap[i]->property_fill_color().set_value("darkblue");
66  }
67
68  updateScrollRegion();
69}
70
71GraphDisplayerCanvas::~GraphDisplayerCanvas()
72{
73
74  //writing out the end state of the graph
75  //\todo all the maps has to be write out!
76
77  Graph::NodeMap <int> id(g);
78  Graph::NodeMap <double> xc(g);
79  Graph::NodeMap <double> yc(g);
80 
81  int j=1;
82 
83  for (NodeIt i(g); i!=INVALID; ++i)
84  {
85    double x1,y1,x2,y2;
86    nodesmap[i]->get_bounds(x1, y1, x2, y2);
87   
88    id[i]=j++;
89    xc[i]=(x1+x2)/2;
90    yc[i]=(y1+y2)/2;
91  }
92
93  GraphWriter<Graph> writer(std::cout,g);
94 
95  writer.writeNodeMap("id", id);
96  writer.writeNodeMap("coordinates_x", xc);
97  writer.writeNodeMap("coordinates_y", yc);
98  writer.run();
99}
Note: See TracBrowser for help on using the repository browser.