From 3da3abc5601ba3f04aafd610536da9aad281c901 Mon Sep 17 00:00:00 2001 From: eap Date: Thu, 15 Nov 2007 14:35:25 +0000 Subject: [PATCH] PAL17694 (New Tool About Hexahedral Meshing) + SMESH::NodePosition* GetNodePosition(CORBA::Long NodeID); --- src/SMESH_I/SMESH_Mesh_i.cxx | 59 ++++++++++++++++++++++++++++++++++-- src/SMESH_I/SMESH_Mesh_i.hxx | 5 +++ 2 files changed, 61 insertions(+), 3 deletions(-) diff --git a/src/SMESH_I/SMESH_Mesh_i.cxx b/src/SMESH_I/SMESH_Mesh_i.cxx index 50fca8a4c..877a0170a 100644 --- a/src/SMESH_I/SMESH_Mesh_i.cxx +++ b/src/SMESH_I/SMESH_Mesh_i.cxx @@ -44,6 +44,8 @@ #include "SMESH_Group.hxx" #include "SMESH_MeshEditor.hxx" #include "SMESH_MesherHelper.hxx" +#include "SMDS_EdgePosition.hxx" +#include "SMDS_FacePosition.hxx" #include "OpUtil.hxx" #include "SALOME_NamingService.hxx" @@ -54,14 +56,15 @@ // OCCT Includes #include -#include -#include #include +#include +#include #include -#include #include +#include #include #include +#include #include // STL Includes @@ -2014,6 +2017,56 @@ SMESH::long_array* SMESH_Mesh_i::GetNodeInverseElements(const CORBA::Long id) return aResult._retn(); } +//============================================================================= +/*! + * \brief Return position of a node on shape + */ +//============================================================================= + +SMESH::NodePosition* SMESH_Mesh_i::GetNodePosition(CORBA::Long NodeID) +{ + SMESH::NodePosition* aNodePosition = new SMESH::NodePosition(); + aNodePosition->shapeID = 0; + aNodePosition->shapeType = GEOM::SHAPE; + + SMESHDS_Mesh* mesh = _impl->GetMeshDS(); + if ( !mesh ) return aNodePosition; + + if ( const SMDS_MeshNode* aNode = mesh->FindNode(NodeID) ) + { + if ( SMDS_PositionPtr pos = aNode->GetPosition() ) + { + aNodePosition->shapeID = pos->GetShapeId(); + switch ( pos->GetTypeOfPosition() ) { + case SMDS_TOP_EDGE: + aNodePosition->shapeType = GEOM::EDGE; + aNodePosition->params.length(1); + aNodePosition->params[0] = + static_cast( pos.get() )->GetUParameter(); + break; + case SMDS_TOP_FACE: + aNodePosition->shapeType = GEOM::FACE; + aNodePosition->params.length(2); + aNodePosition->params[0] = + static_cast( pos.get() )->GetUParameter(); + aNodePosition->params[1] = + static_cast( pos.get() )->GetVParameter(); + break; + case SMDS_TOP_VERTEX: + aNodePosition->shapeType = GEOM::VERTEX; + break; + case SMDS_TOP_3DSPACE: + if ( TopExp_Explorer(_impl->GetShapeToMesh(), TopAbs_SOLID).More() ) + aNodePosition->shapeType = GEOM::SOLID; + else if ( TopExp_Explorer(_impl->GetShapeToMesh(), TopAbs_SHELL).More() ) + aNodePosition->shapeType = GEOM::SHELL; + break; + default:; + } + } + } + return aNodePosition; +} //============================================================================= /*! diff --git a/src/SMESH_I/SMESH_Mesh_i.hxx b/src/SMESH_I/SMESH_Mesh_i.hxx index 2f1a65b60..74fe46d3d 100644 --- a/src/SMESH_I/SMESH_Mesh_i.hxx +++ b/src/SMESH_I/SMESH_Mesh_i.hxx @@ -347,6 +347,11 @@ public: */ SMESH::long_array* GetNodeInverseElements(const CORBA::Long id); + /*! + * \brief Return position of a node on shape + */ + SMESH::NodePosition* GetNodePosition(CORBA::Long NodeID); + /*! * If given element is node returns IDs of shape from position * If there is not node for given ID - returns -1 -- 2.39.2