]> SALOME platform Git repositories - modules/smesh.git/commitdiff
Salome HOME
[bos #42217][EDF 28921] Horseshoe with bodyfitting. Fixed wrong nodes num in open...
authorKonstantin Leontev <Konstantin.LEONTEV@opencascade.com>
Mon, 26 Aug 2024 15:04:30 +0000 (16:04 +0100)
committerKonstantin Leontev <Konstantin.LEONTEV@opencascade.com>
Mon, 26 Aug 2024 15:04:30 +0000 (16:04 +0100)
src/StdMeshers/StdMeshers_Cartesian_3D_Hexahedron.cxx

index 2fd65a3f3f13ce69d9a32f277760f3e80e8ac581..716f923ddb217f31f99734cc3c016a58ec6c3b75 100644 (file)
@@ -3559,7 +3559,7 @@ bool Hexahedron::_volumeDef::capOpenEdgesPolygons(const std::vector<std::set<std
 
   // Consider a simple case where all the edges could form a closed polygon.
   // First edge will form the first and the last node in the vector.
-  const size_t freeNodesNum = freeEdges.size() * 2 - 1;
+  const size_t freeNodesNum = freeEdges.size();
   std::vector<int> nodes(freeNodesNum);
 
   auto findNode = [&](const std::pair<int, int>& edge, const int node, const int index) -> bool
@@ -3580,7 +3580,7 @@ bool Hexahedron::_volumeDef::capOpenEdgesPolygons(const std::vector<std::set<std
 
   size_t firstIdx = 0;
   size_t lastIdx = freeNodesNum - 1;
-  for (auto curEdge = freeEdges.begin(); curEdge != freeEdges.end(); ++curEdge)
+  for (auto curEdge = freeEdges.begin(); curEdge != freeEdges.end() && (lastIdx - firstIdx) > 1; ++curEdge)
   {
     // Store current nodes
     int firstNode = curEdge->first;
@@ -3652,7 +3652,7 @@ bool Hexahedron::_volumeDef::capOpenEdgesPolygons(const std::vector<std::set<std
   for (size_t i = 0; i < freeNodesNum; ++i)
   {
     auto nodeIt = std::find_if(_nodes.begin(), _nodes.end(),
-      [&](const _nodeDef& node) { return node.Node()->GetID() == nodes[i]; });
+      [&](const _nodeDef& node) { return node.Node() && node.Node()->GetID() == nodes[i]; });
 
     _nodes.push_back(*nodeIt);
   }