mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-10 18:51:21 +03:00
1. The procedures for check of coincidence between Edge-Edge and Edge-Face have been added. These methods are used instead of searching interferences between corresponding sub-shapes. In most cases (including case for this issue), new methods are more reliable and faster than intersections. However, its use should be avoided in case when the edge is not coincide with edge/face of another argument evidently (e.g. if edge vertices are not in another edge/face). 2. Interface of both IntTools_EdgeFace and IntTools_EdgeEdge has been changed (adding/deleted some field and methods). Some test cases have been corrected in accordance with their new behavior. Test case for issue CR26132.
213 lines
6.8 KiB
Plaintext
213 lines
6.8 KiB
Plaintext
// Created by: Eugeny MALTCHIKOV
|
|
// Copyright (c) 2013-2014 OPEN CASCADE SAS
|
|
//
|
|
// This file is part of Open CASCADE Technology software library.
|
|
//
|
|
// This library is free software; you can redistribute it and/or modify it under
|
|
// the terms of the GNU Lesser General Public License version 2.1 as published
|
|
// by the Free Software Foundation, with special exception defined in the file
|
|
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
|
|
// distribution for complete text of the license and disclaimer of any warranty.
|
|
//
|
|
// Alternatively, this file may be used under the terms of Open CASCADE
|
|
// commercial license or contractual agreement.
|
|
|
|
#include <Precision.hxx>
|
|
#include <BRep_Tool.hxx>
|
|
|
|
//=======================================================================
|
|
//function : IntTools_EdgeEdge
|
|
//purpose :
|
|
//=======================================================================
|
|
inline IntTools_EdgeEdge::IntTools_EdgeEdge()
|
|
:
|
|
myTol1(0.),
|
|
myTol2(0.),
|
|
myTol(0.),
|
|
myRes1(0.),
|
|
myRes2(0.),
|
|
myResCoeff1(0.),
|
|
myResCoeff2(0.),
|
|
myPTol1(0.),
|
|
myPTol2(0.),
|
|
myRange1(0., 0.),
|
|
myRange2(0., 0.),
|
|
mySwap(Standard_False),
|
|
myErrorStatus(0),
|
|
myQuickCoincidenceCheck(Standard_False)
|
|
{
|
|
}
|
|
//=======================================================================
|
|
//function : IntTools_EdgeEdge
|
|
//purpose :
|
|
//=======================================================================
|
|
inline IntTools_EdgeEdge::IntTools_EdgeEdge(const TopoDS_Edge& theEdge1,
|
|
const TopoDS_Edge& theEdge2)
|
|
:
|
|
myEdge1(theEdge1),
|
|
myEdge2(theEdge2),
|
|
myTol1(0.),
|
|
myTol2(0.),
|
|
myTol(0.),
|
|
myRes1(0.),
|
|
myRes2(0.),
|
|
myResCoeff1(0.),
|
|
myResCoeff2(0.),
|
|
myPTol1(0.),
|
|
myPTol2(0.),
|
|
myRange1(0., 0.),
|
|
myRange2(0., 0.),
|
|
mySwap(Standard_False),
|
|
myErrorStatus(0),
|
|
myQuickCoincidenceCheck(Standard_False)
|
|
{
|
|
}
|
|
//=======================================================================
|
|
//function : IntTools_EdgeEdge
|
|
//purpose :
|
|
//=======================================================================
|
|
inline IntTools_EdgeEdge::IntTools_EdgeEdge(const TopoDS_Edge& theEdge1,
|
|
const Standard_Real aT11,
|
|
const Standard_Real aT12,
|
|
const TopoDS_Edge& theEdge2,
|
|
const Standard_Real aT21,
|
|
const Standard_Real aT22)
|
|
:
|
|
myEdge1(theEdge1),
|
|
myEdge2(theEdge2),
|
|
myTol1(0.),
|
|
myTol2(0.),
|
|
myTol(0.),
|
|
myRes1(0.),
|
|
myRes2(0.),
|
|
myResCoeff1(0.),
|
|
myResCoeff2(0.),
|
|
myPTol1(0.),
|
|
myPTol2(0.),
|
|
myRange1(aT11, aT12),
|
|
myRange2(aT21, aT22),
|
|
mySwap(Standard_False),
|
|
myErrorStatus(0),
|
|
myQuickCoincidenceCheck(Standard_False)
|
|
{
|
|
}
|
|
//=======================================================================
|
|
//function : IntTools_EdgeEdge
|
|
//purpose :
|
|
//=======================================================================
|
|
inline IntTools_EdgeEdge::~IntTools_EdgeEdge()
|
|
{
|
|
}
|
|
//=======================================================================
|
|
//function : SetEdge1
|
|
//purpose :
|
|
//=======================================================================
|
|
inline void IntTools_EdgeEdge::SetEdge1(const TopoDS_Edge& theEdge)
|
|
{
|
|
myEdge1 = theEdge;
|
|
}
|
|
//=======================================================================
|
|
//function : SetRange1
|
|
//purpose :
|
|
//=======================================================================
|
|
inline void IntTools_EdgeEdge::SetRange1(const IntTools_Range& theRange)
|
|
{
|
|
myRange1 = theRange;
|
|
}
|
|
//=======================================================================
|
|
//function : SetRange1
|
|
//purpose :
|
|
//=======================================================================
|
|
inline void IntTools_EdgeEdge::SetRange1(const Standard_Real aT1,
|
|
const Standard_Real aT2)
|
|
{
|
|
myRange1.SetFirst(aT1);
|
|
myRange1.SetLast(aT2);
|
|
}
|
|
//=======================================================================
|
|
//function : SetEdge1
|
|
//purpose :
|
|
//=======================================================================
|
|
inline void IntTools_EdgeEdge::SetEdge1(const TopoDS_Edge& theEdge,
|
|
const Standard_Real aT1,
|
|
const Standard_Real aT2)
|
|
{
|
|
SetEdge1(theEdge);
|
|
SetRange1(aT1, aT2);
|
|
}
|
|
//=======================================================================
|
|
//function : SetEdge2
|
|
//purpose :
|
|
//=======================================================================
|
|
inline void IntTools_EdgeEdge::SetEdge2(const TopoDS_Edge& theEdge)
|
|
{
|
|
myEdge2 = theEdge;
|
|
}
|
|
//=======================================================================
|
|
//function : SetRange1
|
|
//purpose :
|
|
//=======================================================================
|
|
inline void IntTools_EdgeEdge::SetRange2(const IntTools_Range& theRange)
|
|
{
|
|
myRange2 = theRange;
|
|
}
|
|
//=======================================================================
|
|
//function : SetRange1
|
|
//purpose :
|
|
//=======================================================================
|
|
inline void IntTools_EdgeEdge::SetRange2(const Standard_Real aT1,
|
|
const Standard_Real aT2)
|
|
{
|
|
myRange2.SetFirst(aT1);
|
|
myRange2.SetLast(aT2);
|
|
}
|
|
//=======================================================================
|
|
//function : SetEdge1
|
|
//purpose :
|
|
//=======================================================================
|
|
inline void IntTools_EdgeEdge::SetEdge2(const TopoDS_Edge& theEdge,
|
|
const Standard_Real aT1,
|
|
const Standard_Real aT2)
|
|
{
|
|
SetEdge2(theEdge);
|
|
SetRange2(aT1, aT2);
|
|
}
|
|
//=======================================================================
|
|
//function : CommonParts
|
|
//purpose :
|
|
//=======================================================================
|
|
inline const IntTools_SequenceOfCommonPrts& IntTools_EdgeEdge::CommonParts() const
|
|
{
|
|
return myCommonParts;
|
|
}
|
|
//=======================================================================
|
|
//function : IsDone
|
|
//purpose :
|
|
//=======================================================================
|
|
inline Standard_Boolean IntTools_EdgeEdge::IsDone() const
|
|
{
|
|
return (myErrorStatus == 0);
|
|
}
|
|
//=======================================================================
|
|
//function : CheckData
|
|
//purpose :
|
|
//=======================================================================
|
|
inline void IntTools_EdgeEdge::CheckData()
|
|
{
|
|
if (myEdge1.IsNull() || myEdge2.IsNull()) {
|
|
myErrorStatus = 1;
|
|
return;
|
|
}
|
|
//
|
|
if (BRep_Tool::Degenerated(myEdge1) || BRep_Tool::Degenerated(myEdge2)) {
|
|
myErrorStatus = 2;
|
|
return;
|
|
}
|
|
//
|
|
if (!BRep_Tool::IsGeometric(myEdge1) || !BRep_Tool::IsGeometric(myEdge2)) {
|
|
myErrorStatus = 3;
|
|
return;
|
|
}
|
|
}
|
|
|