Skip to Content.
Sympa Menu

cgal-discuss - Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem]

Subject: CGAL users discussion list

List archive

Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem]


Chronological Thread 
  • From:
  • To:
  • Subject: Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem]
  • Date: Wed, 17 Mar 2010 11:37:57 +0100
  • Importance: Normal

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


> 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
>





Archive powered by MHonArc 2.6.16.

Top of Page