From: skv Date: Wed, 13 Nov 2013 06:26:37 +0000 (+0000) Subject: 0022353: EDF GEOM: Projection on a edge or a wire X-Git-Tag: BR_hydro_v_0_3_1~29 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=2adadf979b69c2221cdbfdba8dcd3c4f8f398863;p=modules%2Fgeom.git 0022353: EDF GEOM: Projection on a edge or a wire --- diff --git a/src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx b/src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx index ebc0843ed..e8fa499b5 100644 --- a/src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx @@ -344,14 +344,36 @@ Standard_Integer GEOMImpl_ProjectionDriver::Execute(TFunction_Logbook& log) cons // Store the valid solution. hasValidSolution = Standard_True; + + // Normalize parameter. + TopoDS_Edge aSupportEdge = TopoDS::Edge(aSupportShape); + Standard_Real aF, aL; + + BRep_Tool::Range(aSupportEdge, aF, aL); + + if (Abs(aL - aF) <= aTolConf) { + Standard_ConstructionError::Raise + ("Projection aborted : degenerated projection edge"); + } + + aParam = (aParam - aF)/(aL - aF); aProj.SetU(aParam); // Compute edge index. - TopTools_IndexedMapOfShape anIndices; - TopExp::MapShapes(aShape, anIndices); - const int anIndex = anIndices.FindIndex(aSupportShape); + TopExp_Explorer anExp(aShape, TopAbs_EDGE); + int anIndex = 0; + + for (; anExp.More(); anExp.Next(), anIndex++) { + if (aSupportShape.IsSame(anExp.Current())) { + aProj.SetIndex(anIndex); + break; + } + } - aProj.SetIndex(anIndex); + if (!anExp.More()) { + Standard_ConstructionError::Raise + ("Projection aborted : Can't define edge index"); + } // Construct a projection vertex. const gp_Pnt &aPntProj = aDistShSh.PointOnShape2(i);