From 4a87093dce659ebda0d59761cd1a0350c542ab5a Mon Sep 17 00:00:00 2001 From: eap Date: Thu, 30 May 2013 14:14:31 +0000 Subject: [PATCH] 0022104: EDF 2550 SMESH: 2D viscous layer, allow specifying edges with viscous layer + void SetBndShapes(const std::vector& shapeIds, bool toIgnore); + std::vector GetBndShapes() const { return _shapeIds; } + bool IsToIgnoreShapes() const { return _isToIgnoreShapes; } private: - std::vector _ignoreBndShapeIds; + std::vector _shapeIds; + bool _isToIgnoreShapes; --- src/StdMeshers/StdMeshers_ViscousLayers.cxx | 34 +++++++++++---------- src/StdMeshers/StdMeshers_ViscousLayers.hxx | 12 +++++--- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/StdMeshers/StdMeshers_ViscousLayers.cxx b/src/StdMeshers/StdMeshers_ViscousLayers.cxx index 61365b4d6..d4a595ec5 100644 --- a/src/StdMeshers/StdMeshers_ViscousLayers.cxx +++ b/src/StdMeshers/StdMeshers_ViscousLayers.cxx @@ -567,20 +567,17 @@ virtual SMDS_ElemIteratorPtr elementsIterator(SMDSAbs_ElementType type) const // StdMeshers_ViscousLayers::StdMeshers_ViscousLayers(int hypId, int studyId, SMESH_Gen* gen) :SMESH_Hypothesis(hypId, studyId, gen), - _nbLayers(1), _thickness(1), _stretchFactor(1) + _isToIgnoreShapes(18), _nbLayers(1), _thickness(1), _stretchFactor(1) { _name = StdMeshers_ViscousLayers::GetHypType(); _param_algo_dim = -3; // auxiliary hyp used by 3D algos } // -------------------------------------------------------------------------------- -void StdMeshers_ViscousLayers::SetBndShapesToIgnore(const std::vector& faceIds) +void StdMeshers_ViscousLayers::SetBndShapes(const std::vector& faceIds, bool toIgnore) { - if ( faceIds != _ignoreBndShapeIds ) - _ignoreBndShapeIds = faceIds, NotifySubMeshesHypothesisModification(); -} // -------------------------------------------------------------------------------- -bool StdMeshers_ViscousLayers::IsIgnoredShape(const int shapeID) const -{ - return ( find( _ignoreBndShapeIds.begin(), _ignoreBndShapeIds.end(), shapeID ) - != _ignoreBndShapeIds.end() ); + if ( faceIds != _shapeIds ) + _shapeIds = faceIds, NotifySubMeshesHypothesisModification(); + if ( _isToIgnoreShapes != toIgnore ) + _isToIgnoreShapes = toIgnore, NotifySubMeshesHypothesisModification(); } // -------------------------------------------------------------------------------- void StdMeshers_ViscousLayers::SetTotalThickness(double thickness) { @@ -638,17 +635,22 @@ std::ostream & StdMeshers_ViscousLayers::SaveTo(std::ostream & save) save << " " << _nbLayers << " " << _thickness << " " << _stretchFactor - << " " << _ignoreBndShapeIds.size(); - for ( unsigned i = 0; i < _ignoreBndShapeIds.size(); ++i ) - save << " " << _ignoreBndShapeIds[i]; + << " " << _shapeIds.size(); + for ( unsigned i = 0; i < _shapeIds.size(); ++i ) + save << " " << _shapeIds[i]; + save << " " << !_isToIgnoreShapes; // negate to keep the behavior in old studies. return save; } // -------------------------------------------------------------------------------- std::istream & StdMeshers_ViscousLayers::LoadFrom(std::istream & load) { - int nbFaces, faceID; + int nbFaces, faceID, shapeToTreat; load >> _nbLayers >> _thickness >> _stretchFactor >> nbFaces; - while ( _ignoreBndShapeIds.size() < nbFaces && load >> faceID ) - _ignoreBndShapeIds.push_back( faceID ); + while ( _shapeIds.size() < nbFaces && load >> faceID ) + _shapeIds.push_back( faceID ); + if ( load >> shapeToTreat ) + _isToIgnoreShapes = !shapeToTreat; + else + _isToIgnoreShapes = true; // old behavior return load; } // -------------------------------------------------------------------------------- bool StdMeshers_ViscousLayers::SetParametersByMesh(const SMESH_Mesh* theMesh, @@ -1072,7 +1074,7 @@ bool _ViscousBuilder::findFacesWithLayers() vector ignoreFaces; for ( unsigned i = 0; i < _sdVec.size(); ++i ) { - vector ids = _sdVec[i]._hyp->GetBndShapesToIgnore(); + vector ids = _sdVec[i]._hyp->GetBndShapes(); for ( unsigned i = 0; i < ids.size(); ++i ) { const TopoDS_Shape& s = getMeshDS()->IndexToShape( ids[i] ); diff --git a/src/StdMeshers/StdMeshers_ViscousLayers.hxx b/src/StdMeshers/StdMeshers_ViscousLayers.hxx index 9794ec54d..b62e165b0 100644 --- a/src/StdMeshers/StdMeshers_ViscousLayers.hxx +++ b/src/StdMeshers/StdMeshers_ViscousLayers.hxx @@ -39,10 +39,11 @@ class STDMESHERS_EXPORT StdMeshers_ViscousLayers : public SMESH_Hypothesis public: StdMeshers_ViscousLayers(int hypId, int studyId, SMESH_Gen* gen); - // Set boundary shapes to exclude from treatment, faces in 3D, edges in 2D - void SetBndShapesToIgnore(const std::vector& shapeIds); - std::vector GetBndShapesToIgnore() const { return _ignoreBndShapeIds; } - bool IsIgnoredShape(const int shapeID) const; + // Set boundary shapes, faces in 3D, edges in 2D, either to exclude from + // treatment or to make the Viscous Layers on + void SetBndShapes(const std::vector& shapeIds, bool toIgnore); + std::vector GetBndShapes() const { return _shapeIds; } + bool IsToIgnoreShapes() const { return _isToIgnoreShapes; } // Set total thickness of layers of prisms void SetTotalThickness(double thickness); @@ -86,7 +87,8 @@ public: private: - std::vector _ignoreBndShapeIds; + std::vector _shapeIds; + bool _isToIgnoreShapes; int _nbLayers; double _thickness; double _stretchFactor;