Skip to Content.
Sympa Menu

cgal-discuss - [cgal-discuss] Intersections

Subject: CGAL users discussion list

List archive

[cgal-discuss] Intersections


Chronological Thread 
  • From: Maria Eduarda Veras Martins <>
  • To:
  • Subject: [cgal-discuss] Intersections
  • Date: Thu, 27 Apr 2023 17:58:02 -0300
  • Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None ; spf=Pass ; spf=None
  • Ironport-data: A9a23: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
  • Ironport-hdrordr: A9a23:9aqO3apw6Up3Q7tU/hOlzF0aV5omeYIsimQD101hICG9E/bo8P xG+c5w6faaskdzZJhNo7C90cq7IE80l6QFg7X5VI3KNGLbUQCTXeRfBOXZslnd8u7FmtK1F5 0MT0GzMrLN5JFB4/rH3A==
  • Ironport-phdr: A9a23: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 EM6S/Zlolfgj+eXx3xtSkgWwgs=
  • Ironport-sdr: 644ae1e8_YlmzAMbg55j1UAb/6gcGEGtwAN7ol4PRyEqjTY1RYw+HaS9 uCQg/5jZE7SBaFxatIhy5ZrLu7TEQp7/frG1j6Q==

Hi!
I need to intersect several planes with a volumetric mesh. I'm making an aabb tree with the faces of the tetrahedron but I don't know how to efficiently intersect the planes.
Here is my code so far (only one plane):

#include <list>
#include <CGAL/AABB_tree.h>
#include <CGAL/AABB_traits.h>
#include <CGAL/AABB_triangle_primitive.h>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Mesh_triangulation_3.h>
#include <CGAL/Mesh_complex_3_in_triangulation_3.h>
#include <CGAL/Mesh_criteria_3.h>
#include <CGAL/Implicit_mesh_domain_3.h>
#include <CGAL/make_mesh_3.h>
#include <CGAL/iterator.h>
#include <iostream>
#include <fstream>
#include <map>
#include <vector>
#include <string>
#include <CGAL/utility.h>

// Domain
struct K: public CGAL::Exact_predicates_inexact_constructions_kernel {};
typedef K::FT FT;
typedef K::Point_3 Point;
typedef FT (Function)(const Point&);
typedef CGAL::Implicit_mesh_domain_3<Function,K> Mesh_domain;

// Triangulation
typedef CGAL::Mesh_triangulation_3<Mesh_domain>::type Tr;
typedef CGAL::Mesh_complex_3_in_triangulation_3<Tr> C3t3;

// Criteria
typedef CGAL::Mesh_criteria_3<Tr> Mesh_criteria;
typedef Mesh_criteria::Facet_criteria Facet_criteria;
typedef Mesh_criteria::Cell_criteria Cell_criteria;

typedef C3t3::Triangulation Tr;
typedef C3t3::Cell_handle Cell_handle;
typedef Tr::Facet Facet;
typedef Tr::Finite_facets_iterator Finite_facets_iterator;
typedef Tr::Finite_vertices_iterator Finite_vertices_iterator;
typedef Tr::Finite_cells_iterator Finite_cells_iterator;
typedef Tr::Vertex_handle Vertex_handle;


typedef K::Plane_3 Plane;
typedef K::Line_3 Line;
typedef K::Direction_3 Direction;
typedef K::Triangle_3 Triangle;
typedef K::Segment_3 Segment;
typedef std::list<Triangle>::iterator Iterator;
typedef CGAL::AABB_triangle_primitive<K,Iterator> Primitive;
typedef CGAL::AABB_traits<K, Primitive> AABB_triangle_traits;
typedef CGAL::AABB_tree<AABB_triangle_traits> Tree;
typedef Tree::Object_and_primitive_id Object_and_primitive_id;
typedef Tree::Primitive_id Primitive_id;

// Function
FT sphere_function (const Point& p)
{
const FT x2=p.x()*p.x();
const FT y2=p.y()*p.y();
const FT z2=p.z()*p.z();

return x2+y2+z2-1;
}

int main() {
// Domain
Mesh_domain domain(sphere_function, K::Sphere_3(CGAL::ORIGIN, 1.));

// Criteria
Facet_criteria facet_criteria(30, 0.1, 0.01); // angle, size, approximation
Cell_criteria cell_criteria(3, 0.1); // radius-edge ratio, size
Mesh_criteria criteria(facet_criteria, cell_criteria);

// Mesh generation
C3t3 c3t3 = CGAL::make_mesh_3<C3t3>(domain, criteria);

// Output
std::ofstream medit_file("outmatrix.mesh");
c3t3.output_to_medit(medit_file);

//std::cout<< "Number of verticesDT"<<" "<< c3t3.triangulation().number_of_vertices() << std::endl;
//std::cout<< "Number of facetsDT"<<" "<< c3t3.triangulation().number_of_finite_facets() << std::endl;
//std::cout<< "Number of facetsC3T3"<<" "<<c3t3.number_of_facets() << std::endl;
//std::cout<< "Number of cellsC3T3"<<" "<<c3t3.number_of_cells() << std::endl;
//std::cout<< "Number of cellsDT"<<" "<<c3t3.triangulation().number_of_finite_cells() << std::endl;


// for each facet build a triangle
std::list<Triangle> triangles;
for(Finite_facets_iterator fi = c3t3.triangulation().finite_facets_begin(); fi != c3t3.triangulation().finite_facets_end(); fi++) {

Cell_handle cell = fi->first;
int opposite_vertex_index = fi->second;
if(c3t3.is_in_complex(cell)) {
Triangle t=c3t3.triangulation().triangle(cell,opposite_vertex_index);
triangles.push_back(t);
}
else if (c3t3.is_in_complex(*fi)) {
Triangle t=c3t3.triangulation().triangle(*fi);
triangles.push_back(t);
}

}

Tree tree(triangles.begin(),triangles.end());

// set plane and count intersections
Point p(0, 0, 0);
Plane plane(p, K::Vector_3(1, 0, 0));

std::list <Object_and_primitive_id> intersections;
tree.all_intersections(plane, std::back_inserter(intersections));

//how to do it with many planes?
//I'm thinking of looping the plans, but I wanted something more efficient


return 0;
}



Archive powered by MHonArc 2.6.19+.

Top of Page