]> SALOME platform Git repositories - modules/smesh.git/commitdiff
Salome HOME
0020982: EDF 1547 SMESH: Creation of non-conformal quadratic pyramids
authoreap <eap@opencascade.com>
Mon, 17 Sep 2012 10:16:21 +0000 (10:16 +0000)
committereap <eap@opencascade.com>
Mon, 17 Sep 2012 10:16:21 +0000 (10:16 +0000)
  double MaxLinearSize2() const;
  // Return maximal square distance between connected corner nodes

src/SMDS/SMDS_VolumeTool.cxx
src/SMDS/SMDS_VolumeTool.hxx

index 841d2354078e16761d4f199c4c189b93391d6c91..2c7c401cb00ecdb4ce3f64d4393b4b927a97804d 100644 (file)
@@ -1452,6 +1452,45 @@ double SMDS_VolumeTool::MinLinearSize2() const
   return minSize;
 }
 
+//================================================================================
+/*!
+ * \brief Return maximal square distance between connected corner nodes
+ */
+//================================================================================
+
+double SMDS_VolumeTool::MaxLinearSize2() const
+{
+  double maxSize = -1e+100;
+  int iQ = myVolume->IsQuadratic() ? 2 : 1;
+
+  // store current face data
+  int curFace = myCurFace, nbN = myFaceNbNodes;
+  int* ind = myFaceNodeIndices;
+  myFaceNodeIndices = NULL;
+  const SMDS_MeshNode** nodes = myFaceNodes;
+  myFaceNodes = NULL;
+  
+  // it seems that compute distance twice is faster than organization of a sole computing
+  myCurFace = -1;
+  for ( int iF = 0; iF < myNbFaces; ++iF )
+  {
+    setFace( iF );
+    for ( int iN = 0; iN < myFaceNbNodes; iN += iQ )
+    {
+      XYZ n1( myFaceNodes[ iN ]);
+      XYZ n2( myFaceNodes[(iN + iQ) % myFaceNbNodes]);
+      maxSize = std::max( maxSize, (n1 - n2).SquareMagnitude());
+    }
+  }
+  // restore current face data
+  myCurFace         = curFace;
+  myFaceNbNodes     = nbN;
+  myFaceNodeIndices = ind;
+  delete [] myFaceNodes; myFaceNodes = nodes;
+
+  return maxSize;
+}
+
 //================================================================================
 /*!
  * \brief check that only one volume is build on the face nodes
index 5c22c3edab61f1063f2c9e118ea0daccf5a69e2e..ff067eb3a94bed4913814c1444725d92d282c883 100644 (file)
@@ -128,6 +128,9 @@ class SMDS_EXPORT SMDS_VolumeTool
   double MinLinearSize2() const;
   // Return minimal square distance between connected corner nodes
 
+  double MaxLinearSize2() const;
+  // Return maximal square distance between connected corner nodes
+
   // -------------
   // info on faces
   // -------------