MeshLib C++ Docs
Loading...
Searching...
No Matches
MRBooleanOperation.h
Go to the documentation of this file.
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
48
59{
61 enum class MapObject { A, B, Count };
62
64
66 MRMESH_API FaceBitSet map( const FaceBitSet& oldBS, MapObject obj ) const;
67
69 MRMESH_API VertBitSet map( const VertBitSet& oldBS, MapObject obj ) const;
70
72 MRMESH_API EdgeBitSet map( const EdgeBitSet& oldBS, MapObject obj ) const;
73
75 MRMESH_API UndirectedEdgeBitSet map( const UndirectedEdgeBitSet& oldBS, MapObject obj ) const;
76
78 MRMESH_API FaceBitSet newFaces() const;
79
81 MRMESH_API FaceBitSet filteredOldFaceBitSet( const FaceBitSet& oldBS, MapObject obj ) const;
82
84 [[nodiscard]] MRMESH_API FaceMap getNew2OldFaceMap( MapObject obj ) const;
85
86 struct Maps
87 {
90 FaceMap cut2origin;
92 FaceMap cut2newFaces;
94 WholeEdgeMap old2newEdges;
96 VertMap old2newVerts;
97 };
98 std::array<Maps, size_t( MapObject::Count )> maps;
99
100 [[nodiscard]] const Maps& getMaps( MapObject index ) const { return maps[ int( index ) ]; }
101};
102
105{
107 const Mesh* originalMeshA{ nullptr };
109 const Mesh* originalMeshB{ nullptr };
111 std::vector<EdgeLoop>* optionalOutCut{ nullptr };
113 bool graphCutSeparation{ false };
114};
115
120 std::vector<EdgePath>&& cutEdgesA, std::vector<EdgePath>&& cutEdgesB,
121 BooleanOperation operation, const AffineXf3f* rigidB2A = nullptr,
122 BooleanResultMapper* mapper = nullptr,
123 bool mergeAllNonIntersectingComponents = false,
124 const BooleanInternalParameters& intParams = {} );
125
127
128}
#define MRMESH_API
Definition MRMeshFwd.h:85
Expected< Mesh > doBooleanOperation(Mesh &&meshACut, Mesh &&meshBCut, std::vector< EdgePath > &&cutEdgesA, std::vector< EdgePath > &&cutEdgesB, BooleanOperation operation, const AffineXf3f *rigidB2A=nullptr, BooleanResultMapper *mapper=nullptr, bool mergeAllNonIntersectingComponents=false, const BooleanInternalParameters &intParams={})
BooleanOperation
Definition MRBooleanOperation.h:20
@ DifferenceAB
Definition MRBooleanOperation.h:44
@ OutsideB
Definition MRBooleanOperation.h:32
@ InsideA
Definition MRBooleanOperation.h:23
@ OutsideA
Definition MRBooleanOperation.h:29
@ InsideB
Definition MRBooleanOperation.h:26
@ Intersection
Definition MRBooleanOperation.h:38
@ Union
Definition MRBooleanOperation.h:35
@ DifferenceBA
Definition MRBooleanOperation.h:41
tl::expected< T, E > Expected
Definition MRExpected.h:31
@ Count
Definition MRPdf.h:42
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
Parameters will be useful if specified.
Definition MRBooleanOperation.h:105
const Mesh * originalMeshA
Instance of original mesh with tree for better speed.
Definition MRBooleanOperation.h:107
std::vector< EdgeLoop > * optionalOutCut
Optional output cut edges of booleaned meshes.
Definition MRBooleanOperation.h:111
const Mesh * originalMeshB
Instance of original mesh with tree for better speed.
Definition MRBooleanOperation.h:109
bool graphCutSeparation
If true uses graphcut for inside/outside separation.
Definition MRBooleanOperation.h:113
Definition MRBooleanOperation.h:87
WholeEdgeMap old2newEdges
"origin" edges to "after stitch" edges (1-1)
Definition MRBooleanOperation.h:94
FaceMap cut2newFaces
"after cut" faces to "after stitch" faces (1-1)
Definition MRBooleanOperation.h:92
FaceMap cut2origin
Definition MRBooleanOperation.h:90
VertMap old2newVerts
"origin" vertices to "after stitch" vertices (1-1)
Definition MRBooleanOperation.h:96
Structure to map old mesh BitSets to new.
Definition MRBooleanOperation.h:59
FaceMap getNew2OldFaceMap(MapObject obj) const
returns map: new_face_id->old_obj_face_id for faces from
std::array< Maps, size_t(MapObject::Count)> maps
Definition MRBooleanOperation.h:98
EdgeBitSet map(const EdgeBitSet &oldBS, MapObject obj) const
Returns edges bitset of result mesh corresponding input one.
UndirectedEdgeBitSet map(const UndirectedEdgeBitSet &oldBS, MapObject obj) const
Returns undirected edges bitset of result mesh corresponding input one.
FaceBitSet newFaces() const
Returns only new faces that are created during boolean operation.
VertBitSet map(const VertBitSet &oldBS, MapObject obj) const
Returns vertices bitset of result mesh corresponding input one.
const Maps & getMaps(MapObject index) const
Definition MRBooleanOperation.h:100
FaceBitSet filteredOldFaceBitSet(const FaceBitSet &oldBS, MapObject obj) const
returns updated oldBS leaving only faces that has corresponding ones in result mesh
MapObject
Input object index enum.
Definition MRBooleanOperation.h:61
@ A
Definition MRBooleanOperation.h:61
@ B
Definition MRBooleanOperation.h:61
@ Count
Definition MRBooleanOperation.h:61
FaceBitSet map(const FaceBitSet &oldBS, MapObject obj) const
Returns faces bitset of result mesh corresponding input one.
Definition MRMesh.h:24