namespace
{
// Type aliases for unordered maps with custom allocators
-using FaceEdgesAllocator =
- NCollection_Allocator<std::pair<const TopoDS_Face, NCollection_Array1<TopoDS_Edge>>>;
-using FaceEdgesMap = std::unordered_map<TopoDS_Face,
- NCollection_Array1<TopoDS_Edge>,
- TopTools_ShapeMapHasher,
- TopTools_ShapeMapHasher,
- FaceEdgesAllocator>;
+using FaceEdgesMap = NCollection_IndexedDataMap<TopoDS_Face, NCollection_Array1<TopoDS_Edge>>;
using EdgeFacesAllocator =
NCollection_Allocator<std::pair<const TopoDS_Edge, NCollection_DynamicArray<TopoDS_Face>>>;
using EdgeFacesMap = std::unordered_map<TopoDS_Edge,
{
NCollection_List<TopTools_SequenceOfShape> aConnectedGroups;
- if (theFaceEdges.empty())
+ if (theFaceEdges.IsEmpty())
{
return aConnectedGroups;
}
- TopTools_MapOfShape aVisitedFaces(static_cast<int>(theFaceEdges.size()));
+ TopTools_MapOfShape aVisitedFaces(static_cast<int>(theFaceEdges.Size()));
for (auto aFaceIter = theFaceEdges.begin(); aFaceIter != theFaceEdges.end(); ++aFaceIter)
{
- const TopoDS_Face& aStartFace = aFaceIter->first;
+ const TopoDS_Face& aStartFace = aFaceIter.ChangeIterator().Key();
if (aVisitedFaces.Contains(aStartFace))
{
aConnectedGroup.Append(aCurrentFace);
// Find connected faces through shared edges
- auto aFaceEdgesIter = theFaceEdges.find(aCurrentFace);
- if (aFaceEdgesIter != theFaceEdges.end())
+ auto aFaceEdgesIter = theFaceEdges.Seek(aCurrentFace);
+ if (aFaceEdgesIter)
{
- const NCollection_Array1<TopoDS_Edge>& aFaceEdgesArray = aFaceEdgesIter->second;
+ const NCollection_Array1<TopoDS_Edge>& aFaceEdgesArray = *aFaceEdgesIter;
for (Standard_Integer anEdgeIdx = aFaceEdgesArray.Lower();
anEdgeIdx <= aFaceEdgesArray.Upper();
}
}
- // Insert in sorted order (largest groups first)
- Standard_Boolean anIsInserted = Standard_False;
-
- for (NCollection_List<TopTools_SequenceOfShape>::Iterator anIter(aConnectedGroups);
- anIter.More();
- anIter.Next())
- {
- if (aConnectedGroup.Length() > anIter.Value().Length())
- {
- aConnectedGroups.InsertBefore(aConnectedGroup, anIter);
- anIsInserted = Standard_True;
- break;
- }
- }
-
- if (!anIsInserted)
- {
- aConnectedGroups.Append(aConnectedGroup);
- }
+ aConnectedGroups.Append(aConnectedGroup);
}
return aConnectedGroups;
NCollection_DataMap<TopoDS_Edge, std::pair<bool, bool>, TopTools_ShapeMapHasher>;
FaceEdgesMap aFaceEdges;
- aFaceEdges.reserve(theLfaces.Length());
+ aFaceEdges.ReSize(theLfaces.Length());
size_t aNumberOfEdges = 0;
NCollection_DynamicArray<TopoDS_Edge> aTempEdges;
for (TopTools_SequenceOfShape::Iterator anFaceIter(theLfaces); anFaceIter.More();
{
aFaceEdgesArray.SetValue(idx + 1, aTempEdges.Value(idx));
}
- aFaceEdges[aFace] = std::move(aFaceEdgesArray);
+ aFaceEdges.Add(aFace, std::move(aFaceEdgesArray));
}
EdgeFacesMap aEdgeFaces;
aEdgeFaces.reserve(aNumberOfEdges);
- for (const auto& aFaceEdgesPair : aFaceEdges)
+ for (Standard_Integer aFaceInd = 1; aFaceInd <= aFaceEdges.Size(); ++aFaceInd)
{
- const TopoDS_Face& aFace = aFaceEdgesPair.first;
- const NCollection_Array1<TopoDS_Edge>& aFaceEdgesArray = aFaceEdgesPair.second;
+ const TopoDS_Face& aFace = aFaceEdges.FindKey(aFaceInd);
+ const NCollection_Array1<TopoDS_Edge>& aFaceEdgesArray = aFaceEdges.FindFromIndex(aFaceInd);
for (Standard_Integer anEdgeInd = aFaceEdgesArray.Lower(); anEdgeInd <= aFaceEdgesArray.Upper();
++anEdgeInd)
Standard_Integer aBadOrientationCount = 0, aGoodOrientationCount = 0;
TopoDS_Face F1 = TopoDS::Face(aProcessingFaces.Value(aFaceIdx));
// Get edges of the face
- const NCollection_Array1<TopoDS_Edge>& aFaceEdgesArray = aFaceEdges[F1];
+ const NCollection_Array1<TopoDS_Edge>& aFaceEdgesArray = aFaceEdges.FindFromKey(F1);
for (Standard_Integer anEdgeInd = aFaceEdgesArray.Lower(); anEdgeInd <= aFaceEdgesArray.Upper();
++anEdgeInd)
continue; // Skip first group (already processed)
const TopTools_SequenceOfShape& aUnprocessedGroup = aGroupIter.Value();
- for (Standard_Integer aFaceIdx = 1; aFaceIdx <= aUnprocessedGroup.Length(); ++aFaceIdx)
+ for (Standard_Integer anUnprocFaceIdx = 1; anUnprocFaceIdx <= aUnprocessedGroup.Length();
+ ++anUnprocFaceIdx)
{
- aSeqUnconnectFaces.Append(aUnprocessedGroup.Value(aFaceIdx));
+ aSeqUnconnectFaces.Append(aUnprocessedGroup.Value(anUnprocFaceIdx));
}
}
# !!!! This file is generated automatically, do not edit manually! See end script
puts "TODO CR23096 ALL: TPSTAT : Faulty"
puts "TODO CR23096 ALL: TOLERANCE : Faulty"
+puts "TODO CR23096 ALL: CHECKSHAPE : Faulty"
set filename trj12_ttmouse-pe-214.stp
set ref_data {
DATA : Faulties = 0 ( 0 ) Warnings = 0 ( 0 ) Summary = 0 ( 0 )
TPSTAT : Faulties = 0 ( 0 ) Warnings = 40 ( 18 ) Summary = 40 ( 18 )
-CHECKSHAPE : Wires = 48 ( 48 ) Faces = 48 ( 48 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
+CHECKSHAPE : Wires = 48 ( 48 ) Faces = 40 ( 48 ) Shells = 8 ( 0 ) Solids = 8 ( 0 )
NBSHAPES : Solid = 15 ( 16 ) Shell = 17 ( 17 ) Face = 366 ( 366 )
STATSHAPE : Solid = 71 ( 79 ) Shell = 87 ( 87 ) Face = 2732 ( 2732 ) FreeWire = 0 ( 0 )
-TOLERANCE : MaxTol = 116.4921053 ( 5.033069571 ) AvgTol = 0.562451842 ( 0.06578172668 )
+TOLERANCE : MaxTol = 116.4921053 ( 5.033069571 ) AvgTol = 1.066335101 ( 0.06578172668 )
LABELS : N0Labels = 10 ( 10 ) N1Labels = 32 ( 32 ) N2Labels = 0 ( 0 ) TotalLabels = 42 ( 42 ) NameLabels = 22 ( 22 ) ColorLabels = 22 ( 22 ) LayerLabels = 0 ( 0 )
PROPS : Centroid = 0 ( 0 ) Volume = 0 ( 0 ) Area = 0 ( 0 )
NCOLORS : NColors = 6 ( 6 )