From e26e39bada9f2d959ee4dc4c103141c18767d1be Mon Sep 17 00:00:00 2001 From: eap Date: Wed, 7 Nov 2007 09:41:55 +0000 Subject: [PATCH] PAL16202,16203 (Propagation 1D on edges group) remove useless includes and + /*! + * \brief Return submeshes of groups containing the given subshape + */ + std::list GetGroupSubMeshesContaining(const TopoDS_Shape & shape) const + throw(SALOME_Exception); --- src/SMESH/SMESH_Mesh.cxx | 56 ++++++++++++++++++------- src/SMESH/SMESH_Mesh.hxx | 88 ++++++++++++++++++---------------------- 2 files changed, 81 insertions(+), 63 deletions(-) diff --git a/src/SMESH/SMESH_Mesh.cxx b/src/SMESH/SMESH_Mesh.cxx index bbc40cd6d..8570263b5 100644 --- a/src/SMESH/SMESH_Mesh.cxx +++ b/src/SMESH/SMESH_Mesh.cxx @@ -35,6 +35,7 @@ #include "SMESHDS_Group.hxx" #include "SMESHDS_Script.hxx" #include "SMESHDS_GroupOnGeom.hxx" +#include "SMESHDS_Document.hxx" #include "SMDS_MeshVolume.hxx" #include "utilities.h" @@ -48,19 +49,13 @@ #include "DriverUNV_R_SMDS_Mesh.h" #include "DriverSTL_R_SMDS_Mesh.h" -#include #include -#include -#include - -#include #include -#include -#include +#include #include +#include #include - -#include +#include #include "Utils_ExceptHandlers.hxx" @@ -723,7 +718,7 @@ SMESH_subMesh *SMESH_Mesh::GetSubMesh(const TopoDS_Shape & aSubShape) */ //============================================================================= -SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const TopoDS_Shape & aSubShape) +SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const TopoDS_Shape & aSubShape) const throw(SALOME_Exception) { Unexpect aCatch(SalomeException); @@ -731,13 +726,12 @@ SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const TopoDS_Shape & aSubShape) int index = _myMeshDS->ShapeToIndex(aSubShape); - map ::iterator i_sm = _mapSubMesh.find(index); + map ::const_iterator i_sm = _mapSubMesh.find(index); if ( i_sm != _mapSubMesh.end()) aSubMesh = i_sm->second; return aSubMesh; } - //============================================================================= /*! * Get the SMESH_subMesh object implementation. Dont create it, return null @@ -745,17 +739,51 @@ SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const TopoDS_Shape & aSubShape) */ //============================================================================= -SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const int aShapeID) +SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const int aShapeID) const throw(SALOME_Exception) { Unexpect aCatch(SalomeException); - map ::iterator i_sm = _mapSubMesh.find(aShapeID); + map ::const_iterator i_sm = _mapSubMesh.find(aShapeID); if (i_sm == _mapSubMesh.end()) return NULL; return i_sm->second; } +//================================================================================ +/*! + * \brief Return submeshes of groups containing the given subshape + */ +//================================================================================ +list +SMESH_Mesh::GetGroupSubMeshesContaining(const TopoDS_Shape & aSubShape) const + throw(SALOME_Exception) +{ + Unexpect aCatch(SalomeException); + list found; + + SMESH_subMesh * subMesh = GetSubMeshContaining(aSubShape); + if ( !subMesh ) + return found; + + // submeshes of groups have max IDs, so search from the map end + map::const_reverse_iterator i_sm; + for ( i_sm = _mapSubMesh.rbegin(); i_sm != _mapSubMesh.rend(); ++i_sm) { + SMESHDS_SubMesh * ds = i_sm->second->GetSubMeshDS(); + if ( ds && ds->IsComplexSubmesh() ) { + TopExp_Explorer exp( i_sm->second->GetSubShape(), aSubShape.ShapeType() ); + for ( ; exp.More(); exp.Next() ) { + if ( aSubShape.IsSame( exp.Current() )) { + found.push_back( i_sm->second ); + break; + } + } + } else { + break; + } + } + return found; +} //======================================================================= //function : IsUsedHypothesis //purpose : Return True if anHyp is used to mesh aSubShape diff --git a/src/SMESH/SMESH_Mesh.hxx b/src/SMESH/SMESH_Mesh.hxx index 91bdc3f72..2f57bcd70 100644 --- a/src/SMESH/SMESH_Mesh.hxx +++ b/src/SMESH/SMESH_Mesh.hxx @@ -30,50 +30,27 @@ #define _SMESH_MESH_HXX_ #include "SMESH_Hypothesis.hxx" -//#include "SMESH_subMesh.hxx" -#include "SMESHDS_Document.hxx" #include "SMESHDS_Mesh.hxx" #include "SMESHDS_Command.hxx" #include "SMDSAbs_ElementType.hxx" -//#include "NMTTools_IndexedDataMapOfShapeIndexedMapOfShape.hxx" -#include "SMESH_IndexedDataMapOfShapeIndexedMapOfShape.hxx" - #include "Utils_SALOME_Exception.hxx" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include #include -#include #include #include -#include -#include - class SMESH_Gen; +class SMESHDS_Document; class SMESH_Group; class TopTools_ListOfShape; class SMESH_subMesh; class SMESH_HypoFilter; class TopoDS_Solid; -typedef SMESH_IndexedDataMapOfShapeIndexedMapOfShape IndexedMapOfChain; - class SMESH_Mesh { public: @@ -120,7 +97,7 @@ public: RemoveHypothesis(const TopoDS_Shape & aSubShape, int anHypId) throw(SALOME_Exception); - const list & + const std::list & GetHypothesisList(const TopoDS_Shape & aSubShape) const throw(SALOME_Exception); @@ -128,12 +105,12 @@ public: const SMESH_HypoFilter& aFilter, const bool andAncestors) const; - int GetHypotheses(const TopoDS_Shape & aSubShape, - const SMESH_HypoFilter& aFilter, - list & aHypList, - const bool andAncestors) const; + int GetHypotheses(const TopoDS_Shape & aSubShape, + const SMESH_HypoFilter& aFilter, + std::list & aHypList, + const bool andAncestors) const; - const list & GetLog() throw(SALOME_Exception); + const std::list & GetLog() throw(SALOME_Exception); void ClearLog() throw(SALOME_Exception); @@ -146,34 +123,47 @@ public: SMESH_subMesh *GetSubMesh(const TopoDS_Shape & aSubShape) throw(SALOME_Exception); - SMESH_subMesh *GetSubMeshContaining(const TopoDS_Shape & aSubShape) + SMESH_subMesh *GetSubMeshContaining(const TopoDS_Shape & aSubShape) const throw(SALOME_Exception); - SMESH_subMesh *GetSubMeshContaining(const int aShapeID) + SMESH_subMesh *GetSubMeshContaining(const int aShapeID) const throw(SALOME_Exception); - + /*! + * \brief Return submeshes of groups containing the given subshape + */ + std::list GetGroupSubMeshesContaining(const TopoDS_Shape & shape) const + throw(SALOME_Exception); + /*! + * \brief Say all submeshes that theChangedHyp has been modified + */ void NotifySubMeshesHypothesisModification(const SMESH_Hypothesis* theChangedHyp); - // Say all submeshes that theChangedHyp has been modified - const list < SMESH_subMesh * >& - GetSubMeshUsingHypothesis(SMESHDS_Hypothesis * anHyp) - throw(SALOME_Exception); - + const std::list < SMESH_subMesh * >& + GetSubMeshUsingHypothesis(SMESHDS_Hypothesis * anHyp) throw(SALOME_Exception); + /*! + * \brief Return True if anHyp is used to mesh aSubShape + */ bool IsUsedHypothesis(SMESHDS_Hypothesis * anHyp, const SMESH_subMesh * aSubMesh); - // Return True if anHyp is used to mesh aSubShape - + /*! + * \brief check if a hypothesis alowing notconform mesh is present + */ bool IsNotConformAllowed() const; - // check if a hypothesis alowing notconform mesh is present bool IsMainShape(const TopoDS_Shape& theShape) const; - + /*! + * \brief Return list of ancestors of theSubShape in the order + * that lower dimention shapes come first + */ const TopTools_ListOfShape& GetAncestors(const TopoDS_Shape& theSubShape) const; - // return list of ancestors of theSubShape in the order - // that lower dimention shapes come first. - - /*! Check group names for duplications. - * Consider maximum group name length stored in MED file. + /*! + * \brief Return data map of descendant to ancestor shapes + */ + typedef TopTools_IndexedDataMapOfShapeListOfShape TAncestorMap; + const TAncestorMap& GetAncestorMap() const { return _mapAncestors; } + /*! + * \brief Check group names for duplications. + * Consider maximum group name length stored in MED file */ bool HasDuplicatedGroupNamesMED(); @@ -222,7 +212,7 @@ public: SMESH_Group* GetGroup (const int theGroupID); - list GetGroupIds(); + std::list GetGroupIds(); void RemoveGroup (const int theGroupID); @@ -241,7 +231,7 @@ protected: int _idDoc; // id given by SMESHDS_Document int _groupId; // id generator for group objects bool _isShapeToMesh;// set to true when a shape is given (only once) - list _subMeshesUsingHypothesisList; + std::list _subMeshesUsingHypothesisList; SMESHDS_Document * _myDocument; SMESHDS_Mesh * _myMeshDS; map _mapSubMesh; -- 2.39.2