Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] Re: 3D boolean support

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] Re: 3D boolean support


Chronological Thread 
  • From: "Sebastien Loriot (GeometryFactory)" <>
  • To:
  • Subject: Re: [cgal-discuss] Re: 3D boolean support
  • Date: Mon, 26 Mar 2012 23:21:56 +0200

On 03/10/2012 02:43 AM, Zohar wrote:

Here is a small test:

https://docs.google.com/open?id=0B4PDrM6_sr2UdzFJYTZYOWdTb2VJTkp5WmVuXzAxdw

There are three shapes. It's the same geometry translated. Union s.off and
s1.off. Union the previous result with s2.off. I got:

Error !!!!!!!!!!!!!!!!!!!!!!!
CGAL error: assertion violation!
Expression : pe_prev->is_border() ||
!internal::Plane_constructor<Plane>::get_plane(pe_prev->facet(),pe_prev->facet()->plane()).is_degenerate()
File : c:\program files
(x86)\cgal-4.0-beta1\include\cgal\nef_3\polyhedron_3_to_nef_3.h
Line : 253
Explanation:

--
View this message in context:
http://cgal-discuss.949826.n4.nabble.com/3D-boolean-support-tp4459502p4461228.html
Sent from the cgal-discuss mailing list archive at Nabble.com.

The following worked fine for me, what ever the order I do the unions.

Sebastien.

#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <CGAL/Polyhedron_3.h>
#include <CGAL/IO/Polyhedron_iostream.h>
#include <CGAL/Nef_polyhedron_3.h>
#include <CGAL/IO/Nef_polyhedron_iostream_3.h>
#include <iostream>
#include <fstream>

typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel;
typedef CGAL::Polyhedron_3<Kernel> Polyhedron;
typedef CGAL::Polyhedron_3<CGAL::Simple_cartesian<double> > Polyhedron_d;
typedef CGAL::Nef_polyhedron_3<Kernel> Nef_polyhedron;
typedef Kernel::Vector_3 Vector_3;
typedef Kernel::Aff_transformation_3 Aff_transformation_3;

int main(int argc, char** argv) {
Polyhedron P1;
Polyhedron P2;
Polyhedron P3;
std::ifstream f1(argv[1]);
f1 >> P1;
std::ifstream f2(argv[2]);
f2 >> P2;
std::ifstream f3(argv[3]);
f3 >> P3;
Nef_polyhedron N1(P1);
Nef_polyhedron N2(P2);
Nef_polyhedron N3(P3);

std::cout << N1.number_of_volumes() << std::endl;
std::cout << N2.number_of_volumes() << std::endl;
std::cout << N3.number_of_volumes() << std::endl;

N1+= N2;
N1+=N3;

std::cout << N1.number_of_volumes() << std::endl;

}




Archive powered by MHonArc 2.6.16.

Top of Page