Ejemplo n.º 1
0
static PyObject *Revision_get_object_data(
	Revision *self, PyObject *args, PyObject *kwds)
{
	PyObject *ob_arg = NULL;
	static char *kwlist[] = { "ob", NULL };

	if (!PyArg_ParseTupleAndKeywords(
		    args, kwds, "O!:Revision.get_object_data", kwlist,
		    &ObjectType, &ob_arg))
		return NULL;

	xorn_object_t ob = ((Object *)ob_arg)->ob;
	xorn_obtype_t type = xorn_get_object_type(self->rev, ob);

	switch (type) {
	case xorn_obtype_none:
		PyErr_SetNone(PyExc_KeyError);
		return NULL;
	case xornsch_obtype_arc:
		return construct_arc(xornsch_get_arc_data(self->rev, ob));
	case xornsch_obtype_box:
		return construct_box(xornsch_get_box_data(self->rev, ob));
	case xornsch_obtype_circle:
		return construct_circle(
			xornsch_get_circle_data(self->rev, ob));
	case xornsch_obtype_component:
		return construct_component(
			xornsch_get_component_data(self->rev, ob));
	case xornsch_obtype_line:
		return construct_line(xornsch_get_line_data(self->rev, ob));
	case xornsch_obtype_net:
		return construct_net(xornsch_get_net_data(self->rev, ob));
	case xornsch_obtype_path:
		return construct_path(xornsch_get_path_data(self->rev, ob));
	case xornsch_obtype_picture:
		return construct_picture(
			xornsch_get_picture_data(self->rev, ob));
	case xornsch_obtype_text:
		return construct_text(xornsch_get_text_data(self->rev, ob));
	}

	char buf[BUFSIZ];
	snprintf(buf, BUFSIZ, "Object type not supported (%d)", type);
	PyErr_SetString(PyExc_ValueError, buf);
	return NULL;
}
int main ()
{
  CGAL::set_pretty_mode(std::cout);             // for nice printouts.

  // Traits class object 
  Traits_2 traits; 
  Traits_2::Construct_x_monotone_curve_2 construct_arc
    = traits.construct_x_monotone_curve_2_object(); 

  // container storing all arcs 
  std::vector<Traits_2::X_monotone_curve_2>  arcs;
  
  // Create an arc supported by the function y = 0.1x^4 - 0.6x^2 + 0.8 / 0.1,
  // defined over the interval [-2.1, 2.1]:
  Rat_vec P1,Q1;
  P1.push_back(Rational(8,10));
  P1.push_back(Rational(0));
  P1.push_back(Rational(-6,10));
  P1.push_back(Rational(0));
  P1.push_back(Rational(1,10));
  
  Q1.push_back(Rational(1,10));
  
  Alg_real_1 l(Traits_2::Algebraic_kernel_d_1::Bound(-2.1));
  Alg_real_1 r(Traits_2::Algebraic_kernel_d_1::Bound(2.1));
  arcs.push_back(construct_arc(P1.begin(), P1.end(), Q1.begin(), Q1.end(), l, r));

  // Create an arc supported by the function y = 0.1x / (0.1 + 0.1x^2),
  // defined over the interval [-3, 3]:
  Rat_vec P2,Q2;
  P2.push_back(Rational(0));
  P2.push_back(Rational(1,10));
  
  Q2.push_back(Rational(1,10));
  Q2.push_back(Rational(0));
  Q2.push_back(Rational(1,10));
  
  arcs.push_back(construct_arc(P2.begin(), P2.end(), Q2.begin(), Q2.end(),
                               Alg_real_1(-3), Alg_real_1(3)));
  
  // Create an arc supported by the parbola y = 0.8 - 0.1x^2 / 0.1,
  // defined over the interval [-2, 3]:
  Rat_vec P3,Q3;
  P3.push_back(Rational(4,5));
  P3.push_back(Rational(0));
  P3.push_back(Rational(-1,10));

  Q3.push_back(Rational(1,10));
  
  arcs.push_back(construct_arc(P3.begin(), P3.end(), Q3.begin(), Q3.end(),
                               Alg_real_1(-2), Alg_real_1(3)));
  
  // Create an arc supported by the line y = -0.2x / 0.1,
  // defined over the interval [-3, 0]:
  Rat_vec P4,Q4;
  P4.push_back(Rational(0));
  P4.push_back(Rational(-1,5));
  Q4.push_back(Rational(1,10));
  arcs.push_back(construct_arc(P4.begin(), P4.end(), Q4.begin(), Q4.end(),
                               Alg_real_1(-3), Alg_real_1(0)));

  // Print the arcs.
  for (unsigned int i(0); i < arcs.size(); ++i)
    std::cout << arcs[i]<<std::endl;

  // Construct the arrangement of the four arcs.
  Arrangement_2 arr(&traits);
  insert(arr, arcs.begin(), arcs.end());

  // Print the arrangement size.
  std::cout << "The arrangement size:" << std::endl
            << "   V = " << arr.number_of_vertices()
            << ",  E = " << arr.number_of_edges()
            << ",  F = " << arr.number_of_faces() << std::endl;

  return 0;
}