X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FStdMeshers%2FStdMeshers_QuadrangleParams.cxx;h=e45b4cf687f494d50191386feca5db2e70dcc9cb;hp=13a7f48ff57e1a685ca3956225fcddcacb3ac281;hb=e74c29b7867ca230102fc580d831dda6b81b3b4c;hpb=bd4e115a78b52e3fbc016e5e30bb0e19b2a9e7d6 diff --git a/src/StdMeshers/StdMeshers_QuadrangleParams.cxx b/src/StdMeshers/StdMeshers_QuadrangleParams.cxx index 13a7f48ff..e45b4cf68 100644 --- a/src/StdMeshers/StdMeshers_QuadrangleParams.cxx +++ b/src/StdMeshers/StdMeshers_QuadrangleParams.cxx @@ -1,9 +1,9 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -87,6 +87,43 @@ void StdMeshers_QuadrangleParams::SetQuadType (StdMeshers_QuadType type) } } +//================================================================================ +/*! + * \brief Set positions of enforced nodes + */ +//================================================================================ + +void StdMeshers_QuadrangleParams:: +SetEnforcedNodes( const std::vector< TopoDS_Shape >& shapes, + const std::vector< gp_Pnt >& points ) +{ + bool isChanged = ( shapes != _enforcedVertices || + points.size() != _enforcedPoints.size() ); + for ( size_t i = 0; i < points.size() && !isChanged; ++i ) + isChanged = ( _enforcedPoints[ i ].SquareDistance( points[i] ) > 1e-100 ); + + if ( isChanged ) + { + _enforcedVertices = shapes; + _enforcedPoints = points; + NotifySubMeshesHypothesisModification(); + } +} + +//================================================================================ +/*! + * \brief Returns positions of enforced nodes + */ +//================================================================================ + +void StdMeshers_QuadrangleParams:: +GetEnforcedNodes( std::vector< TopoDS_Shape >& shapes, + std::vector< gp_Pnt >& points ) const +{ + shapes = _enforcedVertices; + points = _enforcedPoints; +} + //============================================================================= /*! * @@ -98,6 +135,13 @@ ostream & StdMeshers_QuadrangleParams::SaveTo(ostream & save) save << _triaVertexID << " UNDEFINED " << int(_quadType); else save << _triaVertexID << " " << _objEntry << " " << int(_quadType); + + save << " " << _enforcedPoints.size(); + for ( size_t i = 0; i < _enforcedPoints.size(); ++i ) + save << " " << _enforcedPoints[i].X() + << " " << _enforcedPoints[i].Y() + << " " << _enforcedPoints[i].Z(); + return save; } @@ -109,42 +153,38 @@ ostream & StdMeshers_QuadrangleParams::SaveTo(ostream & save) istream & StdMeshers_QuadrangleParams::LoadFrom(istream & load) { bool isOK = true; - isOK = (load >> _triaVertexID); + isOK = static_cast(load >> _triaVertexID); if (!isOK) load.clear(ios::badbit | load.rdstate()); - isOK = (load >> _objEntry); + isOK = static_cast(load >> _objEntry); if (!isOK) load.clear(ios::badbit | load.rdstate()); int type; - isOK = (load >> type); + isOK = static_cast(load >> type); if (isOK) _quadType = StdMeshers_QuadType(type); + // _enforcedVertices are loaded at StdMeshers_I level + // because GEOM objects are referred by study entry. + + int nbP = 0; + double x,y,z; + if ( load >> nbP && nbP > 0 ) + { + _enforcedPoints.reserve( nbP ); + while ( _enforcedPoints.size() < _enforcedPoints.capacity() ) + if ( load >> x && + load >> y && + load >> z ) + _enforcedPoints.push_back( gp_Pnt( x,y,z )); + else + break; + } return load; } -//============================================================================= -/*! - * - */ -//============================================================================= -ostream & operator <<(ostream & save, StdMeshers_QuadrangleParams & hyp) -{ - return hyp.SaveTo( save ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -istream & operator >>(istream & load, StdMeshers_QuadrangleParams & hyp) -{ - return hyp.LoadFrom( load ); -} - //================================================================================ /*! * \brief Redifined method