Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] Joining faces in polyhedron

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] Joining faces in polyhedron


Chronological Thread 
  • From: "Dr. J.K. Becker" <>
  • To:
  • Subject: Re: [cgal-discuss] Joining faces in polyhedron
  • Date: Wed, 06 May 2009 21:48:52 +0200

I am not sure if I really understood this Mathieu, but would that not be
an antenna which CGAL really does not like at all anyway (CGAL is happy
to produce one, but any further operations on a polyhedron with an
antenna will fail, at least it does for me)? And no, as far as I know,
there are no build in checks for antennas...

Anyway, polyhedra (or polygons) can have holes, no problem with that in
CGAL.

Joel, I am not sure I understood what you want to do correctly, but if
you want to join all incident facets of a 3D triangulation that have
the same normal, you will not join anything really (at least you will
most likely never end up with a closed polyhedron)?! Except if you
started of with a regular grid of points for the triangulation, but in
that case you dont really need to triangulate anything? I am trying to
figure out something very similar (and have not solved it) so maybe I am
completely wrong....

Jens


On Wed, 2009-05-06 at 18:08 +0200, Mathieu Brédif wrote:
> Hi,
>
> If I am not mistaken, polyhedral facets may not have holes in CGAL.
> This means that you can only remove edges if they are not adjacent to
> the same face on both sides.
>
> Mathieu
>
> On Wed, May 6, 2009 at 5:52 PM, Andreas Fabri
> <>
> wrote:
> > Hi Joel,
> >
> > You must make a copy of the iterator, increment it and then work on the
> > copy
> > in the body of the loop.
> > This is because the halfedges are in an in-place list, your join operation
> > removes them and the iterator
> > no longer points on something reasonable
> >
> > for ( Halfedge_iterator j = polyhedron.halfedges_begin(); j !=
> > polyhedron.halfedges_end(); ){
> > Halfedge_iterator i = j;
> > ++j;
> > // and now your code again
> > .
> > .
> > }
> >
> >
> > I think you have even to increment j twice, as the twin halfedges are
> > stored
> > consecutively.
> > Alternatively you should use an Edge_iterator.
> >
> >
> > andreas
> >
> >
> >
> > wrote:
> >>
> >> Hi!
> >>
> >> I am trying to convert a triangle mesh to a polyhedron, i.e. I want to
> >> join all faces which are adjacent and have the same normal
> >>
> >> As an easy example I chose a flat patch consisting of triangles in .off
> >> format. As a result I want to have a polyhedron consisting of a single
> >> polygon.
> >>
> >> I was able to load the file, but the follwoing did not work:
> >>
> >> for ( Halfedge_iterator i = polyhedron.halfedges_begin(); i !=
> >> polyhedron.halfedges_end(); ++i) {
> >> if( i->is_border_edge() )
> >> continue;
> >>
> >> Polyhedron::Facet_handle f1 = i->facet();
> >> Polyhedron::Facet_handle f2 = i->opposite()->facet();
> >> Halfedge_handle he1 = f1->halfedge();
> >> Point_3 p0 = he1->vertex()->point();
> >> Point_3 p1 = he1->next()->vertex()->point();
> >> Point_3 p2 = he1->next()->next()->vertex()->point();
> >> Kernel::Vector_3 n_i = CGAL::cross_product(p0-p2, p1-p2);
> >> n_i = n_i / sqrt(n_i.squared_length());
> >>
> >> Halfedge_handle he2 = f2->halfedge();
> >> p0 = he2->vertex()->point();
> >> p1 = he2->next()->vertex()->point();
> >> p2 = he2->next()->next()->vertex()->point();
> >>
> >> Kernel::Vector_3 n_j = CGAL::cross_product(p0-p2, p1-p2);
> >> n_j = n_j / sqrt(n_j.squared_length());
> >>
> >> if(n_i == n_j)
> >> {
> >> if( circulator_size(i->opposite()->vertex_begin()) >= 3 &&
> >> circulator_size(i->vertex_begin()) >= 3 )
> >> polyhedron.join_facet(i);
> >> }
> >> }
> >>
> >> There seem to be 2 problems: - after joining to faces the iterator
> >> becomes
> >> invalid
> >> - some faces cannot be joined, but why and how can I change that?
> >>
> >> Can anyone help me please?
> >>
> >> Have a nice day,
> >> Joel
> >
> > --
> > 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