Subject: CGAL users discussion list
List archive
- From: "Sebastien Loriot (GeometryFactory)" <>
- To:
- Subject: Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem]
- Date: Wed, 17 Mar 2010 12:03:09 +0100
wrote:
Thank you so much for your answer.
but I still have 1 unclear issue. I've seen that that example creates a
triangle, meaning a surface. What if I want to create a closed polyhedron
(like a cube or a tetrahedron)? as a general question I would like to ask,
is CGAL able to form a "closed" polyhedron and know that it's closed in an
automatic manner? because as I drew in my first problem, I created the
surfaces, but the program wasn't able to detect that it's a closed
polyhedron (while it's of course closed, since I followed the same simple
point-structure of the example).
How can I tell CGAL to confirm (not check) that my polyhedron is closed,
so that if I use the check function Polyhedron::is_closed() I would get
the right answer?
Is the incremental builder the right tool for that task?
Thank you again,
Best Regards,
Samer Afach
First note that Polyhedron can only be used to represent one or more surfaces.
In the example joint, I manually create a tetrahedron to show that the
incremental builder add faces in a clever way (halfedge are reused when
you add a facet). The number of halfedges is 12.
To know if your surface is closed, you can rely on the theorem of
classification of surface and the Euler characteristic
(http://en.wikipedia.org/wiki/Euler_characteristic).
The Euler characteristic is 2 for each closed surface encoded by the polyhedron (the for each is really important here).
S.
Hello,
From what I understand you probably need to use the
Polyhedron_incremental_builder_3.
Have a look here for the documentation (there is an example at the end
of the page)
http://www.cgal.org/Manual/last/doc_html/cgal_manual/Polyhedron_ref/Class_Polyhedron_incremental_builder_3.html
S.
wrote:
Dear programmers,
I've drawn this question but no one has given me an answer. I would
really
appreciate it so much if someone could even give me a hint to solve this
problem. It's really very important for me.
Thank you in advance,
Sincerely,
Samer
---------------------------- Original Message
----------------------------
Subject: [cgal-discuss] Tetrahedron-Polyhedron problem
From: "Samer Afach"
<>
Date: Fri, March 12, 2010 5:15 pm
To:
--------------------------------------------------------------------------
Hello :),
I'm starting to create some simple polyhedra in order to go to bigger
applications, and so I'm trying to understand how this library works
with it.
I have a problem, the problem is that I'm failing to create 4 triangles
and form a tetrahedron from them. I'm avoiding using the function
Polyhedron::make_tetrahedron(...) because my aim in the future is
creating random polyhedra by combining triangles and check whether they
are closed and fulfill some conditions. Here's my program:
#include <CGAL/Homogeneous.h>
#include <CGAL/Polyhedron_traits_with_normals_3.h>
#include <CGAL/Polyhedron_3.h>
#include <iostream>
#include <algorithm>
using namespace std;
struct Normal_vector
{
template <class Facet>
typename Facet::Plane_3 operator()( Facet& f) {
typename Facet::Halfedge_handle h = f.halfedge();
// Facet::Plane_3 is the normal vector type. We assume the
// CGAL Kernel here and use its global functions.
return CGAL::cross_product(
h->next()->vertex()->point() - h->vertex()->point(),
h->next()->next()->vertex()->point() -
h->next()->vertex()->point());
}
};
typedef CGAL::Homogeneous<int> Kernel;
typedef Kernel::Point_3 Point_3;
typedef Kernel::Vector_3 Vector_3;
typedef CGAL::Polyhedron_traits_with_normals_3<Kernel> Traits;
typedef CGAL::Polyhedron_3<Traits> Polyhedron;
typedef Polyhedron::Halfedge_handle Halfedge_handle;
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);
P.make_triangle(p,q,r);
P.make_triangle(p,r,s);
P.make_triangle(p,s,q);
P.make_triangle(q,s,r);
if(P.is_closed())
{
cout<<"It's closed"<<endl;
}
if(P.is_pure_trivalent())
{
cout<<"Trivalent"<<endl;
}
std::transform( P.facets_begin(), P.facets_end(), P.planes_begin(),
Normal_vector());
CGAL::set_pretty_mode( std::cout);
std::copy( P.planes_begin(), P.planes_end(),
std::ostream_iterator<Vector_3>( std::cout, "\n"));
return 0;
}
I copied this program from a sample in the manual. What's confusing me
is that when I create a tetrahedron using the make_tetrahedron function,
the conditions work fine, but I can't get the same output when creating
a tetrahedron by "connecting" 3 dimensional triangles. I was even
careful having the same output as the example (same order for the norms)
Could anyone please tell me why that's happening, and I would appreciate
it so much if someone also could apply the function
Polyhedron::is_tetrahedron(Polyhedron::Halfedge_handle) also, because I
failed to do it because I didn't know how to get the right call for
Halfedge_handle.
Sincerest regards,
Samer Afach
Institute of computational physics, University of Stuttgart
--
You are currently subscribed to cgal-discuss.
To unsubscribe or access the archives, go to
https://lists-sop.inria.fr/wws/info/cgal-discuss
#include <CGAL/Simple_cartesian.h> #include <CGAL/Polyhedron_incremental_builder_3.h> #include <CGAL/Polyhedron_3.h> // A modifier creating a triangle with the incremental builder. template <class HDS> class Build_triangle : public CGAL::Modifier_base<HDS> { public: Build_triangle() {} void operator()( HDS& hds) { // Postcondition: `hds' is a valid polyhedral surface. CGAL::Polyhedron_incremental_builder_3<HDS> B( hds, true); B.begin_surface( 3, 1, 6); typedef typename HDS::Vertex Vertex; typedef typename Vertex::Point Point; B.add_vertex( Point( 0, 0, 0)); B.add_vertex( Point( 1, 0, 0)); B.add_vertex( Point( 0, 1, 0)); B.add_vertex( Point( 1, 1, 1)); B.begin_facet(); B.add_vertex_to_facet( 0); B.add_vertex_to_facet( 1); B.add_vertex_to_facet( 2); B.end_facet(); B.begin_facet(); B.add_vertex_to_facet( 1); B.add_vertex_to_facet( 3); B.add_vertex_to_facet( 2); B.end_facet(); B.begin_facet(); B.add_vertex_to_facet( 1); B.add_vertex_to_facet( 0); B.add_vertex_to_facet( 3); B.end_facet(); B.begin_facet(); B.add_vertex_to_facet( 0); B.add_vertex_to_facet( 2); B.add_vertex_to_facet( 3); B.end_facet(); B.end_surface(); } }; typedef CGAL::Simple_cartesian<double> Kernel; typedef CGAL::Polyhedron_3<Kernel> Polyhedron; typedef Polyhedron::HalfedgeDS HalfedgeDS; int main() { Polyhedron P; Build_triangle<HalfedgeDS> triangle; P.delegate( triangle); //~ CGAL_assertion( P.is_triangle( P.halfedges_begin())); std::cout << P.size_of_halfedges () << std::endl; int v=P.size_of_vertices(); int e=P.size_of_halfedges() / 2; int f=P.size_of_facets (); assert(v-e+f==2); return 0; }
- [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem], samer, 03/13/2010
- Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem], Sebastien Loriot (GeometryFactory), 03/15/2010
- Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem], samer, 03/17/2010
- Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem], Sebastien Loriot (GeometryFactory), 03/17/2010
- Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem], samer, 03/17/2010
- Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem], Sebastien Loriot (GeometryFactory), 03/17/2010
- Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem], samer, 03/17/2010
- Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem], Sebastien Loriot (GeometryFactory), 03/17/2010
- Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem], samer, 03/17/2010
- Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem], Sebastien Loriot (GeometryFactory), 03/17/2010
- Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem], samer, 03/17/2010
- Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem], samer, 03/17/2010
- Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem], Sebastien Loriot (GeometryFactory), 03/17/2010
- Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem], samer, 03/17/2010
- Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem], Sebastien Loriot (GeometryFactory), 03/17/2010
- Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem], samer, 03/17/2010
- Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem], Sebastien Loriot (GeometryFactory), 03/15/2010
Archive powered by MHonArc 2.6.16.