X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHUtils%2FSMESH_Delaunay.cxx;h=bc5576797f0ba94bb15c793d9bc249a7c8fa88dc;hp=2a2809cc98e75f5845c7fd26a295e56f039bf2eb;hb=a274ade365bd0f0e19d56c577acc4a13aa1972a7;hpb=bd7477efc255f965c479d88d1be1ee3dbf4aa760 diff --git a/src/SMESHUtils/SMESH_Delaunay.cxx b/src/SMESHUtils/SMESH_Delaunay.cxx index 2a2809cc9..bc5576797 100644 --- a/src/SMESHUtils/SMESH_Delaunay.cxx +++ b/src/SMESHUtils/SMESH_Delaunay.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2021 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 @@ -32,13 +32,14 @@ #include #include +#include + //================================================================================ /*! * \brief Construct a Delaunay triangulation of given boundary nodes * \param [in] boundaryNodes - vector of nodes of a wire * \param [in] face - the face * \param [in] faceID - the face ID - * \param [in] nbNodesToVisit - nb of non-marked nodes on the face */ //================================================================================ @@ -54,6 +55,8 @@ SMESH_Delaunay::SMESH_Delaunay(const std::vector< const UVPtStructVec* > & bound const int nbDiv = 100; const double uRange = surf.LastUParameter() - surf.FirstUParameter(); const double vRange = surf.LastVParameter() - surf.FirstVParameter(); + const double uFixed = surf.FirstUParameter() + 0.5 * uRange; + const double vFixed = surf.FirstVParameter() + 0.5 * vRange; const double dU = uRange / nbDiv; const double dV = vRange / nbDiv; double u = surf.FirstUParameter(), v = surf.FirstVParameter(); @@ -61,10 +64,10 @@ SMESH_Delaunay::SMESH_Delaunay(const std::vector< const UVPtStructVec* > & bound double lenU = 0, lenV = 0; for ( ; u < surf.LastUParameter(); u += dU, v += dV ) { - gp_Pnt p1U = surf.Value( u, surf.FirstVParameter() ); + gp_Pnt p1U = surf.Value( u, vFixed ); lenU += p1U.Distance( p0U ); p0U = p1U; - gp_Pnt p1V = surf.Value( surf.FirstUParameter(), v ); + gp_Pnt p1V = surf.Value( uFixed, v ); lenV += p1V.Distance( p0V ); p0V = p1V; } @@ -82,7 +85,11 @@ SMESH_Delaunay::SMESH_Delaunay(const std::vector< const UVPtStructVec* > & bound _bndNodes.resize( nbP ); // fill boundary points +#if OCC_VERSION_LARGE <= 0x07030000 BRepMesh::Array1OfVertexOfDelaun bndVert( 1, 1 + nbP ); +#else + IMeshData::Array1OfVertexOfDelaun bndVert( 1, 1 + nbP ); +#endif BRepMesh_Vertex v( 0, 0, BRepMesh_Frontier ); for ( size_t iW = 0; iW < boundaryNodes.size(); ++iW ) { @@ -218,7 +225,8 @@ const BRepMesh_Triangle* SMESH_Delaunay::FindTriangle( const gp_XY& gp_XY seg = uv - gc; tria->Edges( linkIDs, ori ); - int triaID = _triaDS->IndexOf( *tria ); + + const BRepMesh_Triangle* prevTria = tria; tria = 0; for ( int i = 0; i < 3; ++i ) @@ -241,7 +249,9 @@ const BRepMesh_Triangle* SMESH_Delaunay::FindTriangle( const gp_XY& double uSeg = ( uv1 - gc ) ^ lin / crossSegLin; if ( 0. <= uSeg && uSeg <= 1. ) { - tria = & _triaDS->GetElement( triIDs.Index( 1 + ( triIDs.Index(1) == triaID ))); + tria = & _triaDS->GetElement( triIDs.Index( 1 )); + if ( tria == prevTria ) + tria = & _triaDS->GetElement( triIDs.Index( 2 )); if ( tria->Movability() != BRepMesh_Deleted ) break; } @@ -260,10 +270,17 @@ const BRepMesh_Triangle* SMESH_Delaunay::FindTriangle( const gp_XY& const BRepMesh_Triangle* SMESH_Delaunay::GetTriangleNear( int iBndNode ) { + if ( iBndNode >= _triaDS->NbNodes() ) + return 0; int nodeIDs[3]; int nbNbNodes = _bndNodes.size(); - const BRepMesh::ListOfInteger & linkIds = _triaDS->LinksConnectedTo( iBndNode + 1 ); - BRepMesh::ListOfInteger::const_iterator iLink = linkIds.cbegin(); +#if OCC_VERSION_LARGE <= 0x07030000 + typedef BRepMesh::ListOfInteger TLinkList; +#else + typedef IMeshData::ListOfInteger TLinkList; +#endif + const TLinkList & linkIds = _triaDS->LinksConnectedTo( iBndNode + 1 ); + TLinkList::const_iterator iLink = linkIds.cbegin(); for ( ; iLink != linkIds.cend(); ++iLink ) { const BRepMesh_PairOfIndex & triaIds = _triaDS->ElementsConnectedTo( *iLink ); @@ -345,7 +362,7 @@ void SMESH_Delaunay::ToPython() const text << "import salome, SMESH\n"; text << "salome.salome_init()\n"; text << "from salome.smesh import smeshBuilder\n"; - text << "smesh = smeshBuilder.New(salome.myStudy)\n"; + text << "smesh = smeshBuilder.New()\n"; text << "mesh=smesh.Mesh()\n"; const char* endl = "\n"; @@ -370,5 +387,5 @@ void SMESH_Delaunay::ToPython() const file.remove(); file.openForWriting(); file.write( text.c_str(), text.size() ); - cout << "execfile( '" << fileName << "')" << endl; + std::cout << "exec(open('" << fileName << "', 'rb').read())"; }