Example #1
0
void ma_init()
{
	init_arr(&g_arr);	//dlist_init(&g_list);
	init_list(&g_list);
	srand(time(NULL));
}
Example #2
0
bool test_one_file(std::ifstream& in, int verbose_level)
{
  std::list<X_monotone_curve_2> xcurves;
  std::list<Point_2> isolated_points;
  read_arr(in, std::back_inserter(xcurves),
           std::back_inserter(isolated_points));
  Arrangement arr1;
  construct_arr(arr1, xcurves.begin(), xcurves.end(),
                isolated_points.begin(), isolated_points.end(), verbose_level);
  isolated_points.clear();
  xcurves.clear();
  init_arr(arr1, verbose_level);

  read_arr(in, std::back_inserter(xcurves),
           std::back_inserter(isolated_points));
  Arrangement arr2;
  construct_arr(arr2, xcurves.begin(), xcurves.end(),
                isolated_points.begin(), isolated_points.end(), verbose_level);
  isolated_points.clear();
  xcurves.clear();
  init_arr(arr2, verbose_level);

  // Read the number of cells left.
  Arrangement::Size num_vertices, num_edges, num_faces;
  in >> num_vertices >> num_edges >> num_faces;

  // Read the expected face data:
  std::vector<int> fdata(num_faces);
  std::copy(std::istream_iterator<int>(in), std::istream_iterator<int>(),
            fdata.begin());

  Arrangement arr;
  Overlay_traits overlay_traits;
  if (verbose_level > 2) std::cout << "overlaying" << " ... "; std::cout.flush();
  CGAL::overlay(arr1, arr2, arr, overlay_traits);
  if (verbose_level > 2) std::cout << "overlaid" << std::endl;

  // Verify the resulting arrangement.
  Arrangement::Size num_vertices_res = arr.number_of_vertices();
  Arrangement::Size num_edges_res = arr.number_of_edges();
  Arrangement::Size num_faces_res = arr.number_of_faces();

  if (verbose_level > 0) std::cout << "Arrangement Output: " << std::endl;

  if (verbose_level > 1) {
    std::cout << "Halfedge Data: " << std::endl;
    Halfedge_iterator heit;
    for (heit = arr.halfedges_begin(); heit != arr.halfedges_end(); ++heit)
      std::cout << heit->source()->point() << " "
                << heit->target()->point() << " " << heit->data()
                << std::endl;
  }

  if (verbose_level > 0) {
    std::cout << "Face Data: " << std::endl;
    Face_iterator fit;
    for (fit = arr.faces_begin(); fit != arr.faces_end(); ++fit)
      std::cout << fit->data() << std::endl;
  }

  if ((num_vertices_res != num_vertices) ||
      (num_edges_res != num_edges) ||
      (num_faces_res != num_faces))
  {
    std::cerr << "ERROR: The number of arrangement cells is incorrect:"
              << std::endl
              << "   V = " << arr.number_of_vertices()
              << ", E = " << arr.number_of_edges()
              << ", F = " << arr.number_of_faces()
              << std::endl;
    arr.clear();
    return false;
  }

  std::vector<int> fdata_res(num_faces);
  std::vector<int>::iterator it = fdata_res.begin();
  Face_iterator fit;
  for (fit = arr.faces_begin(); fit != arr.faces_end(); ++fit)
     *it++ = fit->data();
  std::sort(fdata_res.begin(), fdata_res.end());
  if (! std::equal(fdata_res.begin(), fdata_res.end(), fdata.begin())) {
    std::cerr << "ERROR: Incorrect face data:" << std::endl;
    std::copy(fdata_res.begin(), fdata_res.end(),
              std::ostream_iterator<int>(std::cout, "\n"));
    arr.clear();
    return false;
  }

  arr.clear();
  return true;
}
Example #3
0
identifier<int>::identifier()
    : _arr(NULL), _elements()
{
    init_arr();
}