COIN-OR::LEMON - Graph Library

source: lemon-0.x/gui/graph_displayer_canvas-node.cc @ 1833:6d107b0b6b46

Last change on this file since 1833:6d107b0b6b46 was 1825:535d2eccfc03, checked in by Akos Ladanyi, 19 years ago

fixed some memory leaks

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