From 4fadfe037a799a0309eb9e330fe1885c358f3f21 Mon Sep 17 00:00:00 2001 From: eap Date: Thu, 4 Mar 2010 13:57:50 +0000 Subject: [PATCH] 0020714: EDF GHS3DPLUGIN: shapeToMesh when creating 3D mesh from 2D mesh * Fix FaceNormal() * Add + static std::vector< const SMDS_MeshNode*> GetCommonNodes(const SMDS_MeshElement* e1, + const SMDS_MeshElement* e2); --- src/SMESH/SMESH_Algo.cxx | 19 +++++++++++++++++-- src/SMESH/SMESH_Algo.hxx | 8 ++++++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/SMESH/SMESH_Algo.cxx b/src/SMESH/SMESH_Algo.cxx index be3f7753a..cea1a5749 100644 --- a/src/SMESH/SMESH_Algo.cxx +++ b/src/SMESH/SMESH_Algo.cxx @@ -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::min() * numeric_limits::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 diff --git a/src/SMESH/SMESH_Algo.hxx b/src/SMESH/SMESH_Algo.hxx index 2caa5ddf6..6f39375ed 100644 --- a/src/SMESH/SMESH_Algo.hxx +++ b/src/SMESH/SMESH_Algo.hxx @@ -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: /*! -- 2.39.2