Subject: CGAL users discussion list
List archive
- From: "Sebastien Loriot (GeometryFactory)" <>
- To:
- Subject: Re: [cgal-discuss] Intersections
- Date: Fri, 28 Apr 2023 09:35:07 +0200
- Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None ; spf=Pass ; spf=None
- Ironport-data: A9a23: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
- Ironport-hdrordr: A9a23:kJ3DbK2UUdwfVMIbHJCAIQqjBJEkLtp133Aq2lEZdPUnSL3/qy nIpoVm6faUskdtZJhEo7q90ca7MBHhHPJOkPIs1PKZLXPbUQiTXeRfBOnZsl7d8kTFn4Y3tZ uIMZIOcOEYZWIasS+Q2njeLz9P+qj/zEnlv5a7856vd21XgmNbgjuRxjz1LqS+fmd7OaY=
- Ironport-phdr: A9a23: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 EgiPzDBFeo5sg==
- Ironport-sdr: 644b772f_uAd4c4tZYKqbJ9HEUqnLOfVPN9YBFPHqCFC7uZ6RW6xnehl sRGc0C85lZAwX1d3+KEb8lTMtWJ3zlThnDPtHWw==
I think the fastest solution is to do your intersection tests on the set of segments that is incident to a facet in the complex. That way you
don't compute too much.
It might need to be benchmarked but if you pre-compute in parallel the position each vertex incident to that set of segments with reference
to the plane, then plane segment intersection predicate could be written
based on that precomputed orientation and no duplicated computation will
be done.
Best,
Sebastien.
On 4/27/23 22:58, Maria Eduarda Veras Martins ( via cgal-discuss Mailing List) wrote:
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;
}
--
You are currently subscribed to cgal-discuss.
To unsubscribe or access the archives, go to
https://sympa.inria.fr/sympa/info/cgal-discuss
- [cgal-discuss] Intersections, Maria Eduarda Veras Martins, 04/27/2023
- Re: [cgal-discuss] Intersections, Sebastien Loriot (GeometryFactory), 04/28/2023
- Re: [cgal-discuss] Intersections, Maria Eduarda Veras Martins, 04/28/2023
- Re: [cgal-discuss] Intersections, Sebastien Loriot (GeometryFactory), 04/28/2023
Archive powered by MHonArc 2.6.19+.