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: Thu, 07 May 2009 21:13:07 +0200

An antenna consists of two facets that have the same vertices defining
them. Can happen when you try to delete facets.

Just in case, do you make sure that you only try to join incident
facets?

Jens

On Thu, 2009-05-07 at 08:11 +0200, Andreas Fabri wrote:
> Joel,
>
> it would be helpful, if you saved the polyhedron just before the join
> operation fails.
> Ideally, you provide a minimalistic example, and you tell us on which edge,
> that is
> which two points, it fails. Then we can try to have a look.
>
> andreas
>
>
> wrote:
> > Thanks for the help, the iteration works now.
> > Sorry, I dont really know what an antenna is in the context of a
> > polyhedron.
> >
> > I will try to clarify what I want to do:
> > My input mesh is a triangle mesh, for example a cube.
> > This cube consists of 12 triangles, 2 for each side.
> > What I want to have is a polyhedron with 6 polygons (quads in this case).
> >
> > For the simple example of the cube it works well, but when I want to do
> > the same with a triangulated quad consisting of many triangles, there are
> > many edges which can not be joined via polyhedron.join_facet(...).
> > I dont really know the reason for that, it would be nice if someone could
> > explain that.
> >
> > Joel
> >
> >
> > -------- Original-Nachricht --------
> >> Datum: Wed, 06 May 2009 21:48:52 +0200
> >> Von: "Dr. J.K. Becker"
> >> <>
> >> An:
> >>
> >> Betreff: Re: [cgal-discuss] Joining faces in polyhedron
> >
> >> 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
> >>>>
> >> --
> >> 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