const TopoDS_Shape& aShape = const_cast<GeomAPI_Edge*>(this)->impl<TopoDS_Shape>();
double aFirst, aLast;
Handle(Geom_Curve) aCurve = BRep_Tool::Curve((const TopoDS_Edge&)aShape, aFirst, aLast);
- if (aCurve->IsKind(STANDARD_TYPE(Geom_Circle)) && aCurve->IsClosed())
- return true;
+ if (aCurve->IsKind(STANDARD_TYPE(Geom_Circle)))
+ {
+ // Check the difference of first and last parameters to be equal to the curve period
+ if (Abs(aLast - aFirst - aCurve->Period()) < Precision::PConfusion())
+ return true;
+ }
return false;
}
const TopoDS_Shape& aShape = const_cast<GeomAPI_Edge*>(this)->impl<TopoDS_Shape>();
double aFirst, aLast;
Handle(Geom_Curve) aCurve = BRep_Tool::Curve((const TopoDS_Edge&)aShape, aFirst, aLast);
- if (aCurve->IsKind(STANDARD_TYPE(Geom_Circle)) && !aCurve->IsClosed())
- return true;
+ if (aCurve->IsKind(STANDARD_TYPE(Geom_Circle)))
+ {
+ // Check the difference of first and last parameters is not equal the curve period
+ if (Abs(aLast - aFirst - aCurve->Period()) >= Precision::PConfusion())
+ return true;
+ }
return false;
}
}
-bool GeomAPI_Edge::isEqual(std::shared_ptr<GeomAPI_Shape> theEdge)
+bool GeomAPI_Edge::isEqual(const std::shared_ptr<GeomAPI_Shape> theEdge) const
{
const TopoDS_Shape& aMyShape = const_cast<GeomAPI_Edge*>(this)->impl<TopoDS_Shape>();
const TopoDS_Shape& aInShape = theEdge->impl<TopoDS_Shape>();
-
+
+ if (aMyShape.ShapeType() != aInShape.ShapeType())
+ return false;
+
double aMyStart, aMyEnd;
Handle(Geom_Curve) aMyCurve = BRep_Tool::Curve(TopoDS::Edge(aMyShape), aMyStart, aMyEnd);
double aInStart, aInEnd;