示例#1
0
文件: render.cpp 项目: CGAL/releases
void R_s_k_2::draw_one_cost(const Edge& edge,
    const FT min_value,
    const FT max_value,
    const bool view_ghost)
{
  FT mass = m_dt.get_mass(edge);
  if (mass == 0.0)
  {
    if (!view_ghost) return;
    viewer->glColor3f(0.5f, 0.5f, 0.5f);
    draw_edge(edge);
    return;
  }

  if (m_dt.is_ghost(edge))
  {
    if (!view_ghost) return;
    viewer->glColor3f(0.5f, 0.5f, 0.5f);
    draw_edge(edge);
    return;
  }

  FT value = m_dt.get_cost(edge).finalize(m_alpha);
  FT color = (value - min_value) / (max_value - min_value);
  viewer->glColor3d(0.0, 1.0-color, color); // [green, blue]
                                          draw_edge(edge);
}
示例#2
0
void draw_menu_iter(void)
{
	static bool sparse = FALSE;
	Simulation *sim = stgs.linked_sim;
#if LOOP_OPT_STEPS
	static size_t prev_steps = 0;
	bool do_draw = sim->steps-prev_steps >= exp(max(stgs.speed-LOOP_OPT_SPEED, 0));

	if (do_draw) {
#endif
		draw_dir_arrow();
		draw_function();
		draw_steps();
#if LOOP_OPT_STEPS
		prev_steps = sim->steps;
	}
#endif
	if (!sparse && is_grid_sparse(sim->grid)) {
		draw_edge();
		sparse = TRUE;
		do_draw = TRUE;
	}
#if LOOP_OPT_STEPS
	if (do_draw) {
#endif
		wnoutrefresh(menuw);
#if LOOP_OPT_STEPS
	}
#endif
}
示例#3
0
int Graf::save_svg(ostream &out)
    {
        if(currentLayout && n>0)
            {
                out << head_svg;
                int maxx = 0,maxy=0,v,cx,cy,cindex;
                for(cindex=0;cindex<n;cindex++)
                {
                    Nod& cnode = getNode(cindex);
                    if(maxx < cnode.x) maxx = cnode.x;
                    if(maxy < cnode.y) maxy = cnode.y;
                }
                maxx += 40; maxy += 40;
                cx = (maxx / 100) + (maxx % 100 ? 1 : 0);
                cy = (maxy / 100) + (maxy % 100 ? 1 : 0);
                put_viewbox(out,cx,cy);
                for(v=0;v<capacitate;v++)
                    if(lnod[v].alocat)
                        {
                            Muchie *cap;
                            cx = lnod[v].x; cy = lnod[v].y;
                            for(cap=lnod[v].first;cap;cap=cap->next)
                                if(cap->v > v)
                                    draw_edge(out,cx,cy,lnod[cap->v].x,lnod[cap->v].y);
                        }
                for(v=0;v<capacitate;v++)
                    if(lnod[v].alocat)
                            draw_node(out,v,lnod[v].x,lnod[v].y);
                out << svg_end;
                return 1;
            }
        else return 0;
    }
示例#4
0
static void draw_subtree_edges (tsp_bbnode *bbnode, int depth, int maxdepth,
                                double upbound)
{
    if (bbnode->child0 != (tsp_bbnode *) NULL &&
            (maxdepth <= 0 || depth < maxdepth) &&
            bbnode->child0->lowerbound <= upbound - 1.0) {
        draw_edge (bbnode, bbnode->child0);
        draw_subtree_edges (bbnode->child0, depth+1, maxdepth, upbound);
    }
    if (bbnode->child1 != (tsp_bbnode *) NULL &&
            (maxdepth <= 0 || depth < maxdepth) &&
            bbnode->child1->lowerbound <= upbound - 1.0) {
        draw_edge (bbnode, bbnode->child1);
        draw_subtree_edges (bbnode->child1, depth+1, maxdepth, upbound);
    }
}
示例#5
0
文件: render.cpp 项目: CGAL/releases
void R_s_k_2::draw_pedges(const float line_width)
{
  int nb_edges = 0;
  int nb_pinned = 0;
  int nb_cyclic = 0;
  int nb_discart = 0;
  FT min_value = (std::numeric_limits<FT>::max)();
  FT max_value = -(std::numeric_limits<FT>::max)();
  std::vector<FT>  values;
  std::vector<Edge> edges;
  for (Finite_edges_iterator ei = m_dt.finite_edges_begin(); ei != m_dt.finite_edges_end(); ++ei)
  {
    Edge edge = *ei;
    for (unsigned int i = 0; i < 2; ++i)
    {
      if (m_dt.is_pinned(edge))
      {
        nb_pinned++;
        continue;
      }

      if (m_dt.is_target_cyclic(edge))
      {
        nb_cyclic++;
        continue;
      }

      PEdge pedge;
      bool ok = create_pedge(edge, pedge);
      if (ok)
      {
        edges.push_back(edge);
        values.push_back(pedge.priority());
        min_value = (std::min)(min_value, values.back());
        max_value = (std::max)(max_value, values.back());
      }
      else
      {
        nb_discart++;
        viewer->glColor3f(1.0, 0.0, 1.0);
        draw_edge(edge);
      }
      edge = m_dt.twin_edge(edge);
      nb_edges++;
    }
  }
  if (min_value == max_value) max_value += 1.0;

  std::size_t N = values.size();
  for (unsigned int i = 0; i < N; ++i)
    draw_one_pedge(edges[i], values[i], min_value, max_value, line_width);

  std::cout << "There are: " << N << " pedges"
      << " x " << nb_discart << " discarted"
      << " x " << nb_pinned << " pinned"
      << " x " << nb_cyclic << " cyclic"
      << " = " << nb_edges << " edges"
      << std::endl;
}
示例#6
0
void CLevelGraph::draw_vertex		(const int &vertex_id)
{
	CGameGraph::const_iterator	I,E;
	const CGameGraph			&graph = ai().game_graph();
	graph.begin					(vertex_id,I,E);
	for ( ; I != E; ++I) {
		int						neighbour_id = graph.value(vertex_id,I);
		if (neighbour_id < vertex_id)
			draw_edge			(vertex_id,neighbour_id);
	}
}
示例#7
0
文件: render.cpp 项目: CGAL/releases
void R_s_k_2::draw_edges(const float line_width,
    const float red,
    const float green,
    const float blue)
{
  viewer->glLineWidth(line_width);
  for (Finite_edges_iterator ei = m_dt.finite_edges_begin();
      ei != m_dt.finite_edges_end(); ei++)
  {
    Edge edge = *ei;
    Edge twin = m_dt.twin_edge(edge);
    if (m_dt.is_pinned(edge) && m_dt.is_pinned(twin))
      viewer->glColor3f(0.9f,0.9f,0.75f);
    else
      viewer->glColor3f(red,green,blue);
    draw_edge(edge);
  }
}
示例#8
0
void draw_menu_full(void)
{
	draw_edge();
	draw_logo();
	draw_color_list();
	draw_init_size();
	draw_direction();
	draw_speed();
	draw_function();
	draw_control_buttons();
	draw_io_buttons();
	draw_size();
	draw_steps();
	draw_labels();
	wnoutrefresh(menuw);

	if (dialogw) {
		draw_dialog();
	}
}
示例#9
0
/* Dibuja las aristas para cada nodo de esta celda */
static void draw_raw_links(cairo_t* cr, Zone* cell)
{
    cairo_set_line_width(cr, 2 * LINE_SIZE);
    /* Por cada nodo de la celda */
    for(int i = 0; i < cell -> building_count; i++)
    {
        /* La arista toma el color del nodo */
        color_dip(cr, cell -> buildings[i] -> color);
        for(int j = 0; j < cell -> buildings[i] -> link_count; j++)
        {
            draw_edge(cr, cell-> buildings[i], cell-> buildings[i]-> linked[j]);

            /* La dibujamos en el lienzo */
            color_dip(cr, cell-> buildings[i] -> color);
            cairo_set_line_width(cr,2 * LINE_SIZE);
            cairo_stroke(cr);
        }
        /* Marcamos que ya pasamos por este nodo en esta pasada */
        cell -> buildings[i] -> drawn = draw_count;
    }
}
示例#10
0
文件: render.cpp 项目: CGAL/releases
void R_s_k_2::draw_relevance(const float line_width, const int nb)
{
  MultiIndex mindex;
  FT min_value = (std::numeric_limits<FT>::max)();
  FT max_value = -(std::numeric_limits<FT>::max)();
  unsigned int nb_initial = 0;
  for (Finite_edges_iterator ei = m_dt.finite_edges_begin(); ei != m_dt.finite_edges_end(); ++ei)
  {
    Edge edge = *ei;
    if (m_dt.is_ghost(edge)) continue;
    FT value = m_dt.get_edge_relevance(edge); // >= 0

    nb_initial++;
    min_value = (std::min)(min_value, value);
    max_value = (std::max)(max_value, value);
    mindex.insert(PEdge(edge, value));
  }
  if (min_value == max_value) max_value += 1.0;

  viewer->glLineWidth(line_width);
  int nb_remove = (std::min)(nb, int(mindex.size()));

  viewer->glColor3d(0.5, 0.1, 0.1);
  for (int i = 0; i < nb_remove; ++i)
  {

    PEdge pedge = *(mindex.get<1>()).begin();
    (mindex.get<0>()).erase(pedge);
  }

  viewer->glColor3d(0.0, 0.5, 0.0);
  while (!mindex.empty())
  {
    PEdge pedge = *(mindex.get<1>()).begin();
    (mindex.get<0>()).erase(pedge);
    draw_edge(pedge.edge());
  }
}