MeshLib C++ Docs
Loading...
Searching...
No Matches
MRMesh/MRMeshBoolean.h
1#pragma once
2
3#include "MRBooleanOperation.h"
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 = {} );
62MRMESH_API BooleanResult boolean( Mesh&& meshA, Mesh&& meshB, BooleanOperation operation,
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 = {} );
107MRMESH_API BooleanResult boolean( Mesh&& meshA, Mesh&& meshB, BooleanOperation operation,
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
118struct BooleanResultPoints
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
143MRMESH_API void convertIntFloatAllVerts( Mesh & mesh, const CoordinateConverters& conv );
144
145} //namespace MR
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 MRPrecisePredicates3.h:58
Definition MRMesh/MRMesh.h:23
static unsafe MR.Std.Vector_StdVectorMRVector3f findIntersectionContours(MR.Const_Mesh meshA, MR.Const_Mesh meshB, MR.AffineXf3f? rigidB2A=null)
static unsafe MR.Mesh selfBoolean(MR.Const_Mesh mesh)
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.
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