Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] Re: Nef_Polyhedron is_simple() going wild

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] Re: Nef_Polyhedron is_simple() going wild


Chronological Thread 
  • From: "Sebastien Loriot (GeometryFactory)" <>
  • To:
  • Subject: Re: [cgal-discuss] Re: Nef_Polyhedron is_simple() going wild
  • Date: Wed, 29 Jun 2011 10:40:26 +0200

Hello,

As documented here:
http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Nef_3/Chapter_main.html#Subsection_27.5.4
If you use the constructor of nef from a polyhedron, then the polyhedron
must be a 2-manifold. sphere0.off is definitely not (you have duplicated vertices and probably autointersection).

You can use the function OFF_to_nef_3
http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Nef_3_ref/Function_OFF_to_nef_3.html
to convert sphere0.off to a valid nef. However, the resulting nef is not
simple. The union operation can be computed but as the result is also
not simple you cannot export it as a polyhedron.

I simplified sphere0.off and your original code was working out of the
box.


Sebastien.

Jayesh Salvi wrote:
Ok, I have managed to put together a simple example that reproduces
the crash I reported earlier.

Attached is a simple .cpp program which reads two polyhedra from off
files and performs union operation on them. Also attached are the two
off files that you have to pass as argument to the program, in order
to make it crash.

I tested against CGAL 3.8.
--
Jayesh



On Wed, Jun 1, 2011 at 5:16 PM, Sebastien Loriot (GeometryFactory)
<>
wrote:
Sorry cannot debug with just this.


S.

Jayesh Salvi wrote:
Ok,

I've made some progress on this.

The wild behavior was probably due to our memory allocation bugs.
After replacing malloc, by calloc the erratic behavior went away and I
got a nice segmentation fault. Here is the stack trace:

(gdb) bt
#0 0xb7796cf5 in
CGAL::SNC_FM_decorator<CGAL::SNC_structure<CGAL::Epeck,
CGAL::SNC_indexed_items, bool>
::create_facet_objects(CGAL::Plane_3<CGAL::Epeck> const&,
std::_List_iterator<CGAL::Object>, std::_List_iterator<CGAL::Object>)
const
() from build/libcsgop.so
#1 0xb7783dc7 in
CGAL::SNC_external_structure<CGAL::SNC_indexed_items,
CGAL::SNC_structure<CGAL::Epeck, CGAL::SNC_indexed_items, bool>
::categorize_facet_cycles_and_create_facets() const () from
build/libcsgop.so
#2 0xb7789fcb in void
CGAL::SNC_external_structure<CGAL::SNC_indexed_items,
CGAL::SNC_structure<CGAL::Epeck, CGAL::SNC_indexed_items, bool>

::build_after_binary_operation<CGAL::ID_support_handler<CGAL::SNC_indexed_items,
CGAL::SNC_decorator<CGAL::SNC_structure<CGAL::Epeck,
CGAL::SNC_indexed_items, bool> > >
(CGAL::ID_support_handler<CGAL::SNC_indexed_items,
CGAL::SNC_decorator<CGAL::SNC_structure<CGAL::Epeck,
CGAL::SNC_indexed_items, bool> > >&) () from build/libcsgop.so
#3 0xb7775484 in void
CGAL::Binary_operation<CGAL::SNC_structure<CGAL::Epeck,
CGAL::SNC_indexed_items, bool>
::operator()<CGAL::Nef_polyhedron_3<CGAL::Epeck,
CGAL::SNC_indexed_items,

bool>::OR>(CGAL::SNC_point_locator<CGAL::SNC_decorator<CGAL::SNC_structure<CGAL::Epeck,
CGAL::SNC_indexed_items, bool> > >*, CGAL::SNC_structure<CGAL::Epeck,
CGAL::SNC_indexed_items, bool> const&,

CGAL::SNC_point_locator<CGAL::SNC_decorator<CGAL::SNC_structure<CGAL::Epeck,
CGAL::SNC_indexed_items, bool> > > const*,
CGAL::SNC_structure<CGAL::Epeck, CGAL::SNC_indexed_items, ---Type
<return> to continue, or q <return> to quit---
bool> const&,

CGAL::SNC_point_locator<CGAL::SNC_decorator<CGAL::SNC_structure<CGAL::Epeck,
CGAL::SNC_indexed_items, bool> > > const*,
CGAL::Nef_polyhedron_3<CGAL::Epeck, CGAL::SNC_indexed_items, bool>::OR
const&) () from build/libcsgop.so
#4 0xb776e6a6 in CGAL::Nef_polyhedron_3<CGAL::Epeck,
CGAL::SNC_indexed_items,
bool>::join(CGAL::Nef_polyhedron_3<CGAL::Epeck,
CGAL::SNC_indexed_items, bool> const&) const () from build/libcsgop.so
#5 0xb7769efc in CGAL::Nef_polyhedron_3<CGAL::Epeck,
CGAL::SNC_indexed_items,
bool>::operator+=(CGAL::Nef_polyhedron_3<CGAL::Epeck,
CGAL::SNC_indexed_items, bool> const&) () from build/libcsgop.so
#6 0xb7764308 in csgop () from build/libcsgop.so
... application specific frames ...

Does that give any clue?
--
Jayesh



On Tue, May 31, 2011 at 7:15 PM, Jayesh Salvi
<>
wrote:
Let me see if I can put together some minimal c++ code to demo this.
--
Jayesh



On Tue, May 31, 2011 at 11:31 AM, Sebastien Loriot (GeometryFactory)
<>
wrote:
Any complete minimal example showing the problem?

S.

Jayesh Salvi wrote:
^ Bump ^

Any thoughts?
--
Jayesh



On Sun, May 29, 2011 at 4:43 PM, Jayesh Salvi
<>
wrote:
Hello,

In my program I am creating two polyhedrons from two meshes (In this
case a cube and a sphere). Then I convert them to Nef Polyhedra and
apply union (+) operation on them. I then convert the returned Nef
Polyhedron into a Polyhedron_3, but before doing that I run
is_simple() check (just so that if it is not simple, I can generate an
error message, instead of assertion failure crash during the
conversion process).

In this particular case - with a cube and sphere of specific
geometries - I observed that after some time the program starts
occupying a lot of memory and consumes most of the CPU. From the top
utility, I can see that the process is taking >90% memory and >90%
CPU. To see what's going on, I put cout statements at various places
to see during which part of the program does this start to happen. I
was surprised to find out that this happens when I call is_simple()
check on the nef polyhedron. At this point either I have to kill the
process or the system terminates it.

I tried to run the program through valgrind, but as I read elsewhere
valgrind can't be used with CGAL programs because of floating point
issues.

Do you have any suggestions how can I proceed to debug this?

Thanks in advance.

(My project is available at http://jayesh3.github.com/cadmium/ I can
provide instructions on how to reproduce the issue, if you need)
--
Jayesh

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




OFF
6 8 0
0 0 2
2 0 0
0 0 -2
-2 0 0
0 2 0
0 -2 0

3 1 4 0
3 2 4 1
3 0 4 3
3 2 3 4

3 1 0 5
3 2 1 5
3 0 3 5
3 2 5 3






Archive powered by MHonArc 2.6.16.

Top of Page