TopoDS_Edge UnionEdges;
};
-static Standard_Boolean IsLikeSeam(const TopoDS_Edge& anEdge,
- const TopoDS_Face& aFace,
- const Handle(Geom_Surface)& aBaseSurface)
-{
- if (!aBaseSurface->IsUPeriodic() && !aBaseSurface->IsVPeriodic())
- return Standard_False;
-
- BRepAdaptor_Curve2d BAcurve2d(anEdge, aFace);
- gp_Pnt2d FirstPoint, LastPoint;
- gp_Vec2d FirstDir, LastDir;
- BAcurve2d.D1(BAcurve2d.FirstParameter(), FirstPoint, FirstDir);
- BAcurve2d.D1(BAcurve2d.LastParameter(), LastPoint, LastDir);
- Standard_Real Length = FirstDir.Magnitude();
- if (Length <= gp::Resolution())
- return Standard_False;
- else
- FirstDir /= Length;
- Length = LastDir.Magnitude();
- if (Length <= gp::Resolution())
- return Standard_False;
- else
- LastDir /= Length;
-
- Standard_Real Tol = 1.e-7;
- if (aBaseSurface->IsUPeriodic() &&
- (Abs(FirstDir.X()) < Tol) &&
- (Abs(LastDir.X()) < Tol))
- return Standard_True;
-
- if (aBaseSurface->IsVPeriodic() &&
- (Abs(FirstDir.Y()) < Tol) &&
- (Abs(LastDir.Y()) < Tol))
- return Standard_True;
-
- return Standard_False;
-}
-
//=======================================================================
//function : AddOrdinaryEdges
//purpose : auxilary
//
if (IsSameDomain(aFace,anCheckedFace, myLinTol, myAngTol)) {
- // hotfix for 27271: prevent merging along periodic direction.
- if (IsLikeSeam(edge, anCheckedFace, aBaseSurface))
- continue;
-
if (AddOrdinaryEdges(edges,anCheckedFace,dummy)) {
// sequence edges is modified
i = dummy;