Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] From Plane_3 to Surface_3

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] From Plane_3 to Surface_3


Chronological Thread 
  • From:
  • To:
  • Subject: Re: [cgal-discuss] From Plane_3 to Surface_3
  • Date: Tue, 23 Mar 2010 14:03:49 +0200

You need to use an exact-predicate and exact-construction kernel. If you do that and the problem still occurs, please send the entire (small) program that reproduces the problem.

Quoting
:

Hello,

I eventually have found that the planes are being taken in the right way
by dereferencing the iterator, but the program is failing in giving the
right envelope, and giving an unexplainable exception, I started to
believe that the algorithm has a problem... here's the part of the code,
where P is a closed polyhedron object


for(plane_it = P.planes_begin(); plane_it != P.planes_end();++plane_it)
{
planes.push_back(Surface_3(*plane_it));
cout<<*plane_it<<endl;
}

/*
//this is a part where the example inserted the points
planes.push_back (Surface_3(Plane_3(-1, 0, 1, 0)));
planes.push_back (Surface_3(Plane_3(0, 1 , 1, 0)));
planes.push_back (Surface_3(Plane_3(1, 0, 1, 0)));
*/

// Compute and print the minimization diagram.
Envelope_diagram_2 min_diag;

CGAL::lower_envelope_3 (planes.begin(), planes.end(), min_diag);

std::cout << std::endl << "The minimization diagram:" << std::endl;
print_diagram (min_diag);

// Compute and print the maximization diagram.
Envelope_diagram_2 max_diag;

CGAL::upper_envelope_3 (planes.begin(), planes.end(), max_diag);

std::cout << std::endl << "The maximization diagram:" << std::endl;
print_diagram (max_diag);

The polyhedron I'm using has like 30 facets or more, and is closed and
follow the Euler characteristic, and I could view it using Geomview. So
I'm very confused and don't know where the error could be. The exception
differs everytime because I'm every time generating a new polyhedron that
fulfills the conditions mention. here's the error I'm getting in Terminal:

terminate called after throwing an instance of 'CGAL::Precondition_exception'
what(): CGAL ERROR: precondition violation!
Expr: cv.has_left()
File: /usr/local/include/CGAL/Arr_linear_traits_2.h
Line: 682
Aborted

and here's another one too:
terminate called after throwing an instance of 'CGAL::Precondition_exception'
what(): CGAL ERROR: precondition violation!
Expr: f == f2
File: /usr/local/include/CGAL/Arrangement_2/Arrangement_on_surface_2_impl.h
Line: 2639
Explanation: The two halfedges must share the same incident face.
Aborted

This last error I can't understand, what does the envelope thing have to
do with the halfedges? I'm giving the program plane equations and it has
nothing to do with my polyhedron.

Any effort is highly appreciated,

Thank you,
Samer Afach




Hello programmers,

I have a question since I'm not a professional C++ programmer. I'm
trying to apply the 3D envelope example 32.3.3 in

http://www.cgal.org/Manual/last/doc_html/cgal_manual/Envelope_3/Chapter_main.html

but I'm taking the planes from a polyhedron, and I have them in the type
Plane_3 through the iterator Polyhedron::begin() to end(). The example
takes them in the form Surface_3(Plane_3()), how can I do this
transformation? I tried to use std::transform for this but I failed.
The example provides it using the 4 coefficients of a plane, I can see
these coefficients of my Plane_3 object on a cout stream, but I can't
extract them alone one by one.

Could you please either tell me the correct transformation method for
this or tell me how to extract the coefficients from my Plane_3 object?

Thank you,
Samer Afach

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