Skip to Content.
Sympa Menu

cgal-discuss - [cgal-discuss] Intersection polygons

Subject: CGAL users discussion list

List archive

[cgal-discuss] Intersection polygons


Chronological Thread 
  • From: Maria Eduarda Veras Martins <>
  • To:
  • Subject: [cgal-discuss] Intersection polygons
  • Date: Sun, 7 May 2023 20:30:14 -0300
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None ; spf=Pass ; spf=None
  • Ironport-data: A9a23:3EvklKyeuSavFpSLoCN6t+cvwirEfRIJ4+MujC+fZmUNrF6WrkVVn zQbWm/VP/jZMWakKdwnOojkoEhV65HSm9AyTws/+1hgHilAwSbnLYTAfx2oZ0t+DeWaERk5t 51GAjXkBJppJpMJjk71atANlVEliefSAOCU5NfsYkhZXRVjRDoqlSVtkus4hp8AqdWiCmthg /uryyHkEALjim8c3l48sfrZ80sy5Kuq4Vv0g3RnDRx1lA+G/5UqJMlHTU2BByOQapVZGOe8W 9HCwNmRlo8O10pF5nuNy94XQ2VSKlLgFVDmZkl+B8BOtiN/Shkaic7XAhazhXB/0F1ll/gpo DlEWAfZpQ0BZsUgk8xFO/VU/r0X0QSrN9YrLFDm2fF/wXEqfFPG7OlhBxhrArcm58ZrAl9+x OQeFCIkO0Xra+KemNpXS8Fpj8UnacTnZcYR5i8mwjbeAvIrB5vERs0m5/cChGZ21p0IR66OI ZZHAdZsREyojxlnP1oJDbo1neHum3fnfntSsjp5oIJuuzaMklcqjuCF3Nz9ccOhTMRlpHmju SH223ncDkERZcSY1m/Qmp6rrraXwXmTtJgpPLa3//ovjFyIzXEIEzUNRF6jqL+4jFS/UpRRM SQpFjEGqKEz8AmmQoC4UUHm5nGDuREYVpxbFOhSBByxJrT8ySmFCWNdEwF7VsEGqMwIdQ0y0 GObtoa8bdBwi4G9RXWY/7aSiDq9PykJMGMPDRPoqyNVvLEPR6lj33ryosZf/L2d1YKqRGmhq 9yehG1v2OVJ1J9jO7CTpAif21qRSo71ohnZDzg7s0qg5wJ9IYOpPsmmtQad4vFHI4KUCFKGu RDoevRyDshfVvlhdwTXGI3h+Y1FAd7bbFUwZnYxQvEcG8yFoSLLQGypyGgWyL1VGsgFYyT1R 0TYpBlc4pReVFPzM/8sP9LtUZ56lPa4fTgAahwyRooRCnSWXF/WlByCmWbNt4wQuBJ9yv9na c3znTiEUSxGVcyLMwZat89EieNxrszP7WzUQp//wnyaPUm2NRaopUM+GALWNIgRtfvayC2Mq oo3H5XQl313DralCgGJqt57ELz/BSJkbXwAg5cHKLDrz8sPMD1JNsI9NptwIdI/xfwJxrqgE 7PUchYw9WcTTEbvcW2iAk2Popu2NXqmhSJrZ34fLhyz1mI9YI2iyq4aetFlNfMk7eFvh7o8B fUMZ8zKULwFRyXl6gYtS8D3jLVjUxC32iOIHS6uOwYkc7BaGgfmx97DfynUzhcoMBaZj8UFj oeb5lvpeqZbHwVGJ+TKWc2r1GK07CQ8mvotfk7mIetzWUTL8apoIhOtk/MIEd4+EkjCzTq7z CeTOw8T/sPWkr828f7IpKGKlJioGO1ABXhnH3HXwLK1FCvC9E+h/NNwa/mJdjXjS2/EwqWuS uFLxfXaMvdcvlJ1n6djMrRsl4QS2sDOouJE8wFaA3n7VVSnJbd+KH2g38MUlKlsxKdciDSmS HC05dhWFrWYCvzLSGdLClIeUd2C8vUIlh35z/c/ehz67RAq2ou3axxZOh3UhRFNKLdwDpge/ t4gn8wouiifkRshN+iUgh9Er1qsKmMyaIR5l5U4LrKytC8V5ABsXZjuBBXywqmzUPRXE0xzI jarlKvI3Ltd4UzZcksML3vG3MsDpJEooBpLkQYwIX6Nvt/nl942wxxj3jAlRStFzhh88rxSO 0o6E2ZXNKmx7zNTq8wbZF+VGiZFHwy/xkz973ArhV/pZRCkeUKVJVJsJNvX2l4S9lxtWwRy/ Zaa+T7DainrdsSg5RkCcxdphNK7ROMg6zCYvt6sGvmEOJwIYTDFpKuKTkhQojvFBfIBvmH2l dNIzs1RN5KibTUxppclAba0zb4TERCIBFJTSMFboZ8mIzvuRyGQ6xOvdWaBIthANt7bw3+eU sZOHP9CZz669SSJrw0YO5IyHq9JrKYpyuYvKrLPDkwagoSbtQts4c7x9DChpWoFQOdOsMcaK 6HNRg2GCUivu3hxoDbIiuV1J1jiMMc2Ph34+OWT7u8yNokitdt0ehoYyYqEvHSyMSpm8SmLv QjFWbTk8ux6xalonKruCq9mFSzuDf/SDcOmqBuStfZKZvPxafb+jRsf8ATbDl4HLIkvVMRSv pXTltzOhWfunqs8CkLdkLm/T5h53924BrdrA5imPUthvHWwXeH36EE+4EG+E5tCle1d6uSBR weVbMiRd8Yfa+xCxU96OjRvLBIAN5vZNqvQhzuxj/CpOCgv1QbqKNCG93iwY18CJ2VMc9f7B xTvsvmj2sFAoc4eTFUYDvVhGNljLEWlRaIicMbruCKFCnWzxGmPoabmiQFq/ASj5qNoyyomy cmtqtnCmBWOVGXgydhYt8l/skRSAiojx+Y3eU0Z9ph9jDXS4Kvq6wgCGc1uN32WunWaOFLEi PXlZ2okTzjzRTkCew+UDBHLQFKEHuJXUjvmDmVBwq5XAhtawKuLAb0n6yl47jF8YFMPCQ1hx c42ohXNA/R6/n2lqSv/KBB2bSeLC842Hk41xH0=
  • Ironport-hdrordr: A9a23:9/zvsKEGYU2KofdrpLqE5ceALOsnbusQ8zAXPiFKOHtom6mj/f xG885rtiMc5AxwZJhCo7G90cu7MBHhHPdOiOF7AV7IZniChILHFvAH0WIg+VHd8u/Fm9K1GZ 0OT0G2MrPNMWQ=
  • Ironport-phdr: A9a23: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 M76pd9o5UyoiuTJwCA1CHJz
  • Ironport-sdr: 64583494_wSuHaJv5ojWC4AS5WeeG8yUhi3hD9xJLvuyKsjaQfxgYwqa VEukteS6H8gWkrJ2FosNYTR8QHpjBsafwgqPeKQ==

Hi, I have to find the polygons that were formed when I intersected planes with a tetrahedral mesh. I'm already getting a list with the segments resulting from the intersections but I don't know how to get the polygons from that.
here is my code so far:
#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>
#include <omp.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;
}

struct Plane_compare {
    bool operator()(const Plane& p1, const Plane& p2) const {
        // Use a combinação dos coeficientes dos planos para compará-los
        return std::make_tuple(p1.a(), p1.b(), p1.c(), p1.d()) < std::make_tuple(p2.a(), p2.b(), p2.c(), p2.d());
    }
};


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);
        }

    }

    //build aabb tree
    Tree tree(triangles.begin(),triangles.end());

    //// set plane and find 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));

    std::vector <Plane> planes;
    for (int i = 0; i < 10; i++) {
        double angle = i * 36.0 * (M_PI / 180);
        K::Vector_3 normal(cos(angle), sin(angle), 0);
        planes.emplace_back(Point (0, 0, 0), normal);
    }

    std::map <Plane, std::list <Object_and_primitive_id>, Plane_compare> planes_intersections;

    #pragma omp parallel for
    for (size_t i = 0; i < planes.size(); i++) {
        std::list <Object_and_primitive_id> intersections;
        tree.all_intersections(planes[i], std::back_inserter(intersections));
        #pragma omp critical
        planes_intersections[planes[i]] = intersections;
    }

    for (const auto& aux : planes_intersections) {
        std::cout << "Plane: " << aux.first << " Interseções: " << aux.second.size() << std::endl;
    }

    return 0;
}

Thank you!


  • [cgal-discuss] Intersection polygons, Maria Eduarda Veras Martins, 05/08/2023

Archive powered by MHonArc 2.6.19+.

Top of Page