COIN-OR::LEMON - Graph Library

source: lemon-0.x/gui/graph_displayer_canvas-edge.cc @ 1581:9bb83c7f479b

Last change on this file since 1581:9bb83c7f479b was 1581:9bb83c7f479b, checked in by Hegyi Péter, 19 years ago

There were bugs, created yesterday, and there is still one. (I hope only one :) )

  • Property exe set to *
File size: 4.1 KB
RevLine 
[1510]1#include <graph_displayer_canvas.h>
2#include <broken_edge.h>
3#include <math.h>
4
5
[1512]6int GraphDisplayerCanvas::changeEdgeWidth (std::string mapname, Graph::Edge edge)
[1510]7{
[1525]8  Graph::EdgeMap<double> * actual_map;
9  if(mapname=="Default")
10    {
11      actual_map=new Graph::EdgeMap<double>(g,edge_property_defaults[E_WIDTH]);
12    }
13  else
14    {
15      actual_map=(mapstorage.edgemap_storage)[mapname];
16    }
17
[1512]18  if(edge==INVALID)
[1510]19    {
[1512]20      for (EdgeIt i(g); i!=INVALID; ++i)
21        {
[1525]22          int w=(int)(*actual_map)[i];
[1512]23          if(w>=0)
24            {
25              edgesmap[i]->property_width_pixels().set_value(w);
26            }
27        }
28    }
29  else
30    {
[1525]31      int w=(int)(*actual_map)[edge];
[1510]32      if(w>=0)
33        {
[1512]34          edgesmap[edge]->property_width_pixels().set_value(w);
[1510]35        }
36    }
37  return 0;
38};
39
[1512]40int GraphDisplayerCanvas::changeEdgeColor (std::string mapname, Graph::Edge edge)
[1510]41
42
43  //function maps the range of the maximum and
44  //the minimum of the nodemap to the range of
45  //green in RGB
[1525]46  Graph::EdgeMap<double> * actual_map;
47  if(mapname=="Default")
48    {
49      actual_map=new Graph::EdgeMap<double>(g,edge_property_defaults[E_COLOR]);
50    }
51  else
52    {
53      actual_map=(mapstorage.edgemap_storage)[mapname];
54    }
55
56  double max, min;
57
58  if(mapname!="Default")
59    {
60      max=mapstorage.maxOfEdgeMap(mapname);
61      min=mapstorage.minOfEdgeMap(mapname);
62    }
63  else
64    {
65      max=edge_property_defaults[E_COLOR];
66      min=edge_property_defaults[E_COLOR];
67    }
68
[1512]69  if(edge==INVALID)
70    {
71      for (EdgeIt i(g); i!=INVALID; ++i)
72        {
[1525]73          double w=(*actual_map)[i];
74
[1512]75          Gdk::Color color;
76          if(max!=min)
77            {
78              color.set_rgb_p (0, 100*(w-min)/(max-min), 0);
79            }
80          else
81            {
82              color.set_rgb_p (0, 100, 0);
83            }
84          edgesmap[i]->property_fill_color_gdk().set_value(color);
85        }
86    }
87  else
[1510]88    {
[1512]89      Gdk::Color color;
[1525]90
91      double w=(*actual_map)[edge];
92
[1512]93      if(max!=min)
94        {
95          color.set_rgb_p (0, 100*(w-min)/(max-min), 0);
96        }
97      else
98        {
99          color.set_rgb_p (0, 100, 0);
100        }
101
102      edgesmap[edge]->property_fill_color_gdk().set_value(color);
[1510]103    }
104  return 0;
105};
106
[1512]107int GraphDisplayerCanvas::changeEdgeText (std::string mapname, Graph::Edge edge)
[1510]108{
109
110  //the number in the map will be written on the edge
111  //EXCEPT when the name of the map is Text, because
112  //in that case empty string will be written, because
113  //that is the deleter map
114
[1512]115  if(edge==INVALID)
[1510]116    {
[1512]117      for (EdgeIt i(g); i!=INVALID; ++i)
[1510]118        {
[1525]119          if(mapname!="Default")
[1512]120            {
[1579]121              edgemap_to_edit=mapname;
[1512]122              double number=(*(mapstorage.edgemap_storage)[mapname])[i];
123              int length=1;
124              //if number is smaller than one, length would be negative, or invalid
125              if(number>=1)
126                {
127                  length=(int)(floor(log(number)/log(10)))+1;
128                }
129              int maxpos=(int)(pow(10,length-1));
130              int strl=length+1+RANGE;
131              char * str=new char[strl];
132              str[length]='.';
133              str[strl]='\0';
134     
135              for(int j=0;j<strl;j++)
136                {
137                  if(j!=length)
138                    {
[1581]139                      if((number-(int)number)>ALMOST_ONE)
140                        {
141                          number=round(number);
142                        }
[1512]143                      int digit=(int)(number/maxpos);
144                      str[j]=(digit+'0');
145                      number-=digit*maxpos;
146                      number*=10;
147                    }
148                }
149     
150              edgetextmap[i]->property_text().set_value(str);
151            }
152          else
153            {
[1579]154              edgemap_to_edit="";
[1512]155              edgetextmap[i]->property_text().set_value("");
156            }
157        }
158
159    }
160  else
161    {
[1525]162      if(mapname!="Default")
[1512]163        {
164          double number=(*(mapstorage.edgemap_storage)[mapname])[edge];
[1510]165          int length=1;
166          //if number is smaller than one, length would be negative, or invalid
167          if(number>=1)
168            {
169              length=(int)(floor(log(number)/log(10)))+1;
170            }
171          int maxpos=(int)(pow(10,length-1));
172          int strl=length+1+RANGE;
173          char * str=new char[strl];
174          str[length]='.';
175          str[strl]='\0';
176     
177          for(int j=0;j<strl;j++)
178            {
179              if(j!=length)
180                {
[1581]181                  if((number-(int)number)>ALMOST_ONE)
182                    {
183                      number=round(number);
184                    }
[1510]185                  int digit=(int)(number/maxpos);
186                  str[j]=(digit+'0');
187                  number-=digit*maxpos;
188                  number*=10;
189                }
190            }
191     
[1512]192          edgetextmap[edge]->property_text().set_value(str);
[1510]193        }
194      else
195        {
[1512]196          edgetextmap[edge]->property_text().set_value("");
[1510]197        }
[1512]198         
[1510]199    }
[1512]200
[1510]201  return 0;
[1512]202
[1510]203};
Note: See TracBrowser for help on using the repository browser.