COIN-OR::LEMON - Graph Library

Ignore:
Timestamp:
06/24/05 20:16:12 (15 years ago)
Author:
Hegyi Péter
Branch:
default
Phase:
public
Convert:
svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@1996
Message:

NodeMap? values are now visualizable. Todo: default map-values

File:
1 edited

Legend:

Unmodified
Added
Removed
  • gui/graph_displayer_canvas-event.cc

    r1510 r1512  
    100100        double dy=e->motion.y-clicked_y;
    101101
     102        //repositioning node and its text
    102103        active_item->move(dx, dy);
     104        nodetextmap[active_node]->move(dx, dy);
    103105
    104106        clicked_x=e->motion.x;
     
    130132              }
    131133
     134            //reposition of edgetext
    132135            xy<double> text_pos=edgesmap[ei]->get_arrow_pos();
    133136            text_pos+=(xy<double>(10,10));
     
    190193      *(nodesmap[active_node]) << Gnome::Canvas::Properties::outline_color("black");
    191194      (nodesmap[active_node])->show();
     195
     196      nodetextmap[active_node]=new Gnome::Canvas::Text(displayed_graph, clicked_x+node_property_defaults[N_RADIUS]+5, clicked_y+node_property_defaults[N_RADIUS]+5, "");
     197      nodetextmap[active_node]->property_fill_color().set_value("darkblue");
     198
     199      mapwin->update_node(active_node);
     200
    192201      break;
    193202
     
    273282              if(target_node!=INVALID)
    274283                {
    275                   *(nodesmap[target_node]) << Gnome::Canvas::Properties::fill_color("red");
    276 
    277                   //creating new edge
    278                   active_edge=EdgeIt(g,g.addEdge(active_node, target_node));
    279 
    280                   //initiating values corresponding to new edge in maps
    281                   mapstorage.init_maps_for_edge(active_edge);
     284                  if(target_node!=active_node)         
     285                    {
     286                      *(nodesmap[target_node]) << Gnome::Canvas::Properties::fill_color("red");
     287
     288                      //creating new edge
     289                      active_edge=EdgeIt(g,g.addEdge(active_node, target_node));
     290
     291                      //initiating values corresponding to new edge in maps
     292                      mapstorage.init_maps_for_edge(active_edge);
    282293         
    283                   //calculating coordinates of new edge
    284                   Gnome::Canvas::Points coos;
    285                   double x1, x2, y1, y2;
     294                      //calculating coordinates of new edge
     295                      Gnome::Canvas::Points coos;
     296                      double x1, x2, y1, y2;
    286297         
    287                   active_item->get_bounds(x1, y1, x2, y2);
    288                   coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2));
    289 
    290                   target_item->get_bounds(x1, y1, x2, y2);
    291                   coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2));
    292 
    293                   //drawing new edge
    294                   edgesmap[active_edge]=new BrokenEdge(displayed_graph, coos, *this);
    295                   *(edgesmap[active_edge]) << Gnome::Canvas::Properties::fill_color("green");
    296                   edgesmap[active_edge]->property_width_pixels().set_value(10);
    297 
    298                   //redraw nodes to blank terminations of the new edge
    299                   target_item->raise_to_top();
    300                   active_item->raise_to_top();
    301 
    302                   //initializing edge-text as well, to empty string
    303                   xy<double> text_pos=edgesmap[active_edge]->get_arrow_pos();
    304                   text_pos+=(xy<double>(10,10));
    305 
    306                   edgetextmap[active_edge]=new Gnome::Canvas::Text(displayed_graph, text_pos.x, text_pos.y, "");
    307                   edgetextmap[active_edge]->property_fill_color().set_value("black");
     298                      active_item->get_bounds(x1, y1, x2, y2);
     299                      coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2));
     300
     301                      target_item->get_bounds(x1, y1, x2, y2);
     302                      coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2));
     303
     304                      //drawing new edge
     305                      edgesmap[active_edge]=new BrokenEdge(displayed_graph, coos, *this);
     306                      *(edgesmap[active_edge]) << Gnome::Canvas::Properties::fill_color("green");
     307                      edgesmap[active_edge]->property_width_pixels().set_value(10);
     308
     309                      //redraw nodes to blank terminations of the new edge
     310                      target_item->raise_to_top();
     311                      active_item->raise_to_top();
     312
     313                      //initializing edge-text as well, to empty string
     314                      xy<double> text_pos=edgesmap[active_edge]->get_arrow_pos();
     315                      text_pos+=(xy<double>(10,10));
     316
     317                      edgetextmap[active_edge]=new Gnome::Canvas::Text(displayed_graph, text_pos.x, text_pos.y, "");
     318                      edgetextmap[active_edge]->property_fill_color().set_value("darkgreen");
     319
     320                      //updating its properties
     321                      mapwin->update_edge(active_edge);
     322                    }
     323                  else
     324                    {
     325                      target_node=INVALID;
     326                      std::cout << "Loop edge is not yet implemented!" << std::endl;
     327                    }
    308328                }
    309329              //clicked item was not a node. it could be an e.g. edge. we do not deal with it furthermore.
     
    436456void GraphDisplayerCanvas::delete_item(NodeIt node_to_delete)
    437457{
     458  delete(nodetextmap[node_to_delete]);
    438459  delete(nodesmap[node_to_delete]);
    439460  g.erase(node_to_delete);
     
    442463void GraphDisplayerCanvas::delete_item(EdgeIt edge_to_delete)
    443464{
     465  delete(edgetextmap[edge_to_delete]);
    444466  delete(edgesmap[edge_to_delete]);
    445467  g.erase(edge_to_delete);
     
    448470void GraphDisplayerCanvas::delete_item(Graph::Edge edge_to_delete)
    449471{
     472  delete(edgetextmap[edge_to_delete]);
    450473  delete(edgesmap[edge_to_delete]);
    451474  g.erase(edge_to_delete);
Note: See TracChangeset for help on using the changeset viewer.