int main() { Point p(1.0, 0.0, 0.0); Point q(0.0, 1.0, 0.0); Point r(0.0, 0.0, 1.0); Point s(0.0, 0.0, 0.0); Polyhedron polyhedron; polyhedron.make_tetrahedron(p, q, r, s); // constructs the AABB tree and the internal search tree for // efficient distance queries. Tree tree( CGAL::edges(polyhedron).first, CGAL::edges(polyhedron).second, polyhedron); tree.accelerate_distance_queries(); // counts #intersections with a triangle query Triangle triangle_query(p,q,r); std::cout << tree.number_of_intersected_primitives(triangle_query) << " intersections(s) with triangle" << std::endl; // computes the closest point from a query point Point point_query(2.0, 2.0, 2.0); Point closest = tree.closest_point(point_query); std::cerr << "closest point is: " << closest << std::endl; return EXIT_SUCCESS; }
int main() { Polyhedron P; Point a(1,0,0); Point b(0,1,0); Point c(0,0,1); Point d(0,0,0); P.make_tetrahedron(a,b,c,d); // associate indices to the vertices using the "id()" field of the vertex. vertex_iterator vb, ve; int index = 0; // boost::tie assigns the first and second element of the std::pair // returned by boost::vertices to the variables vit and ve for(boost::tie(vb,ve)=vertices(P); vb!=ve; ++vb ){ vertex_descriptor vd = *vb; vd->id() = index++; } kruskal(P); return 0; }
void test_write_read() { typedef CGAL::Nef_polyhedron_3< Kernel > Nef_polyhedron; typedef CGAL::Polyhedron_3< Kernel > Polyhedron; typedef typename Kernel::Point_3 Point; typename Kernel::RT n( std::string("6369051672525773")); typename Kernel::RT d( std::string("4503599627370496")); Point p(n, 0, 0, d); Point q(0, n, 0, d); Point r(0, 0, n, d); Point s(0, 0, 0, 1); std::cout << " build...\n"; Polyhedron P; P.make_tetrahedron( p, q, r, s); Nef_polyhedron nef_1( P ); std::cout << " write...\n"; std::ofstream out ("temp.nef"); out << nef_1; out.close(); std::cout << " read...\n"; std::ifstream in ("temp.nef"); Nef_polyhedron nef_2; in >> nef_2; in.close(); std::cout << " check...\n"; assert( nef_1 == nef_2); }
int main() { // Generated points are in that vector std::vector<Point> points; // Create input polyhedron Polyhedron polyhedron; polyhedron.make_tetrahedron(Point(-1,0,0), Point(0,1,0), Point(1,0,0), Point(0,0,-1)); // Create domain Mesh_domain domain(polyhedron); using namespace CGAL::parameters; // Mesh criteria (no cell_size set) Mesh_criteria criteria(facet_angle=25, facet_size=0.15, facet_distance=0.008, cell_radius_edge_ratio=3); // Mesh generation C3t3 c3t3 = CGAL::make_mesh_3<C3t3>(domain, criteria, no_perturb(), no_exude()); // Create the generator, input is the C3t3 c3t3 Random_points_in_tetrahedral_mesh_3<C3t3> g(c3t3); // Get 100 random points in cdt CGAL::cpp11::copy_n( g, 100, std::back_inserter(points)); // Check that we have really created 100 points. assert( points.size() == 100); // test if the generated points are close std::cout << points[0] << std::endl; return 0; }
int main() { Point p(1.0, 0.0, 0.0); Point q(0.0, 1.0, 0.0); Point r(0.0, 0.0, 1.0); Point s(0.0, 0.0, 0.0); Polyhedron polyhedron; polyhedron.make_tetrahedron(p, q, r, s); run<K>(polyhedron); return EXIT_SUCCESS; }
int main() { Point_3 p( 1, 0, 0); Point_3 q( 0, 1, 0); Point_3 r( 0, 0, 1); Point_3 s( 0, 0, 0); Polyhedron P; P.make_tetrahedron( p, q, r, s); std::transform( P.facets_begin(), P.facets_end(), P.planes_begin(), Plane_equation()); CGAL::set_pretty_mode( std::cout); std::copy( P.planes_begin(), P.planes_end(), std::ostream_iterator<Plane_3>( std::cout, "\n")); return 0; }
int main() { Polyhedron P; Point a(1,0,0); Point b(0,1,0); Point c(0,0,1); Point d(0,0,0); P.make_tetrahedron(a,b,c,d); kruskal(P); return 0; }
int main() { Point p( 1.0, 0.0, 0.0); Point q( 0.0, 1.0, 0.0); Point r( 0.0, 0.0, 1.0); Point s( 0.0, 0.0, 0.0); Polyhedron P; P.make_tetrahedron( p,q,r,s); CGAL::Geomview_stream geo; geo << CGAL::GREEN << P; // wait for a mouse click. Point click; geo >> click; return 0; }
void modify_vertex_position() { Polyhedron P; Halfedge_handle h = P.make_tetrahedron(); if ( P.is_tetrahedron(h)) { int i(0); for(Vertex_iterator vi = P.vertices_begin(); vi != P.vertices_end(); ++vi,++i) { std::cout << "before changing vertex " << i << ": " << vi->point().x() << vi->point().y() << vi->point().z() << endl; Point_3 pt(1, 0, 0); vi->point() = pt; std::cout << "after changing vertex " << i << ": " << vi->point().x() << vi->point().y() << vi->point().z() << endl; } } }
int main() { // Generated points are in that vector std::vector<Point> points; // Create input polyhedron Polyhedron polyhedron; polyhedron.make_tetrahedron(Point(-1,0,0), Point(0,1,0), Point(1,0,0), Point(0,0,-1)); // Create the generator, input is the Polyhedron polyhedron Random_points_in_triangle_mesh_3<Polyhedron> g(polyhedron); // Get 100 random points in cdt CGAL::cpp11::copy_n(g, 100, std::back_inserter(points)); // Check that we have really created 100 points. assert( points.size() == 100); // print the first point that was generated std::cout << points[0] << std::endl; return 0; }
int main() { Point p(1.0, 0.0, 0.0); Point q(0.0, 1.0, 0.0); Point r(0.0, 0.0, 1.0); Point s(0.0, 0.0, 0.0); Polyhedron polyhedron; polyhedron.make_tetrahedron(p, q, r, s); // constructs AABB tree and computes internal KD-tree // data structure to accelerate distance queries Tree tree(faces(polyhedron).first, faces(polyhedron).second, polyhedron); tree.accelerate_distance_queries(); // query point Point query(0.0, 0.0, 3.0); // computes squared distance from query FT sqd = tree.squared_distance(query); std::cout << "squared distance: " << sqd << std::endl; // computes closest point Point closest = tree.closest_point(query); std::cout << "closest point: " << closest << std::endl; // computes closest point and primitive id Point_and_primitive_id pp = tree.closest_point_and_primitive(query); Point closest_point = pp.first; Polyhedron::Face_handle f = pp.second; // closest primitive id std::cout << "closest point: " << closest_point << std::endl; std::cout << "closest triangle: ( " << f->halfedge()->vertex()->point() << " , " << f->halfedge()->next()->vertex()->point() << " , " << f->halfedge()->next()->next()->vertex()->point() << " )" << std::endl; return EXIT_SUCCESS; }
int main() { Point p(1.0, 0.0, 0.0); Point q(0.0, 1.0, 0.0); Point r(0.0, 0.0, 1.0); Point s(0.0, 0.0, 0.0); Polyhedron polyhedron; polyhedron.make_tetrahedron(p, q, r, s); // constructs AABB tree Tree tree(polyhedron.facets_begin(),polyhedron.facets_end(),polyhedron); // constructs segment query Point a(-0.2, 0.2, -0.2); Point b(1.3, 0.2, 1.3); Segment segment_query(a,b); // tests intersections with segment query if(tree.do_intersect(segment_query)) std::cout << "intersection(s)" << std::endl; else std::cout << "no intersection" << std::endl; // computes #intersections with segment query std::cout << tree.number_of_intersected_primitives(segment_query) << " intersection(s)" << std::endl; // computes first encountered intersection with segment query // (generally a point) Segment_intersection intersection = tree.any_intersection(segment_query); if(intersection) { // gets intersection object if(boost::get<Point>(&(intersection->first))) std::cout << "intersection object is a point" << std::endl; } // computes all intersections with segment query (as pairs object - primitive_id) std::list<Segment_intersection> intersections; tree.all_intersections(segment_query, std::back_inserter(intersections)); // computes all intersected primitives with segment query as primitive ids std::list<Primitive_id> primitives; tree.all_intersected_primitives(segment_query, std::back_inserter(primitives)); // constructs plane query Vector vec(0.0,0.0,1.0); Plane plane_query(a,vec); // computes first encountered intersection with plane query // (generally a segment) Plane_intersection plane_intersection = tree.any_intersection(plane_query); if(plane_intersection) { if(boost::get<Segment>(&(plane_intersection->first))) std::cout << "intersection object is a segment" << std::endl; } return EXIT_SUCCESS; }