1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-09-13 14:27:08 +03:00

0029972: Intersection curve has a weird gap in the middle of it

1. The condition of WLine breaking (in IntWalk_IWalking algorithm) has become more independent of the input tolerance.

2. Currently the algorithm of IntPatch_Points of WLine processing depends on the algorithm of obtaining the WLine.

3. The methods IntSurf_LineOn2S::Add(...) and IntSurf_LineOn2S::SetUV(...) have become not inline (see the message ~0077431 in the issue #29866).
This commit is contained in:
nbv
2018-07-23 14:00:16 +03:00
committed by bugmaster
parent 06a505ba53
commit 98974dccef
34 changed files with 828 additions and 160 deletions

View File

@@ -171,3 +171,46 @@ Standard_Boolean IntSurf_LineOn2S::IsOutSurf2Box(const gp_Pnt2d& P2uv)
return(out);
}
//=======================================================================
//function : Add
//purpose :
//=======================================================================
void IntSurf_LineOn2S::Add(const IntSurf_PntOn2S& P)
{
mySeq.Append(P);
if (!myBxyz.IsWhole())
{
myBxyz.Add(P.Value());
}
if (!myBuv1.IsWhole())
{
myBuv1.Add(P.ValueOnSurface(Standard_True));
}
if (!myBuv2.IsWhole())
{
myBuv2.Add(P.ValueOnSurface(Standard_False));
}
}
//=======================================================================
//function : SetUV
//purpose :
//=======================================================================
void IntSurf_LineOn2S::SetUV(const Standard_Integer Index,
const Standard_Boolean OnFirst,
const Standard_Real U,
const Standard_Real V)
{
mySeq(Index).SetValue(OnFirst, U, V);
if (OnFirst && !myBuv1.IsWhole())
{
myBuv1.Add(gp_Pnt2d(U, V));
}
else if (!OnFirst && !myBuv2.IsWhole())
{
myBuv2.Add(gp_Pnt2d(U, V));
}
}

View File

@@ -45,7 +45,7 @@ public:
Standard_EXPORT IntSurf_LineOn2S(const IntSurf_Allocator& theAllocator = 0);
//! Adds a point in the line.
void Add (const IntSurf_PntOn2S& P);
Standard_EXPORT void Add(const IntSurf_PntOn2S& P);
//! Returns the number of points in the line.
Standard_Integer NbPoints() const;
@@ -65,7 +65,7 @@ public:
//! Sets the parametric coordinates on one of the surfaces
//! of the point of range Index in the line.
void SetUV (const Standard_Integer Index, const Standard_Boolean OnFirst, const Standard_Real U, const Standard_Real V);
Standard_EXPORT void SetUV(const Standard_Integer Index, const Standard_Boolean OnFirst, const Standard_Real U, const Standard_Real V);
void Clear();

View File

@@ -14,28 +14,6 @@
#include <IntSurf_PntOn2S.hxx>
inline void IntSurf_LineOn2S::Add(const IntSurf_PntOn2S& P) {
mySeq.Append(P);
if (!myBxyz.IsWhole())
{
myBxyz.Add(P.Value());
}
if (!myBuv1.IsWhole())
{
myBuv1.Add(P.ValueOnSurface(Standard_True));
}
if (!myBuv2.IsWhole())
{
myBuv2.Add(P.ValueOnSurface(Standard_False));
}
}
inline Standard_Integer IntSurf_LineOn2S::NbPoints() const {
return mySeq.Length();
@@ -60,23 +38,6 @@ inline void IntSurf_LineOn2S::Value(const Standard_Integer Index,
mySeq(Index) = P;
}
inline void IntSurf_LineOn2S::SetUV(const Standard_Integer Index,
const Standard_Boolean OnFirst,
const Standard_Real U,
const Standard_Real V)
{
mySeq(Index).SetValue(OnFirst,U,V);
if (OnFirst && !myBuv1.IsWhole())
{
myBuv1.Add(gp_Pnt2d(U,V));
}
else if (!OnFirst && !myBuv2.IsWhole())
{
myBuv2.Add(gp_Pnt2d(U,V));
}
}
inline void IntSurf_LineOn2S::Clear ()
{
mySeq.Clear();