mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-21 10:13:43 +03:00
0024384: Wrong result obtained by Fuse
Changes: 1. class BOPTools - method: void BOPTools_AlgoTools::MakeVertex(BOPCol_ListOfShape& aLV, TopoDS_Vertex& aVnew) The function fsqrt that calculates the square root of a real number has been replaced by the standard sqrt. 2. class BOPAlgo_WireSplitter - static function: Standard_Real Angle2D (const TopoDS_Vertex& aV, const TopoDS_Edge& anEdge, const TopoDS_Face& myFace, const GeomAdaptor_Surface& aGAS, const Standard_Boolean aFlag) The value parametric deltas for computations of 2D-angles have been changed for Bezier, B-Spline 2D-curves.
This commit is contained in:
parent
de09d2a2a0
commit
4889b44e3e
@ -49,6 +49,7 @@
|
|||||||
#include <TopExp.hxx>
|
#include <TopExp.hxx>
|
||||||
#include <TopExp_Explorer.hxx>
|
#include <TopExp_Explorer.hxx>
|
||||||
#include <BOPTools_AlgoTools2D.hxx>
|
#include <BOPTools_AlgoTools2D.hxx>
|
||||||
|
#include <Geom2dAdaptor_Curve.hxx>
|
||||||
//
|
//
|
||||||
|
|
||||||
static
|
static
|
||||||
@ -739,7 +740,7 @@ Standard_Integer NbWaysOut(const BOPAlgo_ListOfEdgeInfo& aLEInfo)
|
|||||||
}
|
}
|
||||||
//
|
//
|
||||||
BOPTools_AlgoTools2D::CurveOnSurface (anEdge, myFace, aC2D,
|
BOPTools_AlgoTools2D::CurveOnSurface (anEdge, myFace, aC2D,
|
||||||
aFirst, aLast, aToler);
|
aFirst, aLast, aToler);
|
||||||
dt=2.*Tolerance2D(aV, aGAS);
|
dt=2.*Tolerance2D(aV, aGAS);
|
||||||
//
|
//
|
||||||
//for case chl/927/r9
|
//for case chl/927/r9
|
||||||
@ -753,6 +754,12 @@ Standard_Integer NbWaysOut(const BOPAlgo_ListOfEdgeInfo& aLEInfo)
|
|||||||
dt = aTX;
|
dt = aTX;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
|
GeomAbs_CurveType aType;
|
||||||
|
Geom2dAdaptor_Curve aGAC2D(aC2D);
|
||||||
|
aType=aGAC2D.GetType();
|
||||||
|
if (aType==GeomAbs_BSplineCurve || aType==GeomAbs_BezierCurve) {
|
||||||
|
dt=1.1*dt;
|
||||||
|
}
|
||||||
if (fabs (aTV-aFirst) < fabs(aTV - aLast)) {
|
if (fabs (aTV-aFirst) < fabs(aTV - aLast)) {
|
||||||
aTV1=aTV + dt;
|
aTV1=aTV + dt;
|
||||||
}
|
}
|
||||||
|
@ -76,8 +76,6 @@ static
|
|||||||
Standard_Real AngleWithRef(const gp_Dir& theD1,
|
Standard_Real AngleWithRef(const gp_Dir& theD1,
|
||||||
const gp_Dir& theD2,
|
const gp_Dir& theD2,
|
||||||
const gp_Dir& theDRef);
|
const gp_Dir& theDRef);
|
||||||
static
|
|
||||||
inline Standard_Real fsqrt(Standard_Real val);
|
|
||||||
|
|
||||||
static
|
static
|
||||||
Standard_Boolean FindFacePairs (const TopoDS_Edge& theE,
|
Standard_Boolean FindFacePairs (const TopoDS_Edge& theE,
|
||||||
@ -1480,7 +1478,7 @@ void BOPTools_AlgoTools::MakeVertex(BOPCol_ListOfShape& aLV,
|
|||||||
aPi=BRep_Tool::Pnt(aVi);
|
aPi=BRep_Tool::Pnt(aVi);
|
||||||
aTi=BRep_Tool::Tolerance(aVi);
|
aTi=BRep_Tool::Tolerance(aVi);
|
||||||
aDi=aP.SquareDistance(aPi);
|
aDi=aP.SquareDistance(aPi);
|
||||||
aDi=fsqrt(aDi);
|
aDi=sqrt(aDi);
|
||||||
aDi=aDi+aTi;
|
aDi=aDi+aTi;
|
||||||
if (aDi > aDmax) {
|
if (aDi > aDmax) {
|
||||||
aDmax=aDi;
|
aDmax=aDi;
|
||||||
@ -1644,26 +1642,6 @@ Standard_Real AngleWithRef(const gp_Dir& theD1,
|
|||||||
}
|
}
|
||||||
return aBeta;
|
return aBeta;
|
||||||
}
|
}
|
||||||
//=======================================================================
|
|
||||||
//function : fsqrt
|
|
||||||
//purpose :
|
|
||||||
//=======================================================================
|
|
||||||
Standard_Real fsqrt(Standard_Real val)
|
|
||||||
{
|
|
||||||
union {
|
|
||||||
int tmp;
|
|
||||||
float val;
|
|
||||||
} u;
|
|
||||||
//
|
|
||||||
u.val = (float)val;
|
|
||||||
u.tmp -= 1<<23; /* Remove last bit so 1.0 gives 1.0 */
|
|
||||||
/* tmp is now an approximation to logbase2(val) */
|
|
||||||
u.tmp >>= 1; /* divide by 2 */
|
|
||||||
u.tmp += 1<<29; /* add 64 to exponent: (e+127)/2 =(e/2)+63, */
|
|
||||||
/* that represents (e/2)-64 but we want e/2 */
|
|
||||||
return (double)u.val;
|
|
||||||
}
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
// function: IsBlockInOnFace
|
// function: IsBlockInOnFace
|
||||||
// purpose:
|
// purpose:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user