MeshLib C++ Docs
Loading...
Searching...
No Matches
MRMesh/MRMeshBoolean.h
Go to the documentation of this file.
1#pragma once
2
4#include "MRContoursCut.h"
5#include "MRMesh.h"
6#include "MRBitSet.h"
7#include "MRExpected.h"
8#include <string>
9
10namespace MR
11{
12
26struct BooleanResult
27{
35 std::string errorString;
37 bool valid() const { return errorString.empty(); }
38 Mesh& operator*() { return mesh; }
39 const Mesh& operator*() const { return mesh; }
40 Mesh* operator->() { return &mesh; }
41 const Mesh* operator->() const { return &mesh; }
42 operator bool()const { return valid(); }
43};
44
60MRMESH_API BooleanResult boolean( const Mesh& meshA, const Mesh& meshB, BooleanOperation operation,
61 const AffineXf3f* rigidB2A, BooleanResultMapper* mapper = nullptr, ProgressCallback cb = {} );
63 const AffineXf3f* rigidB2A, BooleanResultMapper* mapper = nullptr, ProgressCallback cb = {} );
64
65
66struct BooleanPreCutResult
67{
68 Mesh mesh;
69 OneMeshContours contours;
70};
71
76struct BooleanParameters
77{
79 const AffineXf3f* rigidB2A = nullptr;
80
82 BooleanResultMapper* mapper = nullptr;
83
85 BooleanPreCutResult* outPreCutA = nullptr;
86
88 BooleanPreCutResult* outPreCutB = nullptr;
89
91 std::vector<EdgeLoop>* outCutEdges = nullptr;
92
96
100 bool forceCut = false;
101
102 ProgressCallback cb = {};
103};
104
105MRMESH_API BooleanResult boolean( const Mesh& meshA, const Mesh& meshB, BooleanOperation operation,
106 const BooleanParameters& params = {} );
108 const BooleanParameters& params = {} );
109
112MRMESH_API Expected<Mesh> selfBoolean( const Mesh& mesh );
113
115MRMESH_API Contours3f findIntersectionContours( const Mesh& meshA, const Mesh& meshB, const AffineXf3f* rigidB2A = nullptr );
116
119{
120 VertBitSet meshAVerts;
121 VertBitSet meshBVerts;
122 std::vector<Vector3f> intersectionPoints;
123};
124
135 MRMESH_API Expected<BooleanResultPoints,std::string> getBooleanPoints( const Mesh& meshA, const Mesh& meshB, BooleanOperation operation,
136 const AffineXf3f* rigidB2A = nullptr );
137
138
144
145} //namespace MR
#define MRMESH_API
Definition MRMeshFwd.h:80
Definition MRMesh/MRMeshBoolean.h:77
new unsafe MR.? BooleanResultMapper mapper
new unsafe ref bool forceCut
new unsafe MR.Std.? Vector_StdVectorMREdgeId outCutEdges
new unsafe MR.? BooleanPreCutResult outPreCutA
new unsafe MR.? BooleanPreCutResult outPreCutB
new unsafe MR.? ConstBox_AffineXf3f rigidB2A
new unsafe ref bool mergeAllNonIntersectingComponents
Definition MRMesh/MRMeshBoolean.h:119
Definition MRPrecisePredicates3.h:58
Definition MRMesh/MRMesh.h:23
BooleanOperation
MRMESH_API BooleanResult boolean(const Mesh &meshA, const Mesh &meshB, BooleanOperation operation, const AffineXf3f *rigidB2A, BooleanResultMapper *mapper=nullptr, ProgressCallback cb={})
Performs CSG operation on two meshes.
MRMESH_API Expected< BooleanResultPoints, std::string > getBooleanPoints(const Mesh &meshA, const Mesh &meshB, BooleanOperation operation, const AffineXf3f *rigidB2A=nullptr)
Returns the points of mesh boolean's result mesh.
Definition MRCameraOrientationPlugin.h:8
MRMESH_API Contours3f findIntersectionContours(const Mesh &meshA, const Mesh &meshB, const AffineXf3f *rigidB2A=nullptr)
returns intersection contours of given meshes
MRMESH_API void convertIntFloatAllVerts(Mesh &mesh, const CoordinateConverters &conv)
MRMESH_API Expected< Mesh > selfBoolean(const Mesh &mesh)
Structure to map old mesh BitSets to new.
Structure contain boolean result.
Mesh mesh
Result mesh of boolean operation, if error occurred it would be empty.
Definition MRMesh/MRMeshBoolean.h:29
bool valid() const
Returns true if boolean succeed, false otherwise.
Definition MRMesh/MRMeshBoolean.h:37
FaceBitSet meshBBadContourFaces
If input contours have intersections, this face bit set presents faces of mesh B on which contours in...
Definition MRMesh/MRMeshBoolean.h:33
std::string errorString
Holds error message, empty if boolean succeed.
Definition MRMesh/MRMeshBoolean.h:35
FaceBitSet meshABadContourFaces
If input contours have intersections, this face bit set presents faces of mesh A on which contours in...
Definition MRMesh/MRMeshBoolean.h:31
Mesh * operator->()
Definition MRMesh/MRMeshBoolean.h:40
Mesh & operator*()
Definition MRMesh/MRMeshBoolean.h:38
const Mesh & operator*() const
Definition MRMesh/MRMeshBoolean.h:39
const Mesh * operator->() const
Definition MRMesh/MRMeshBoolean.h:41