X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FStdMeshers%2FStdMeshers_Cartesian_3D.cxx;h=aebd779eea189c77019b1ac01a7b7bc6ea636687;hp=3cd23ff35d0a619006f38ac457062b5b1104f928;hb=e74c29b7867ca230102fc580d831dda6b81b3b4c;hpb=63a442b2c3cbc5e2155d83e86dfdb77d6961fab3 diff --git a/src/StdMeshers/StdMeshers_Cartesian_3D.cxx b/src/StdMeshers/StdMeshers_Cartesian_3D.cxx index 3cd23ff35..aebd779ee 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 @@ -25,6 +25,7 @@ #include "StdMeshers_Cartesian_3D.hxx" #include "SMDS_MeshNode.hxx" +#include "SMESHDS_Mesh.hxx" #include "SMESH_Block.hxx" #include "SMESH_Comment.hxx" #include "SMESH_Mesh.hxx" @@ -73,6 +74,7 @@ #include #include #include +#include #include #include #include @@ -100,17 +102,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 +308,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 +318,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 +339,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 +368,7 @@ namespace gp_Cone _cone; gp_Sphere _sphere; gp_Torus _torus; - __IntCurvesFace_Intersector* _surfaceInt; + IntCurvesFace_Intersector* _surfaceInt; vector< F_IntersectPoint > _intPoints; @@ -742,17 +698,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; @@ -1415,7 +1371,11 @@ namespace } if ( surf->IsKind( STANDARD_TYPE(Geom_BSplineSurface )) || surf->IsKind( STANDARD_TYPE(Geom_BezierSurface ))) +#if OCC_VERSION_MAJOR < 7 if ( !noSafeTShapes.insert((const Standard_Transient*) _face.TShape() ).second ) +#else + if ( !noSafeTShapes.insert( _face.TShape().get() ).second ) +#endif isSafe = false; double f, l; @@ -1455,7 +1415,11 @@ namespace edgeIsSafe = false; } } +#if OCC_VERSION_MAJOR < 7 if ( !edgeIsSafe && !noSafeTShapes.insert((const Standard_Transient*) e.TShape() ).second ) +#else + if ( !edgeIsSafe && !noSafeTShapes.insert( e.TShape().get() ).second ) +#endif isSafe = false; } return isSafe; @@ -1822,7 +1786,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 +1849,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 +2110,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 +2332,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 +2446,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 +2741,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 +2833,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 +2880,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 ]; @@ -3092,24 +3056,24 @@ namespace else if ( eMidOut != edges.end() ) edges.splice( edges.end(), edges, edges.begin(), eMidOut ); - // sort nodes accoring to the order of edges + // sort nodes according to the order of edges _Node* orderNodes [20]; - TGeomID orderShapeIDs[20]; - int nbN = 0; - TGeomID id, *pID; + //TGeomID orderShapeIDs[20]; + size_t nbN = 0; + TGeomID id, *pID = 0; for ( e = edges.begin(); e != edges.end(); ++e ) { if (( id = _grid->_shapes.FindIndex( SMESH_MesherHelper::IthVertex( 0, *e ))) && (( pID = std::find( &nShapeIds[0], nShapeIdsEnd, id )) != nShapeIdsEnd )) { - orderShapeIDs[ nbN ] = id; + //orderShapeIDs[ nbN ] = id; orderNodes [ nbN++ ] = nodes[ pID - &nShapeIds[0] ]; *pID = -1; } if (( id = _grid->_shapes.FindIndex( *e )) && (( pID = std::find( &nShapeIds[0], nShapeIdsEnd, id )) != nShapeIdsEnd )) { - orderShapeIDs[ nbN ] = id; + //orderShapeIDs[ nbN ] = id; orderNodes [ nbN++ ] = nodes[ pID - &nShapeIds[0] ]; *pID = -1; } @@ -3181,7 +3145,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 @@ -3203,7 +3167,7 @@ namespace const F_IntersectPoint* firstIntPnt = 0; if ( link._nodes[0]->Node() ) // 1st node is a hexa corner { - curIntPnt._paramOnLine = coords[ ijk[ iDir ]] - coords[0]; + curIntPnt._paramOnLine = coords[ ijk[ iDir ]] - coords[0] + _grid->_tol; const GridLine& line = _grid->_lines[ iDir ][ lineIndex[ iL ]]; multiset< F_IntersectPoint >::const_iterator ip = line._intPoints.upper_bound( curIntPnt ); @@ -3582,7 +3546,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] );