Skip to content

Commit 126163c

Browse files
authored
lightweight MRPartMapping.h (#4996)
1 parent 94ebb73 commit 126163c

13 files changed

+147
-120
lines changed

source/MRMesh/MRBooleanOperation.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "MRMeshCollide.h"
88
#include "MRAffineXf3.h"
99
#include "MRMapEdge.h"
10+
#include "MRPartMappingAdapters.h"
1011
#include "MRPch/MRTBB.h"
1112

1213
namespace MR

source/MRMesh/MRFixSelfIntersections.cpp

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
#include "MRFixSelfIntersections.h"
2-
#include "MRMesh/MRMesh.h"
3-
#include "MRMesh/MRMeshCollide.h"
4-
#include "MRMesh/MRExpandShrink.h"
5-
#include "MRMesh/MRRegionBoundary.h"
6-
#include "MRMesh/MRMeshFillHole.h"
7-
#include "MRMesh/MRMeshFixer.h"
8-
#include "MRMesh/MRMeshRelax.h"
9-
#include "MRMesh/MRMeshComponents.h"
10-
#include "MRMesh/MRMeshSubdivide.h"
2+
#include "MRMesh.h"
3+
#include "MRMeshCollide.h"
4+
#include "MRExpandShrink.h"
5+
#include "MRRegionBoundary.h"
6+
#include "MRMeshFillHole.h"
7+
#include "MRMeshFixer.h"
8+
#include "MRMeshRelax.h"
9+
#include "MRMeshComponents.h"
10+
#include "MRMeshSubdivide.h"
11+
#include "MRTimer.h"
12+
#include "MRBox.h"
13+
#include "MRMapOrHashMap.h"
1114
#include "MRPch/MRSpdlog.h"
12-
#include "MRMesh/MRTimer.h"
13-
#include "MRMesh/MRBox.h"
1415
#include <algorithm>
1516

1617
namespace MR

source/MRMesh/MRMesh.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include "MRMeshFillHole.h"
2828
#include "MRTriMesh.h"
2929
#include "MRDipole.h"
30+
#include "MRPartMappingAdapters.h"
3031

3132
namespace MR
3233
{

source/MRMesh/MRMesh.vcxproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@
164164
<ClInclude Include="MRParallel.h" />
165165
<ClInclude Include="MRParallelMinMax.h" />
166166
<ClInclude Include="MRPartialChangeMeshAction.h" />
167+
<ClInclude Include="MRPartMappingAdapters.h" />
167168
<ClInclude Include="MRPly.h" />
168169
<ClInclude Include="MRPointCloudDistance.h" />
169170
<ClInclude Include="MRPointCloudDivideWithPlane.h" />
@@ -557,6 +558,7 @@
557558
<ClCompile Include="MROffsetContours.cpp" />
558559
<ClCompile Include="MROverlappingTris.cpp" />
559560
<ClCompile Include="MRObjectGcode.cpp" />
561+
<ClCompile Include="MRPartMappingAdapters.cpp" />
560562
<ClCompile Include="MRPly.cpp" />
561563
<ClCompile Include="MRPointCloudDistance.cpp" />
562564
<ClCompile Include="MRClosestWeightedPoint.cpp" />

source/MRMesh/MRMesh.vcxproj.filters

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1355,6 +1355,9 @@
13551355
<ClInclude Include="MRObjectTagEventDispatcher.h">
13561356
<Filter>Source Files\DataModel</Filter>
13571357
</ClInclude>
1358+
<ClInclude Include="MRPartMappingAdapters.h">
1359+
<Filter>Source Files\Mesh</Filter>
1360+
</ClInclude>
13581361
</ItemGroup>
13591362
<ItemGroup>
13601363
<ClCompile Include="MRParallelProgressReporter.cpp">
@@ -2213,6 +2216,9 @@
22132216
<ClCompile Include="MRObjectTagEventDispatcher.cpp">
22142217
<Filter>Source Files\DataModel</Filter>
22152218
</ClCompile>
2219+
<ClCompile Include="MRPartMappingAdapters.cpp">
2220+
<Filter>Source Files\Mesh</Filter>
2221+
</ClCompile>
22162222
</ItemGroup>
22172223
<ItemGroup>
22182224
<None Include="..\.editorconfig" />

source/MRMesh/MRMeshTopology.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "MRProgressReadWrite.h"
1313
#include "MRGridSettings.h"
1414
#include "MRIOParsing.h"
15+
#include "MRPartMappingAdapters.h"
1516
#include <atomic>
1617
#include <initializer_list>
1718

source/MRMesh/MRObjectMesh.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@
99
#include "MRLine3.h"
1010
#include "MRTimer.h"
1111
#include "MRGTest.h"
12+
#include "MRSceneSettings.h"
13+
#include "MRMapOrHashMap.h"
1214
#include "MRPch/MRJson.h"
1315
#include "MRPch/MRTBB.h"
1416
#include "MRPch/MRFmt.h"
15-
#include "MRSceneSettings.h"
1617

1718
namespace MR
1819
{

source/MRMesh/MRPartMapping.cpp

Lines changed: 2 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "MRPartMapping.h"
2-
#include "MRMeshTopology.h"
2+
#include "MRMapOrHashMap.h"
3+
#include "MRId.h"
34

45
namespace MR
56
{
@@ -20,64 +21,4 @@ void PartMapping::clear()
2021
tgt2srcEdges->clear();
2122
}
2223

23-
Src2TgtMaps::Src2TgtMaps( FaceMap * outFmap, VertMap * outVmap, WholeEdgeMap * outEmap )
24-
: outFmap_( outFmap ), outVmap_( outVmap ), outEmap_( outEmap )
25-
{
26-
if ( outFmap )
27-
{
28-
src2tgtFaces_.setMap( std::move( *outFmap_ ) );
29-
map_.src2tgtFaces = &src2tgtFaces_;
30-
}
31-
if ( outVmap )
32-
{
33-
src2tgtVerts_.setMap( std::move( *outVmap_ ) );
34-
map_.src2tgtVerts = &src2tgtVerts_;
35-
}
36-
if ( outEmap )
37-
{
38-
src2tgtEdges_.setMap( std::move( *outEmap_ ) );
39-
map_.src2tgtEdges = &src2tgtEdges_;
40-
}
41-
}
42-
43-
Src2TgtMaps::~Src2TgtMaps()
44-
{
45-
if ( outFmap_ )
46-
*outFmap_ = std::move( *src2tgtFaces_.getMap() );
47-
if ( outVmap_ )
48-
*outVmap_ = std::move( *src2tgtVerts_.getMap() );
49-
if ( outEmap_ )
50-
*outEmap_ = std::move( *src2tgtEdges_.getMap() );
51-
}
52-
53-
Tgt2SrcMaps::Tgt2SrcMaps( FaceMap * outFmap, VertMap * outVmap, WholeEdgeMap * outEmap )
54-
: outFmap_( outFmap ), outVmap_( outVmap ), outEmap_( outEmap )
55-
{
56-
if ( outFmap )
57-
{
58-
tgt2srcFaces_.setMap( std::move( *outFmap_ ) );
59-
map_.tgt2srcFaces = &tgt2srcFaces_;
60-
}
61-
if ( outVmap )
62-
{
63-
tgt2srcVerts_.setMap( std::move( *outVmap_ ) );
64-
map_.tgt2srcVerts = &tgt2srcVerts_;
65-
}
66-
if ( outEmap )
67-
{
68-
tgt2srcEdges_.setMap( std::move( *outEmap_ ) );
69-
map_.tgt2srcEdges = &tgt2srcEdges_;
70-
}
71-
}
72-
73-
Tgt2SrcMaps::~Tgt2SrcMaps()
74-
{
75-
if ( outFmap_ )
76-
*outFmap_ = std::move( *tgt2srcFaces_.getMap() );
77-
if ( outVmap_ )
78-
*outVmap_ = std::move( *tgt2srcVerts_.getMap() );
79-
if ( outEmap_ )
80-
*outEmap_ = std::move( *tgt2srcEdges_.getMap() );
81-
}
82-
8324
} //namespace MR

source/MRMesh/MRPartMapping.h

Lines changed: 1 addition & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#pragma once
22

3-
#include "MRPch/MRBindingMacros.h"
4-
#include "MRMapOrHashMap.h"
3+
#include "MRMeshFwd.h"
54

65
namespace MR
76
{
@@ -27,48 +26,4 @@ struct PartMapping
2726
MRMESH_API void clear();
2827
};
2928

30-
/// use this adapter to call functions expecting PartMapping parameter to receive src2tgt dense maps
31-
class Src2TgtMaps
32-
{
33-
public:
34-
MRMESH_API Src2TgtMaps( FaceMap * outFmap, VertMap * outVmap, WholeEdgeMap * outEmap );
35-
[[deprecated]] MR_BIND_IGNORE Src2TgtMaps( const MeshTopology &, FaceMap * outFmap, VertMap * outVmap, WholeEdgeMap * outEmap )
36-
: Src2TgtMaps( outFmap, outVmap, outEmap ) {}
37-
MRMESH_API ~Src2TgtMaps(); // maps are moved back to user here
38-
39-
operator const PartMapping &() const { return map_; }
40-
const PartMapping & getPartMapping() const { return map_; }
41-
42-
private:
43-
FaceMap * outFmap_ = nullptr;
44-
VertMap * outVmap_ = nullptr;
45-
WholeEdgeMap * outEmap_ = nullptr;
46-
PartMapping map_;
47-
FaceMapOrHashMap src2tgtFaces_;
48-
VertMapOrHashMap src2tgtVerts_;
49-
WholeEdgeMapOrHashMap src2tgtEdges_;
50-
};
51-
52-
using HashToVectorMappingConverter [[deprecated]] MR_BIND_IGNORE = Src2TgtMaps;
53-
54-
/// use this adapter to call functions expecting PartMapping parameter to receive tgt2src dense maps
55-
class Tgt2SrcMaps
56-
{
57-
public:
58-
MRMESH_API Tgt2SrcMaps( FaceMap * outFmap, VertMap * outVmap, WholeEdgeMap * outEmap );
59-
MRMESH_API ~Tgt2SrcMaps(); // maps are moved back to user here
60-
61-
operator const PartMapping &() const { return map_; }
62-
const PartMapping & getPartMapping() const { return map_; }
63-
64-
private:
65-
FaceMap * outFmap_ = nullptr;
66-
VertMap * outVmap_ = nullptr;
67-
WholeEdgeMap * outEmap_ = nullptr;
68-
PartMapping map_;
69-
FaceMapOrHashMap tgt2srcFaces_;
70-
VertMapOrHashMap tgt2srcVerts_;
71-
WholeEdgeMapOrHashMap tgt2srcEdges_;
72-
};
73-
7429
} //namespace MR
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#include "MRPartMappingAdapters.h"
2+
#include "MRId.h"
3+
4+
namespace MR
5+
{
6+
7+
Src2TgtMaps::Src2TgtMaps( FaceMap * outFmap, VertMap * outVmap, WholeEdgeMap * outEmap )
8+
: outFmap_( outFmap ), outVmap_( outVmap ), outEmap_( outEmap )
9+
{
10+
if ( outFmap )
11+
{
12+
src2tgtFaces_.setMap( std::move( *outFmap_ ) );
13+
map_.src2tgtFaces = &src2tgtFaces_;
14+
}
15+
if ( outVmap )
16+
{
17+
src2tgtVerts_.setMap( std::move( *outVmap_ ) );
18+
map_.src2tgtVerts = &src2tgtVerts_;
19+
}
20+
if ( outEmap )
21+
{
22+
src2tgtEdges_.setMap( std::move( *outEmap_ ) );
23+
map_.src2tgtEdges = &src2tgtEdges_;
24+
}
25+
}
26+
27+
Src2TgtMaps::~Src2TgtMaps()
28+
{
29+
if ( outFmap_ )
30+
*outFmap_ = std::move( *src2tgtFaces_.getMap() );
31+
if ( outVmap_ )
32+
*outVmap_ = std::move( *src2tgtVerts_.getMap() );
33+
if ( outEmap_ )
34+
*outEmap_ = std::move( *src2tgtEdges_.getMap() );
35+
}
36+
37+
Tgt2SrcMaps::Tgt2SrcMaps( FaceMap * outFmap, VertMap * outVmap, WholeEdgeMap * outEmap )
38+
: outFmap_( outFmap ), outVmap_( outVmap ), outEmap_( outEmap )
39+
{
40+
if ( outFmap )
41+
{
42+
tgt2srcFaces_.setMap( std::move( *outFmap_ ) );
43+
map_.tgt2srcFaces = &tgt2srcFaces_;
44+
}
45+
if ( outVmap )
46+
{
47+
tgt2srcVerts_.setMap( std::move( *outVmap_ ) );
48+
map_.tgt2srcVerts = &tgt2srcVerts_;
49+
}
50+
if ( outEmap )
51+
{
52+
tgt2srcEdges_.setMap( std::move( *outEmap_ ) );
53+
map_.tgt2srcEdges = &tgt2srcEdges_;
54+
}
55+
}
56+
57+
Tgt2SrcMaps::~Tgt2SrcMaps()
58+
{
59+
if ( outFmap_ )
60+
*outFmap_ = std::move( *tgt2srcFaces_.getMap() );
61+
if ( outVmap_ )
62+
*outVmap_ = std::move( *tgt2srcVerts_.getMap() );
63+
if ( outEmap_ )
64+
*outEmap_ = std::move( *tgt2srcEdges_.getMap() );
65+
}
66+
67+
} //namespace MR

0 commit comments

Comments
 (0)