Salome HOME
0020714: EDF GHS3DPLUGIN: shapeToMesh when creating 3D mesh from 2D mesh
authoreap <eap@opencascade.com>
Thu, 4 Mar 2010 13:57:50 +0000 (13:57 +0000)
committereap <eap@opencascade.com>
Thu, 4 Mar 2010 13:57:50 +0000 (13:57 +0000)
* Fix FaceNormal()
* Add
+  static std::vector< const SMDS_MeshNode*> GetCommonNodes(const SMDS_MeshElement* e1,
+                                                           const SMDS_MeshElement* e2);

src/SMESH/SMESH_Algo.cxx
src/SMESH/SMESH_Algo.hxx

index be3f7753a33fae0d4ec4dd8f495041560e4254c8..cea1a5749c4985d75c10bcaa5d671cde3f082e9b 100644 (file)
@@ -194,10 +194,10 @@ bool SMESH_Algo::FaceNormal(const SMDS_MeshElement* F, gp_XYZ& normal, bool norm
     gp_XYZ p[3];
     for ( int n = 0; n < 3; ++n )
     {
-      const SMDS_MeshNode* node = F->GetNode( n );
+      const SMDS_MeshNode* node = F->GetNode( i + n );
       p[n].SetCoord( node->X(), node->Y(), node->Z() );
     }
-    normal += ( p[0] - p[1] ) ^ ( p[2] - p[1] );
+    normal += ( p[2] - p[1] ) ^ ( p[0] - p[1] );
   }
   double size2 = normal.SquareModulus();
   bool ok = ( size2 > numeric_limits<double>::min() * numeric_limits<double>::min());
@@ -532,6 +532,21 @@ const SMDS_MeshNode* SMESH_Algo::VertexNode(const TopoDS_Vertex& V,
   return 0;
 }
 
+//=======================================================================
+//function : GetCommonNodes
+//purpose  : Return nodes common to two elements
+//=======================================================================
+
+vector< const SMDS_MeshNode*> SMESH_Algo::GetCommonNodes(const SMDS_MeshElement* e1,
+                                                         const SMDS_MeshElement* e2)
+{
+  vector< const SMDS_MeshNode*> common;
+  for ( int i = 0 ; i < e1->NbNodes(); ++i )
+    if ( e2->GetNodeIndex( e1->GetNode( i )) >= 0 )
+      common.push_back( e1->GetNode( i ));
+  return common;
+}
+
 //================================================================================
 /*!
  * \brief Sets event listener to submeshes if necessary
index 2caa5ddf6dc0fb949162c56561cd980f74fb19ec..6f39375ed20c447b21b86dd16c1488eab617b19a 100644 (file)
@@ -316,9 +316,13 @@ public:
     * \param meshDS - mesh
     * \retval const SMDS_MeshNode* - found node or NULL
    */
-  static const SMDS_MeshNode* VertexNode(const TopoDS_Vertex& V,
-                                         const SMESHDS_Mesh* meshDS);
+  static const SMDS_MeshNode* VertexNode(const TopoDS_Vertex& V, const SMESHDS_Mesh* meshDS);
 
+  /*!
+   * \brief Return nodes common to two elements
+   */
+  static std::vector< const SMDS_MeshNode*> GetCommonNodes(const SMDS_MeshElement* e1,
+                                                           const SMDS_MeshElement* e2);
 protected:
 
   /*!