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:
@@ -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));
|
||||
}
|
||||
}
|
||||
|
@@ -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();
|
||||
|
||||
|
@@ -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();
|
||||
|
Reference in New Issue
Block a user