]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
0021036: EDF 1633 GEOM: A degenerated edge is created in Fillet_1D
authorvsr <vsr@opencascade.com>
Tue, 19 Oct 2010 14:00:27 +0000 (14:00 +0000)
committervsr <vsr@opencascade.com>
Tue, 19 Oct 2010 14:00:27 +0000 (14:00 +0000)
src/GEOMImpl/GEOMImpl_Fillet1d.cxx
src/GEOMImpl/GEOMImpl_Fillet1dDriver.cxx

index 0a3af9f8b2cc52d14723fb3f42cd755b1c3de07a..cafc9bd78422a5fa842d985cd9118e6e08b30be1 100644 (file)
@@ -504,18 +504,15 @@ TopoDS_Edge GEOMImpl_Fillet1d::Result(const gp_Pnt& thePoint,
   else
     anEnd = aNearest->GetParam();
 
-  //Check the case when start and end are identical. This happens
-  //when the edge decreases to size 0. Old ww5 allows such
-  //cases. So we are again bug compatible
-  if (fabs(aStart - anEnd) < Precision::PConfusion()/*gp::Resolution()*/)
-    anEnd = 0.01;
-  //Divide edge
-  BRepBuilderAPI_MakeEdge aDivider1(aCurve, aStart, anEnd);
-  if (myEdgesExchnged) 
-    theEdge2 = aDivider1.Edge();
-  else 
-    theEdge1 = aDivider1.Edge();
-
+  if (fabs(aStart - anEnd) > Precision::Confusion())
+  {
+      //Divide edge
+      BRepBuilderAPI_MakeEdge aDivider1(aCurve, aStart, anEnd);
+      if (myEdgesExchnged) 
+        theEdge2 = aDivider1.Edge();
+      else 
+        theEdge1 = aDivider1.Edge();
+  }
 
   aCurve = BRep_Tool::Curve(myEdge2, aStart, anEnd);
   aCurve->D1(aNearest->GetParam2(), aPoint2, aDir);
@@ -526,16 +523,14 @@ TopoDS_Edge GEOMImpl_Fillet1d::Result(const gp_Pnt& thePoint,
   else
     anEnd = aNearest->GetParam2();
 
-  //Check the case when start and end are identical. This happens
-  //when the edge decreases to size 0. Old ww5 allows such
-  //cases. So we are again bug compatible
-  if (fabs(aStart - anEnd) < Precision::PConfusion()/*gp::Resolution()*/)
-    anEnd = 0.01;
-  BRepBuilderAPI_MakeEdge aDivider2(aCurve, aStart, anEnd);
-  if (myEdgesExchnged) 
-    theEdge1 = aDivider2.Edge();
-  else 
-    theEdge2 = aDivider2.Edge();
+  if (fabs(aStart - anEnd) > Precision::Confusion())
+  {
+      BRepBuilderAPI_MakeEdge aDivider2(aCurve, aStart, anEnd);
+      if (myEdgesExchnged) 
+        theEdge1 = aDivider2.Edge();
+      else 
+        theEdge2 = aDivider2.Edge();
+  }
 
   delete aNearest;
   return aResult;
index 1056f0108e418c9c3bf6514abd67edf6d13bf71e..d173fba61a057e80af79b55e0c12bd60e4c82059 100644 (file)
@@ -235,9 +235,9 @@ Standard_Integer GEOMImpl_Fillet1dDriver::Execute(TFunction_Logbook& log) const
     
     // check if face edges modified,
     // if yes, than map to original edges (from vertex-edges list), because edges can be modified before
-    if (!aModifE1.IsNull() && !aModifE1.IsSame( anEdge1 ))
+    if (aModifE1.IsNull() || !anEdge1.IsSame( aModifE1 ))
       addEdgeRelation( anEdgeToEdgeMap, TopoDS::Edge(aVertexEdges.First()), aModifE1 );
-    if (!aModifE2.IsNull() && !aModifE2.IsSame( anEdge2 ))
+    if (aModifE2.IsNull() || !anEdge2.IsSame( aModifE2 ))
       addEdgeRelation( anEdgeToEdgeMap, TopoDS::Edge(aVertexEdges.Last()), aModifE2 );
   }
 
@@ -251,7 +251,7 @@ Standard_Integer GEOMImpl_Fillet1dDriver::Execute(TFunction_Logbook& log) const
     TopoDS_Shape anEdge = anExp.Current(); 
     if ( !anEdgeToEdgeMap.IsBound( anEdge ) )
       aListOfNewEdge.Append( anEdge );
-    else
+    else if (!anEdgeToEdgeMap.Find( anEdge ).IsNull())
       aListOfNewEdge.Append( anEdgeToEdgeMap.Find( anEdge ) );
   }