Salome HOME
projects
/
modules
/
shaper.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix for stable processing of mirror constraint (eliminating SolveSpace problems)
[modules/shaper.git]
/
src
/
GeomAPI
/
GeomAPI_Edge.cpp
diff --git
a/src/GeomAPI/GeomAPI_Edge.cpp
b/src/GeomAPI/GeomAPI_Edge.cpp
index d2d0248f29a880bccb33505b4145ed5cabc1c25d..4b758eb90da225df14b56d7a9cf0e3c519de3ec1 100644
(file)
--- a/
src/GeomAPI/GeomAPI_Edge.cpp
+++ b/
src/GeomAPI/GeomAPI_Edge.cpp
@@
-46,8
+46,12
@@
bool GeomAPI_Edge::isCircle() const
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);
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;
}
return false;
}
@@
-56,8
+60,12
@@
bool GeomAPI_Edge::isArc() const
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);
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;
}
return false;
}
@@
-100,11
+108,14
@@
std::shared_ptr<GeomAPI_Circ> GeomAPI_Edge::circle()
}
}
-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>();
{
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;
double aMyStart, aMyEnd;
Handle(Geom_Curve) aMyCurve = BRep_Tool::Curve(TopoDS::Edge(aMyShape), aMyStart, aMyEnd);
double aInStart, aInEnd;