X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FStdMeshers%2FStdMeshers_Cartesian_3D.cxx;h=749236780869080a8152e511ce775ceac856c21f;hp=8b40fe2d9510cb79979d8e80f8a5a0dde77d80e5;hb=7eda9ca931ed2a11cb5e4637e4ffe19f5c061115;hpb=e430c16626d7d83e914924eee19942b2aedb5569 diff --git a/src/StdMeshers/StdMeshers_Cartesian_3D.cxx b/src/StdMeshers/StdMeshers_Cartesian_3D.cxx index 8b40fe2d9..749236780 100644 --- a/src/StdMeshers/StdMeshers_Cartesian_3D.cxx +++ b/src/StdMeshers/StdMeshers_Cartesian_3D.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -100,17 +100,6 @@ using namespace std; //#define _MY_DEBUG_ #endif -#if OCC_VERSION_LARGE <= 0x06050300 -// workaround is required only for OCCT6.5.3 and older (see OCC22809) -#define ELLIPSOLID_WORKAROUND -#endif - -#ifdef ELLIPSOLID_WORKAROUND -#include -#include -#include -#endif - //============================================================================= /*! * Constructor @@ -317,41 +306,6 @@ namespace void ComputeUVW(const gp_XYZ& p, double uvw[3]); void ComputeNodes(SMESH_MesherHelper& helper); }; -#ifdef ELLIPSOLID_WORKAROUND - // -------------------------------------------------------------------------- - /*! - * \brief struct temporary replacing IntCurvesFace_Intersector until - * OCCT bug 0022809 is fixed - * http://tracker.dev.opencascade.org/view.php?id=22809 - */ - struct TMP_IntCurvesFace_Intersector - { - BRepAdaptor_Surface _surf; - double _tol; - BRepIntCurveSurface_Inter _intcs; - vector _points; - BRepTopAdaptor_TopolTool _clsf; - - TMP_IntCurvesFace_Intersector(const TopoDS_Face& face, const double tol) - :_surf( face ), _tol( tol ), _clsf( new BRepAdaptor_HSurface(_surf) ) {} - Bnd_Box Bounding() const { Bnd_Box b; BRepBndLib::Add (_surf.Face(), b); return b; } - void Perform( const gp_Lin& line, const double w0, const double w1 ) - { - _points.clear(); - for ( _intcs.Init( _surf.Face(), line, _tol ); _intcs.More(); _intcs.Next() ) - if ( w0 <= _intcs.W() && _intcs.W() <= w1 ) - _points.push_back( _intcs.Point() ); - } - bool IsDone() const { return true; } - int NbPnt() const { return _points.size(); } - IntCurveSurface_TransitionOnCurve Transition( const int i ) const { return _points[ i-1 ].Transition(); } - double WParameter( const int i ) const { return _points[ i-1 ].W(); } - TopAbs_State ClassifyUVPoint(const gp_Pnt2d& p) { return _clsf.Classify( p, _tol ); } - }; -#define __IntCurvesFace_Intersector TMP_IntCurvesFace_Intersector -#else -#define __IntCurvesFace_Intersector IntCurvesFace_Intersector -#endif // -------------------------------------------------------------------------- /*! * \brief Intersector of TopoDS_Face with all GridLine's @@ -362,7 +316,7 @@ namespace TGeomID _faceID; Grid* _grid; Bnd_Box _bndBox; - __IntCurvesFace_Intersector* _surfaceInt; + IntCurvesFace_Intersector* _surfaceInt; vector< std::pair< GridLine*, F_IntersectPoint > > _intersections; FaceGridIntersector(): _grid(0), _surfaceInt(0) {} @@ -383,11 +337,11 @@ namespace GetCurveFaceIntersector(); return _bndBox; } - __IntCurvesFace_Intersector* GetCurveFaceIntersector() + IntCurvesFace_Intersector* GetCurveFaceIntersector() { if ( !_surfaceInt ) { - _surfaceInt = new __IntCurvesFace_Intersector( _face, Precision::PConfusion() ); + _surfaceInt = new IntCurvesFace_Intersector( _face, Precision::PConfusion() ); _bndBox = _surfaceInt->Bounding(); if ( _bndBox.IsVoid() ) BRepBndLib::Add (_face, _bndBox); @@ -412,7 +366,7 @@ namespace gp_Cone _cone; gp_Sphere _sphere; gp_Torus _torus; - __IntCurvesFace_Intersector* _surfaceInt; + IntCurvesFace_Intersector* _surfaceInt; vector< F_IntersectPoint > _intPoints; @@ -742,17 +696,17 @@ namespace int& di, double tol ) { //val += values[0]; // input \a val is measured from 0. - if ( i > values.size()-2 ) + if ( i > (int) values.size()-2 ) i = values.size()-2; else - while ( i+2 < values.size() && val > values[ i+1 ]) + while ( i+2 < (int) values.size() && val > values[ i+1 ]) ++i; while ( i > 0 && val < values[ i ]) --i; if ( i > 0 && val - values[ i ] < tol ) di = -1; - else if ( i+2 < values.size() && values[ i+1 ] - val < tol ) + else if ( i+2 < (int) values.size() && values[ i+1 ] - val < tol ) di = 1; else di = 0; @@ -1822,7 +1776,7 @@ namespace if ( quad._eIntNodes[ iP ]->IsUsedInFace( polygon )) quad._eIntNodes[ iP ]->_usedInFace = 0; #endif - int nbUsedEdgeNodes = 0; + size_t nbUsedEdgeNodes = 0; _Face* prevPolyg = 0; // polygon previously created from this quad while ( nbSplits > 0 ) @@ -1885,7 +1839,7 @@ namespace else { _OrientedLink foundSplit; - for ( int i = iS; i < splits.size() && !foundSplit; ++i ) + for ( size_t i = iS; i < splits.size() && !foundSplit; ++i ) if (( foundSplit = splits[ i ]) && ( n2->IsLinked( foundSplit.FirstNode()->_intPoint ))) { @@ -2146,7 +2100,7 @@ namespace { sortVertexNodes( chainNodes, curNode, curFace ); } - for ( int i = 0; i < chainNodes.size(); ++i ) + for ( size_t i = 0; i < chainNodes.size(); ++i ) { polygon.AddPolyLink( chainNodes[ i ], curNode ); curNode = chainNodes[ i ]; @@ -2368,9 +2322,9 @@ namespace i = int(lineInd.I()) + dInd[iL][0]; j = int(lineInd.J()) + dInd[iL][1]; k = int(lineInd.K()) + dInd[iL][2]; - if ( i < 0 || i >= nbCells[0] || - j < 0 || j >= nbCells[1] || - k < 0 || k >= nbCells[2] ) continue; + if ( i < 0 || i >= (int) nbCells[0] || + j < 0 || j >= (int) nbCells[1] || + k < 0 || k >= (int) nbCells[2] ) continue; const size_t hexIndex = _grid->CellIndex( i,j,k ); Hexahedron *& hex = allHexa[ hexIndex ]; @@ -2482,7 +2436,7 @@ namespace planes._zProjs [0] = 0; const double zFactor = _grid->_axes[ iDirZ ] * planes._zNorm; const vector< double > & u = _grid->_coords[ iDirZ ]; - for ( int i = 1; i < planes._zProjs.size(); ++i ) + for ( size_t i = 1; i < planes._zProjs.size(); ++i ) { planes._zProjs [i] = zFactor * ( u[i] - u[0] ); } @@ -2777,7 +2731,7 @@ namespace chn.back()->IsLinked( quad._eIntNodes[ iP ]->_intPoint )) { chn.push_back( quad._eIntNodes[ iP ]); - found = quad._eIntNodes[ iP ]->_usedInFace = &quad; + found = ( quad._eIntNodes[ iP ]->_usedInFace = &quad ); break; } } while ( found && ! chn.back()->IsLinked( n2->_intPoint ) ); @@ -2869,7 +2823,7 @@ namespace ( !avoidFace || quad._eIntNodes[ iP ]->IsOnFace( avoidFace ))) { chn.push_back( quad._eIntNodes[ iP ]); - found = quad._eIntNodes[ iP ]->_usedInFace = &quad; + found = ( quad._eIntNodes[ iP ]->_usedInFace = &quad ); break; } } while ( found ); @@ -2916,7 +2870,7 @@ namespace { bool isOut = false; - const bool moreIntPoints = ( iP+1 < link._fIntPoints.size() ); + const bool moreIntPoints = ( iP+1 < (int) link._fIntPoints.size() ); // get 2 _Node's _Node* n1 = link._fIntNodes[ iP ]; @@ -3021,10 +2975,10 @@ namespace list< int > nbEdges; int nbW = SMESH_Block::GetOrderedEdges (face, edges, nbEdges); if ( nbW > 1 ) { - // select a WIRE + // select a WIRE - remove EDGEs of irrelevant WIREs from edges list< TopoDS_Edge >::iterator e = edges.begin(), eEnd = e; list< int >::iterator nE = nbEdges.begin(); - for ( ; nbW ; ++nE, --nbW ) + for ( ; nbW > 0; ++nE, --nbW ) { std::advance( eEnd, *nE ); for ( ; e != eEnd; ++e ) @@ -3037,13 +2991,14 @@ namespace ( std::find( &nShapeIds[0], nShapeIdsEnd, id ) != nShapeIdsEnd )) { edges.erase( eEnd, edges.end() ); // remove rest wires - e = eEnd; + e = eEnd = edges.end(); + --e; nbW = 0; break; } } if ( nbW > 0 ) - edges.erase( edges.begin(), eEnd ); // remove a current wire + edges.erase( edges.begin(), eEnd ); // remove a current irrelevant wire } } // rotate edges to have the first one at least partially out of the hexa @@ -3094,7 +3049,7 @@ namespace // sort nodes accoring to the order of edges _Node* orderNodes [20]; TGeomID orderShapeIDs[20]; - int nbN = 0; + size_t nbN = 0; TGeomID id, *pID; for ( e = edges.begin(); e != edges.end(); ++e ) { @@ -3180,7 +3135,7 @@ namespace if ( !_vIntNodes.empty() ) return false; - const int ijk[3] = { _i, _j, _k }; + const size_t ijk[3] = { _i, _j, _k }; F_IntersectPoint curIntPnt; // consider a cell to be in a hole if all links in any direction @@ -3581,7 +3536,7 @@ bool StdMeshers_Cartesian_3D::Compute(SMESH_Mesh & theMesh, map< TGeomID, vector< TGeomID > > edge2faceIDsMap; TopExp_Explorer eExp; Bnd_Box shapeBox; - for ( int i = 0; i < faceVec.size(); ++i ) + for ( size_t i = 0; i < faceVec.size(); ++i ) { facesItersectors[i]._face = TopoDS::Face ( faceVec[i] ); facesItersectors[i]._faceID = grid._shapes.Add( faceVec[i] );