COIN-OR::LEMON - Graph Library

source: lemon-0.x/gui/graph_displayer_canvas-node.cc @ 1731:616bc933c2bc

Last change on this file since 1731:616bc933c2bc was 1731:616bc933c2bc, checked in by Hegyi Péter, 19 years ago

Mapselector widget reached its first release, but there are still work to do on it, I know...

  • Property exe set to *
File size: 6.8 KB
RevLine 
[1606]1#include "graph_displayer_canvas.h"
2#include "broken_edge.h"
[1632]3#include <cmath>
[1512]4
5
[1643]6int GraphDisplayerCanvas::changeNodeRadius (std::string mapname, Node node)
[1512]7{
[1525]8  Graph::NodeMap<double> * actual_map;
[1599]9  double min, max;
[1731]10  min=mapstorage.minOfNodeMap(mapname);
11  max=mapstorage.maxOfNodeMap(mapname);
12  actual_map=(mapstorage.nodemap_storage)[mapname];
13
14  if(node==INVALID)
[1525]15    {
[1731]16      for (NodeIt i(mapstorage.graph); i!=INVALID; ++i)
17        {
18          double v=fabs((*actual_map)[i]);
19          int w;
20          if(min==max)
21            {
22              w=(int)(node_property_defaults[N_RADIUS]);
23            }
24          else
25            {
26              w=(int)(MIN_NODE_RADIUS+(v-min)/(max-min)*(MAX_NODE_RADIUS-MIN_NODE_RADIUS));
27            }
28          if(w>=0)
29            {
30              double x1, y1, x2, y2;
31              x1=nodesmap[i]->property_x1().get_value();
32              x2=nodesmap[i]->property_x2().get_value();
33              y1=nodesmap[i]->property_y1().get_value();
34              y2=nodesmap[i]->property_y2().get_value();
35              nodesmap[i]->property_x1().set_value((x1+x2)/2-w);
36              nodesmap[i]->property_x2().set_value((x1+x2)/2+w);
37              nodesmap[i]->property_y1().set_value((y1+y2)/2-w);
38              nodesmap[i]->property_y2().set_value((y1+y2)/2+w);
39            }
40        }
[1525]41    }
42  else
43    {
[1731]44      //I think only new nodes use this case
45//       int w=(int)(*actual_map)[node];
46      int w=(int)(node_property_defaults[N_RADIUS]);
47      if(w>=0)
48        {
49          double x1, y1, x2, y2;
50          x1=nodesmap[node]->property_x1().get_value();
51          x2=nodesmap[node]->property_x2().get_value();
52          y1=nodesmap[node]->property_y1().get_value();
53          y2=nodesmap[node]->property_y2().get_value();
54          nodesmap[node]->property_x1().set_value((x1+x2)/2-w);
55          nodesmap[node]->property_x2().set_value((x1+x2)/2+w);
56          nodesmap[node]->property_y1().set_value((y1+y2)/2-w);
57          nodesmap[node]->property_y2().set_value((y1+y2)/2+w);
58        }
[1525]59    }
[1731]60  return 0;
61};
[1525]62
[1731]63int GraphDisplayerCanvas::resetNodeRadius (Node node)
64{
65  Graph::NodeMap<double> * actual_map;
66  double min, max;
67  min=node_property_defaults[N_RADIUS];
68  max=node_property_defaults[N_RADIUS];
69  actual_map=new Graph::NodeMap<double>(mapstorage.graph,node_property_defaults[N_RADIUS]);
70 
[1512]71  if(node==INVALID)
72    {
[1606]73      for (NodeIt i(mapstorage.graph); i!=INVALID; ++i)
[1512]74        {
[1614]75          double v=fabs((*actual_map)[i]);
[1599]76          int w;
77          if(min==max)
78            {
79              w=(int)(node_property_defaults[N_RADIUS]);
80            }
81          else
82            {
83              w=(int)(MIN_NODE_RADIUS+(v-min)/(max-min)*(MAX_NODE_RADIUS-MIN_NODE_RADIUS));
84            }
[1512]85          if(w>=0)
86            {
87              double x1, y1, x2, y2;
[1525]88              x1=nodesmap[i]->property_x1().get_value();
89              x2=nodesmap[i]->property_x2().get_value();
90              y1=nodesmap[i]->property_y1().get_value();
91              y2=nodesmap[i]->property_y2().get_value();
[1512]92              nodesmap[i]->property_x1().set_value((x1+x2)/2-w);
93              nodesmap[i]->property_x2().set_value((x1+x2)/2+w);
94              nodesmap[i]->property_y1().set_value((y1+y2)/2-w);
95              nodesmap[i]->property_y2().set_value((y1+y2)/2+w);
96            }
97        }
98    }
99  else
100    {
[1525]101      //I think only new nodes use this case
102//       int w=(int)(*actual_map)[node];
103      int w=(int)(node_property_defaults[N_RADIUS]);
[1512]104      if(w>=0)
105        {
106          double x1, y1, x2, y2;
[1525]107          x1=nodesmap[node]->property_x1().get_value();
108          x2=nodesmap[node]->property_x2().get_value();
109          y1=nodesmap[node]->property_y1().get_value();
110          y2=nodesmap[node]->property_y2().get_value();
[1512]111          nodesmap[node]->property_x1().set_value((x1+x2)/2-w);
112          nodesmap[node]->property_x2().set_value((x1+x2)/2+w);
113          nodesmap[node]->property_y1().set_value((y1+y2)/2-w);
114          nodesmap[node]->property_y2().set_value((y1+y2)/2+w);
115        }
116    }
117  return 0;
118};
119
[1643]120int GraphDisplayerCanvas::changeNodeColor (std::string mapname, Node node)
[1512]121
122
123  //function maps the range of the maximum and
124  //the minimum of the nodemap to the range of
125  //green in RGB
126
[1525]127  Graph::NodeMap<double> * actual_map;
[1731]128  actual_map=(mapstorage.nodemap_storage)[mapname];
129
130  double max, min;
131
132  max=mapstorage.maxOfNodeMap(mapname);
133  min=mapstorage.minOfNodeMap(mapname);
134
135  if(node==INVALID)
[1525]136    {
[1731]137
138      for (NodeIt i(mapstorage.graph); i!=INVALID; ++i)
139        {
140          Gdk::Color color;
141
142          double w=(*actual_map)[i];
143
144          if(max!=min)
145            {
146              color.set_rgb_p (0, 0, 100*(w-min)/(max-min));
147            }
148          else
149            {
150              color.set_rgb_p (0, 0, 100);
151            }
152
153          nodesmap[i]->property_fill_color_gdk().set_value(color);
154        }
[1525]155    }
156  else
157    {
[1731]158      Gdk::Color color;
159
160      double w=(*actual_map)[node];
161
162      if(max!=min)
163        {
164          color.set_rgb_p (0, 0, 100*(w-min)/(max-min));
165        }
166      else
167        {
168          color.set_rgb_p (0, 0, 100);
169        }
170
171      nodesmap[node]->property_fill_color_gdk().set_value(color);
[1525]172    }
[1731]173  return 0;
174};
175
176int GraphDisplayerCanvas::resetNodeColor (Node node)
177
178
179  //function maps the range of the maximum and
180  //the minimum of the nodemap to the range of
181  //green in RGB
182
183  Graph::NodeMap<double> * actual_map;
184  actual_map=new Graph::NodeMap<double>(mapstorage.graph,node_property_defaults[N_COLOR]);
[1525]185
186  double max, min;
187
[1731]188  max=node_property_defaults[N_COLOR];
189  min=node_property_defaults[N_COLOR];
[1525]190
[1512]191  if(node==INVALID)
192    {
193
[1606]194      for (NodeIt i(mapstorage.graph); i!=INVALID; ++i)
[1512]195        {
196          Gdk::Color color;
[1525]197
198          double w=(*actual_map)[i];
199
[1512]200          if(max!=min)
201            {
202              color.set_rgb_p (0, 0, 100*(w-min)/(max-min));
203            }
204          else
205            {
206              color.set_rgb_p (0, 0, 100);
207            }
208
209          nodesmap[i]->property_fill_color_gdk().set_value(color);
210        }
211    }
212  else
213    {
214      Gdk::Color color;
[1525]215
216      double w=(*actual_map)[node];
217
[1512]218      if(max!=min)
219        {
220          color.set_rgb_p (0, 0, 100*(w-min)/(max-min));
221        }
222      else
223        {
224          color.set_rgb_p (0, 0, 100);
225        }
226
227      nodesmap[node]->property_fill_color_gdk().set_value(color);
228    }
229  return 0;
230};
231
[1643]232int GraphDisplayerCanvas::changeNodeText (std::string mapname, Node node)
[1512]233{
234
235  //the number in the map will be written on the node
236  //EXCEPT when the name of the map is Text, because
237  //in that case empty string will be written, because
238  //that is the deleter map
[1525]239
[1581]240  Graph::NodeMap<double> * actual_map=NULL;
[1731]241  actual_map=(mapstorage.nodemap_storage)[mapname];
[1512]242
243  if(node==INVALID)
244    {
[1606]245      for (NodeIt i(mapstorage.graph); i!=INVALID; ++i)
[1512]246        {
[1731]247          nodemap_to_edit=mapname;
248          double number=(*actual_map)[i];
[1596]249
[1731]250          std::ostringstream ostr;
251          ostr << number;
[1596]252             
[1731]253          nodetextmap[i]->property_text().set_value(ostr.str());
[1512]254        }
255    }
256  else
257    {
[1731]258      double number=(*actual_map)[node];
[1596]259
[1731]260      std::ostringstream ostr;
261      ostr << number;
[1596]262             
[1731]263      nodetextmap[node]->property_text().set_value(ostr.str());
[1512]264    }
265  return 0;
266};
[1731]267
268int GraphDisplayerCanvas::resetNodeText (Node node)
269{
270
271  //the number in the map will be written on the node
272  //EXCEPT when the name of the map is Text, because
273  //in that case empty string will be written, because
274  //that is the deleter map
275
276  if(node==INVALID)
277    {
278      for (NodeIt i(mapstorage.graph); i!=INVALID; ++i)
279        {
280          nodemap_to_edit="";
281          nodetextmap[i]->property_text().set_value("");
282        }
283    }
284  else
285    {
286      nodetextmap[node]->property_text().set_value("");
287    }
288  return 0;
289};
Note: See TracBrowser for help on using the repository browser.