X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FStdMeshers%2FStdMeshers_Projection_2D.cxx;h=fed12f5a5d8c0e03cec39371e51595f7aaf55a9e;hb=a17b36970bc61da1d664453c615754997c925b18;hp=87572c18f40434ceaa3e70cdc6b57de13e21dd5b;hpb=193c49c87753b6ccabb2b5e6dc935aa480d2d43e;p=modules%2Fsmesh.git diff --git a/src/StdMeshers/StdMeshers_Projection_2D.cxx b/src/StdMeshers/StdMeshers_Projection_2D.cxx index 87572c18f..fed12f5a5 100644 --- a/src/StdMeshers/StdMeshers_Projection_2D.cxx +++ b/src/StdMeshers/StdMeshers_Projection_2D.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 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 @@ -423,15 +423,13 @@ namespace { TAssocTool::TNodeNodeMap& src2tgtNodes, bool& is1DComputed) { - SMESHDS_Mesh* tgtMeshDS = tgtMesh->GetMeshDS(); - SMESHDS_Mesh* srcMeshDS = srcMesh->GetMeshDS(); - src2tgtNodes.clear(); // get ordered src EDGEs TError err; srcWires = StdMeshers_FaceSide::GetFaceWires( srcFace, *srcMesh,/*skipMediumNodes=*/0, err); - if ( err && !err->IsOK() || srcWires.empty() ) + if (( err && !err->IsOK() ) || + ( srcWires.empty() )) return err; SMESH_MesherHelper srcHelper( *srcMesh ); @@ -591,7 +589,7 @@ namespace { const double minSegLen = srcWires[iW]->Length() / totNbSeg; for ( int iE = 0; iE < srcWires[iW]->NbEdges(); ++iE ) { - int nbSeg = Max( 1, int( srcWires[iW]->EdgeLength( iE ) / minSegLen )); + size_t nbSeg = Max( 1, int( srcWires[iW]->EdgeLength( iE ) / minSegLen )); double srcU = srcWires[iW]->FirstParameter( iE ); double tgtU = tgtWires[iW]->FirstParameter( iE ); double srcDu = ( srcWires[iW]->LastParameter( iE )- srcU ) / nbSeg; @@ -823,14 +821,14 @@ namespace { // find trsf const int totNbSeg = 50; vector< gp_XY > srcPnts, tgtPnts; - srcPnts.resize( totNbSeg ); - tgtPnts.resize( totNbSeg ); + srcPnts.reserve( totNbSeg ); + tgtPnts.reserve( totNbSeg ); for ( size_t iW = 0; iW < srcWires.size(); ++iW ) { const double minSegLen = srcWires[iW]->Length() / totNbSeg; for ( int iE = 0; iE < srcWires[iW]->NbEdges(); ++iE ) { - int nbSeg = Max( 1, int( srcWires[iW]->EdgeLength( iE ) / minSegLen )); + size_t nbSeg = Max( 1, int( srcWires[iW]->EdgeLength( iE ) / minSegLen )); double srcU = srcWires[iW]->FirstParameter( iE ); double tgtU = tgtWires[iW]->FirstParameter( iE ); double srcDu = ( srcWires[iW]->LastParameter( iE )- srcU ) / nbSeg; @@ -920,6 +918,7 @@ namespace { tgtMeshDS->SetNodeOnVertex( n, TopoDS::Vertex( tgtV )); break; } + default:; } srcN_tgtN->second = n; } @@ -952,7 +951,7 @@ namespace { { SMESH_Mesh * tgtMesh = tgtWires[0]->GetMesh(); SMESH_Mesh * srcMesh = srcWires[0]->GetMesh(); - SMESHDS_Mesh * tgtMeshDS = tgtMesh->GetMeshDS(); + //SMESHDS_Mesh * tgtMeshDS = tgtMesh->GetMeshDS(); SMESHDS_Mesh * srcMeshDS = srcMesh->GetMeshDS(); if ( srcWires[0]->NbEdges() != 4 ) @@ -1393,10 +1392,19 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& } } } - else if ( nbEdgesInWires.front() == 1 ) + else if ( nbEdgesInWires.front() == 1 ) // a sole edge in a wire { - // TODO::Compare orientation of curves in a sole edge - //RETURN_BAD_RESULT("Not implemented case"); + TopoDS_Edge srcE1 = srcEdges.front(), tgtE1 = tgtEdges.front(); + for ( size_t iW = 0; iW < srcWires.size(); ++iW ) + { + StdMeshers_FaceSidePtr srcWire = srcWires[iW]; + for ( int iE = 0; iE < srcWire->NbEdges(); ++iE ) + if ( srcE1.IsSame( srcWire->Edge( iE ))) + { + reverse = ( tgtE1.Orientation() != tgtWires[iW]->Edge( iE ).Orientation() ); + break; + } + } } else {