MeshLib C++ Docs
Loading...
Searching...
No Matches
MRBooleanOperation.h
1#pragma once
2
3#include "MRVector.h"
4#include "MRExpected.h"
5#include "MRId.h"
6#include <array>
7
8namespace MR
9{
10
13
20{
23 InsideA,
26 InsideB,
29 OutsideA,
32 OutsideB,
35 Union,
38 Intersection,
41 DifferenceBA,
44 DifferenceAB,
45
46 Count
47};
48
56struct BooleanResultMapper
57{
59 enum class MapObject { A, B, Count };
60
61 BooleanResultMapper() = default;
62
64 MRMESH_API FaceBitSet map( const FaceBitSet& oldBS, MapObject obj ) const;
65
67 MRMESH_API VertBitSet map( const VertBitSet& oldBS, MapObject obj ) const;
68
70 MRMESH_API EdgeBitSet map( const EdgeBitSet& oldBS, MapObject obj ) const;
71
73 MRMESH_API UndirectedEdgeBitSet map( const UndirectedEdgeBitSet& oldBS, MapObject obj ) const;
74
76 MRMESH_API FaceBitSet newFaces() const;
77
79 MRMESH_API FaceBitSet filteredOldFaceBitSet( const FaceBitSet& oldBS, MapObject obj );
80
95 std::array<Maps, size_t( MapObject::Count )> maps;
96
97 [[nodiscard]] const Maps& getMaps( MapObject index ) const { return maps[ int( index ) ]; }
98};
99
101struct BooleanInternalParameters
102{
104 const Mesh* originalMeshA{ nullptr };
106 const Mesh* originalMeshB{ nullptr };
108 std::vector<EdgeLoop>* optionalOutCut{ nullptr };
109};
110
114MRMESH_API Expected<Mesh> doBooleanOperation( Mesh&& meshACut, Mesh&& meshBCut,
115 const std::vector<EdgePath>& cutEdgesA, const std::vector<EdgePath>& cutEdgesB,
116 BooleanOperation operation, const AffineXf3f* rigidB2A = nullptr,
117 BooleanResultMapper* mapper = nullptr,
118 bool mergeAllNonIntersectingComponents = false,
119 const BooleanInternalParameters& intParams = {} );
120
122
123} //namespace MR
Definition MRBooleanOperation.h:102
new unsafe MR.Std.? Vector_StdVectorMREdgeId optionalOutCut
new unsafe MR.? Const_Mesh originalMeshA
new unsafe MR.? Const_Mesh originalMeshB
Definition MRMesh/MRMesh.h:23
BooleanOperation
MRMESH_API Expected< Mesh > doBooleanOperation(Mesh &&meshACut, Mesh &&meshBCut, const std::vector< EdgePath > &cutEdgesA, const std::vector< EdgePath > &cutEdgesB, BooleanOperation operation, const AffineXf3f *rigidB2A=nullptr, BooleanResultMapper *mapper=nullptr, bool mergeAllNonIntersectingComponents=false, const BooleanInternalParameters &intParams={})
Definition MRBooleanOperation.h:82
WholeEdgeMap old2newEdges
"origin" edges to "after stitch" edges (1-1)
Definition MRBooleanOperation.h:89
FaceMap cut2newFaces
"after cut" faces to "after stitch" faces (1-1)
Definition MRBooleanOperation.h:87
FaceMap cut2origin
Definition MRBooleanOperation.h:85
bool identity
old topology indexes are valid if true
Definition MRBooleanOperation.h:93
VertMap old2newVerts
"origin" vertices to "after stitch" vertices (1-1)
Definition MRBooleanOperation.h:91
Structure to map old mesh BitSets to new.
MRMESH_API FaceBitSet map(const FaceBitSet &oldBS, MapObject obj) const
Returns faces bitset of result mesh corresponding input one.
MRMESH_API FaceBitSet newFaces() const
Returns only new faces that are created during boolean operation.
MRMESH_API UndirectedEdgeBitSet map(const UndirectedEdgeBitSet &oldBS, MapObject obj) const
Returns undirected edges bitset of result mesh corresponding input one.
MRMESH_API FaceBitSet filteredOldFaceBitSet(const FaceBitSet &oldBS, MapObject obj)
returns updated oldBS leaving only faces that has corresponding ones in result mesh
MRMESH_API EdgeBitSet map(const EdgeBitSet &oldBS, MapObject obj) const
Returns edges bitset of result mesh corresponding input one.
MRMESH_API VertBitSet map(const VertBitSet &oldBS, MapObject obj) const
Returns vertices bitset of result mesh corresponding input one.
MapObject
Input object index enum.
Definition MRBooleanOperation.h:59