OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
MeshBoolean.cpp File Reference
#include "Exception.hpp"
#include "MeshBoolean.hpp"
#include "libslic3r/TriangleMesh.hpp"
#include "libslic3r/TryCatchSignal.hpp"
#include "libslic3r/format.hpp"
#include <Eigen/Core>
#include <cstddef>
#include <utility>
#include <igl/MeshBooleanType.h>
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Surface_mesh/Surface_mesh.h>
#include <string>
#include <fstream>
#include <array>
#include <vector>
#include "libslic3r/Point.hpp"
#include <memory>
#include <CGAL/boost/graph/graph_traits_Surface_mesh.h>
#include <CGAL/boost/graph/helpers.h>
#include <boost/property_map/property_map.hpp>
#include <CGAL/Named_function_parameters.h>
#include <exception>
#include <optional>
#include <CGAL/Polygon_mesh_processing/measure.h>
#include <csignal>
#include <CGAL/Polygon_mesh_processing/self_intersections.h>
#include <iterator>
#include <CGAL/Polygon_mesh_processing/triangulate_hole.h>
#include <CGAL/Polygon_mesh_processing/stitch_borders.h>
#include <CGAL/Polygon_mesh_processing/polygon_soup_to_polygon_mesh.h>
#include <cstdint>
#include <map>
#include <algorithm>
#include <boost/next_prior.hpp>
#include "boost/log/trivial.hpp"
#include <igl/copyleft/cgal/mesh_boolean.h>
#include <CGAL/Polygon_mesh_processing/corefinement.h>
#include <CGAL/Exact_integer.h>
#include <CGAL/Surface_mesh.h>
#include <CGAL/Cartesian_converter.h>
#include <CGAL/Polygon_mesh_processing/orient_polygon_soup.h>
#include <CGAL/Polygon_mesh_processing/repair.h>
#include <CGAL/Polygon_mesh_processing/remesh.h>
#include <CGAL/Polygon_mesh_processing/orientation.h>
#include <CGAL/mesh_segmentation.h>
#include <CGAL/property_map.h>
#include <CGAL/boost/graph/copy_face_graph.h>
#include <CGAL/boost/graph/Face_filtered_graph.h>
#include <CGAL/boost/graph/border.h>
#include <CGAL/Polygon_mesh_processing/connected_components.h>
#include <CGAL/Polygon_mesh_processing/detect_features.h>
#include <CGAL/Surface_mesh_parameterization/Error_code.h>
#include <CGAL/Surface_mesh_parameterization/LSCM_parameterizer_3.h>
#include <CGAL/Surface_mesh_parameterization/parameterize.h>
#include "mcut/include/mcut/mcut.h"

Go to the source code of this file.

Classes

struct  Slic3r::MeshBoolean::cgal::CGALMesh
struct  Slic3r::MeshBoolean::mcut::McutMesh

Namespaces

namespace  Slic3r
 |/ Copyright (c) Prusa Research 2020 - 2023 Enrico Turri @enricoturri1966 |/ |/ PrusaSlicer is released under the terms of the AGPLv3 or higher |/
namespace  Slic3r::MeshBoolean
namespace  Slic3r::MeshBoolean::cgal
namespace  Slic3r::MeshBoolean::mcut

Typedefs

using Slic3r::MeshBoolean::MapMatrixXfUnaligned = Eigen::Map<const Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor | Eigen::DontAlign>>
using Slic3r::MeshBoolean::MapMatrixXiUnaligned = Eigen::Map<const Eigen::Matrix<int, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor | Eigen::DontAlign>>
using Slic3r::MeshBoolean::cgal::EpecKernel = CGAL::Exact_predicates_exact_constructions_kernel
using Slic3r::MeshBoolean::cgal::EpicKernel = CGAL::Exact_predicates_inexact_constructions_kernel
using Slic3r::MeshBoolean::cgal::_EpicMesh = CGAL::Surface_mesh<EpicKernel::Point_3>
using Slic3r::MeshBoolean::cgal::_EpecMesh = CGAL::Surface_mesh<EpecKernel::Point_3>

Functions

TriangleMesh Slic3r::MeshBoolean::eigen_to_triangle_mesh (const EigenMesh &emesh)
EigenMesh Slic3r::MeshBoolean::triangle_mesh_to_eigen (const TriangleMesh &mesh)
void Slic3r::MeshBoolean::minus (EigenMesh &A, const EigenMesh &B)
void Slic3r::MeshBoolean::minus (TriangleMesh &A, const TriangleMesh &B)
void Slic3r::MeshBoolean::self_union (EigenMesh &A)
void Slic3r::MeshBoolean::self_union (TriangleMesh &mesh)
void Slic3r::MeshBoolean::cgal::save_CGALMesh (const std::string &fname, const CGALMesh &cgal_mesh)
template<class _Mesh>
void Slic3r::MeshBoolean::cgal::triangle_mesh_to_cgal (const TriangleMesh &M, _Mesh &out)
template<class _Mesh>
void Slic3r::MeshBoolean::cgal::triangle_mesh_to_cgal (const std::vector< stl_vertex > &V, const std::vector< stl_triangle_vertex_indices > &F, _Mesh &out)
Vec3f Slic3r::MeshBoolean::cgal::to_vec3f (const _EpicMesh::Point &v)
Vec3f Slic3r::MeshBoolean::cgal::to_vec3f (const _EpecMesh::Point &v)
template<class _Mesh>
indexed_triangle_set Slic3r::MeshBoolean::cgal::cgal_to_indexed_triangle_set (const _Mesh &cgalmesh)
template<class _Mesh>
TriangleMesh Slic3r::MeshBoolean::cgal::cgal_to_triangle_mesh (const _Mesh &cgalmesh)
std::unique_ptr< CGALMesh, CGALMeshDeleter > Slic3r::MeshBoolean::cgal::triangle_mesh_to_cgal (const std::vector< stl_vertex > &V, const std::vector< stl_triangle_vertex_indices > &F)
TriangleMesh Slic3r::MeshBoolean::cgal::cgal_to_triangle_mesh (const CGALMesh &cgalmesh)
indexed_triangle_set Slic3r::MeshBoolean::cgal::cgal_to_indexed_triangle_set (const CGALMesh &cgalmesh)
indexed_triangle_set Slic3r::MeshBoolean::cgal::remesh_isotropic (const indexed_triangle_set &mesh, double target_edge_length, unsigned n_iterations, double sharp_angle_deg, unsigned n_relaxation_steps)
std::optional< std::vector< Vec2f > > Slic3r::MeshBoolean::cgal::parameterize_lscm (const indexed_triangle_set &mesh)
static bool Slic3r::MeshBoolean::cgal::_cgal_diff (CGALMesh &A, CGALMesh &B, CGALMesh &R)
static bool Slic3r::MeshBoolean::cgal::_cgal_union (CGALMesh &A, CGALMesh &B, CGALMesh &R)
static bool Slic3r::MeshBoolean::cgal::_cgal_intersection (CGALMesh &A, CGALMesh &B, CGALMesh &R)
template<class Op>
void Slic3r::MeshBoolean::cgal::_cgal_do (Op &&op, CGALMesh &A, CGALMesh &B)
void Slic3r::MeshBoolean::cgal::minus (CGALMesh &A, CGALMesh &B)
void Slic3r::MeshBoolean::cgal::plus (CGALMesh &A, CGALMesh &B)
void Slic3r::MeshBoolean::cgal::intersect (CGALMesh &A, CGALMesh &B)
bool Slic3r::MeshBoolean::cgal::does_self_intersect (const CGALMesh &mesh)
void Slic3r::MeshBoolean::cgal::segment (CGALMesh &src, std::vector< CGALMesh > &dst, double smoothing_alpha=0.5, int segment_number=5)
std::vector< TriangleMesh > Slic3r::MeshBoolean::cgal::segment (const TriangleMesh &src, double smoothing_alpha, int segment_number)
void Slic3r::MeshBoolean::cgal::merge (std::vector< _EpicMesh > &srcs, _EpicMesh &dst)
TriangleMesh Slic3r::MeshBoolean::cgal::merge (std::vector< TriangleMesh > meshes)
template<class Op>
void Slic3r::MeshBoolean::cgal::_mesh_boolean_do (Op &&op, indexed_triangle_set &A, const indexed_triangle_set &B)
template<class Op>
void Slic3r::MeshBoolean::cgal::_mesh_boolean_do (Op &&op, TriangleMesh &A, const TriangleMesh &B)
void Slic3r::MeshBoolean::cgal::minus (TriangleMesh &A, const TriangleMesh &B)
void Slic3r::MeshBoolean::cgal::plus (TriangleMesh &A, const TriangleMesh &B)
void Slic3r::MeshBoolean::cgal::intersect (TriangleMesh &A, const TriangleMesh &B)
void Slic3r::MeshBoolean::cgal::minus (indexed_triangle_set &A, const indexed_triangle_set &B)
void Slic3r::MeshBoolean::cgal::plus (indexed_triangle_set &A, const indexed_triangle_set &B)
void Slic3r::MeshBoolean::cgal::intersect (indexed_triangle_set &A, const indexed_triangle_set &B)
bool Slic3r::MeshBoolean::cgal::does_self_intersect (const TriangleMesh &mesh)
bool Slic3r::MeshBoolean::cgal::does_bound_a_volume (const CGALMesh &mesh)
bool Slic3r::MeshBoolean::cgal::empty (const CGALMesh &mesh)
CGALMeshPtr Slic3r::MeshBoolean::cgal::clone (const CGALMesh &m)
bool Slic3r::MeshBoolean::mcut::empty (const McutMesh &mesh)
void Slic3r::MeshBoolean::mcut::triangle_mesh_to_mcut (const TriangleMesh &src_mesh, McutMesh &srcMesh, const Transform3d &src_nm=Transform3d::Identity())
McutMeshPtr Slic3r::MeshBoolean::mcut::triangle_mesh_to_mcut (const indexed_triangle_set &M)
TriangleMesh Slic3r::MeshBoolean::mcut::mcut_to_triangle_mesh (const McutMesh &mcutmesh)
void Slic3r::MeshBoolean::mcut::merge_mcut_meshes (McutMesh &src, const McutMesh &cut)
MCAPI_ATTR void MCAPI_CALL Slic3r::MeshBoolean::mcut::mcDebugOutput (McDebugSource source, McDebugType type, unsigned int id, McDebugSeverity severity, size_t length, const char *message, const void *userParam)
bool Slic3r::MeshBoolean::mcut::do_boolean_single (McutMesh &srcMesh, const McutMesh &cutMesh, const std::string &boolean_opts)
void Slic3r::MeshBoolean::mcut::do_boolean (McutMesh &srcMesh, const McutMesh &cutMesh, const std::string &boolean_opts)
void Slic3r::MeshBoolean::mcut::make_boolean (const TriangleMesh &src_mesh, const TriangleMesh &cut_mesh, std::vector< TriangleMesh > &dst_mesh, const std::string &boolean_opts)

Class Documentation

◆ Slic3r::MeshBoolean::mcut::McutMesh

struct Slic3r::MeshBoolean::mcut::McutMesh
Collaboration diagram for Slic3r::MeshBoolean::mcut::McutMesh:
Class Members
vector< uint32_t > faceIndicesArray
vector< uint32_t > faceSizesArray
vector< double > vertexCoordsArray