mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-09 13:22:24 +03:00
0031805: Data Exchange, XT - Invalid shape on file translation
This commit is contained in:
@@ -90,6 +90,9 @@ public:
|
||||
|
||||
Standard_EXPORT void TolFixTangents (Standard_Real& aTolCheck, Standard_Real& aTolAngCheck);
|
||||
|
||||
//! Set angular tolerance
|
||||
Standard_EXPORT void SetAngularTolerance (Standard_Real theAngularTolerance);
|
||||
|
||||
//! converts RLine to Geom(2d)_Curve.
|
||||
Standard_EXPORT static void TreatRLine (const Handle(IntPatch_RLine)& theRL, const Handle(GeomAdaptor_Surface)& theHS1, const Handle(GeomAdaptor_Surface)& theHS2, Handle(Geom_Curve)& theC3d, Handle(Geom2d_Curve)& theC2d1, Handle(Geom2d_Curve)& theC2d2, Standard_Real& theTolReached);
|
||||
|
||||
|
@@ -146,3 +146,12 @@ inline GeomInt_IntSS::GeomInt_IntSS ()
|
||||
{
|
||||
return myIntersector.Point(Index).Value();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetAngularTolerance
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
inline void GeomInt_IntSS::SetAngularTolerance (Standard_Real theAngularTolerance)
|
||||
{
|
||||
myIntersector.SetAngularTolerance(theAngularTolerance);
|
||||
}
|
||||
|
@@ -254,24 +254,53 @@ gp_Ax2 DirToAx2(const gp_Pnt& P,const gp_Dir& D)
|
||||
//purpose : Empty constructor
|
||||
//=======================================================================
|
||||
IntAna_QuadQuadGeo::IntAna_QuadQuadGeo(void)
|
||||
: done(Standard_False),
|
||||
nbint(0),
|
||||
typeres(IntAna_Empty),
|
||||
pt1(0,0,0),
|
||||
pt2(0,0,0),
|
||||
pt3(0,0,0),
|
||||
pt4(0,0,0),
|
||||
param1(0),
|
||||
param2(0),
|
||||
param3(0),
|
||||
param4(0),
|
||||
param1bis(0),
|
||||
param2bis(0),
|
||||
myCommonGen(Standard_False),
|
||||
myPChar(0,0,0)
|
||||
: done(Standard_False),
|
||||
nbint(0),
|
||||
typeres(IntAna_Empty),
|
||||
pt1(0,0,0),
|
||||
pt2(0,0,0),
|
||||
pt3(0,0,0),
|
||||
pt4(0,0,0),
|
||||
param1(0),
|
||||
param2(0),
|
||||
param3(0),
|
||||
param4(0),
|
||||
param1bis(0),
|
||||
param2bis(0),
|
||||
myCommonGen(Standard_False),
|
||||
myPChar(0,0,0),
|
||||
myAngularTolerance(0.0),
|
||||
myUseAngularTolerance(Standard_False)
|
||||
{
|
||||
InitTolerances();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : IntAna_QuadQuadGeo
|
||||
//purpose : Constructor with angular tolerance
|
||||
//=======================================================================
|
||||
IntAna_QuadQuadGeo::IntAna_QuadQuadGeo(Standard_Real theAngularTolerance, Standard_Boolean theUseAngularTolerance)
|
||||
: done(Standard_False),
|
||||
nbint(0),
|
||||
typeres(IntAna_Empty),
|
||||
pt1(0,0,0),
|
||||
pt2(0,0,0),
|
||||
pt3(0,0,0),
|
||||
pt4(0,0,0),
|
||||
param1(0),
|
||||
param2(0),
|
||||
param3(0),
|
||||
param4(0),
|
||||
param1bis(0),
|
||||
param2bis(0),
|
||||
myCommonGen(Standard_False),
|
||||
myPChar(0,0,0),
|
||||
myAngularTolerance(theAngularTolerance),
|
||||
myUseAngularTolerance(theUseAngularTolerance)
|
||||
{
|
||||
InitTolerances();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : InitTolerances
|
||||
//purpose :
|
||||
@@ -279,12 +308,20 @@ IntAna_QuadQuadGeo::IntAna_QuadQuadGeo(void)
|
||||
void IntAna_QuadQuadGeo::InitTolerances()
|
||||
{
|
||||
myEPSILON_DISTANCE = 1.0e-14;
|
||||
myEPSILON_ANGLE_CONE = Precision::Angular();
|
||||
if (myUseAngularTolerance)
|
||||
{
|
||||
myEPSILON_ANGLE_CONE = myAngularTolerance;
|
||||
}
|
||||
else
|
||||
{
|
||||
myEPSILON_ANGLE_CONE = Precision::Angular();
|
||||
}
|
||||
myEPSILON_MINI_CIRCLE_RADIUS = 0.01*Precision::Confusion();
|
||||
myEPSILON_CYLINDER_DELTA_RADIUS = 1.0e-13;
|
||||
myEPSILON_CYLINDER_DELTA_DISTANCE= Precision::Confusion();
|
||||
myEPSILON_AXES_PARA = Precision::Angular();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : IntAna_QuadQuadGeo
|
||||
//purpose : Pln Pln
|
||||
@@ -307,7 +344,9 @@ IntAna_QuadQuadGeo::IntAna_QuadQuadGeo(const gp_Pln& P1,
|
||||
param1bis(0),
|
||||
param2bis(0),
|
||||
myCommonGen(Standard_False),
|
||||
myPChar(0,0,0)
|
||||
myPChar(0,0,0),
|
||||
myAngularTolerance(0.0),
|
||||
myUseAngularTolerance(Standard_False)
|
||||
{
|
||||
InitTolerances();
|
||||
Perform(P1,P2,TolAng,Tol);
|
||||
@@ -652,7 +691,9 @@ IntAna_QuadQuadGeo::IntAna_QuadQuadGeo( const gp_Pln& P
|
||||
param1bis(0),
|
||||
param2bis(0),
|
||||
myCommonGen(Standard_False),
|
||||
myPChar(0,0,0)
|
||||
myPChar(0,0,0),
|
||||
myAngularTolerance(0.0),
|
||||
myUseAngularTolerance(Standard_False)
|
||||
{
|
||||
InitTolerances();
|
||||
Perform(P,Co,Tolang,Tol);
|
||||
@@ -868,7 +909,9 @@ IntAna_QuadQuadGeo::IntAna_QuadQuadGeo(const gp_Pln& P,
|
||||
param1bis(0),
|
||||
param2bis(0),
|
||||
myCommonGen(Standard_False),
|
||||
myPChar(0,0,0)
|
||||
myPChar(0,0,0),
|
||||
myAngularTolerance(0.0),
|
||||
myUseAngularTolerance(Standard_False)
|
||||
{
|
||||
InitTolerances();
|
||||
Perform(P,S);
|
||||
@@ -937,7 +980,9 @@ IntAna_QuadQuadGeo::IntAna_QuadQuadGeo(const gp_Cylinder& Cyl1,
|
||||
param1bis(0),
|
||||
param2bis(0),
|
||||
myCommonGen(Standard_False),
|
||||
myPChar(0,0,0)
|
||||
myPChar(0,0,0),
|
||||
myAngularTolerance(0.0),
|
||||
myUseAngularTolerance(Standard_False)
|
||||
{
|
||||
InitTolerances();
|
||||
Perform(Cyl1,Cyl2,Tol);
|
||||
@@ -1222,7 +1267,9 @@ IntAna_QuadQuadGeo::IntAna_QuadQuadGeo(const gp_Cylinder& Cyl,
|
||||
param1bis(0),
|
||||
param2bis(0),
|
||||
myCommonGen(Standard_False),
|
||||
myPChar(0,0,0)
|
||||
myPChar(0,0,0),
|
||||
myAngularTolerance(0.0),
|
||||
myUseAngularTolerance(Standard_False)
|
||||
{
|
||||
InitTolerances();
|
||||
Perform(Cyl,Con,Tol);
|
||||
@@ -1278,7 +1325,9 @@ IntAna_QuadQuadGeo::IntAna_QuadQuadGeo(const gp_Cylinder& Cyl,
|
||||
param1bis(0),
|
||||
param2bis(0),
|
||||
myCommonGen(Standard_False),
|
||||
myPChar(0,0,0)
|
||||
myPChar(0,0,0),
|
||||
myAngularTolerance(0.0),
|
||||
myUseAngularTolerance(Standard_False)
|
||||
{
|
||||
InitTolerances();
|
||||
Perform(Cyl,Sph,Tol);
|
||||
@@ -1344,7 +1393,9 @@ IntAna_QuadQuadGeo::IntAna_QuadQuadGeo(const gp_Cylinder& Cyl,
|
||||
param1bis(0),
|
||||
param2bis(0),
|
||||
myCommonGen(Standard_False),
|
||||
myPChar(0,0,0)
|
||||
myPChar(0,0,0),
|
||||
myAngularTolerance(0.0),
|
||||
myUseAngularTolerance(Standard_False)
|
||||
{
|
||||
InitTolerances();
|
||||
Perform(Con1,Con2,Tol);
|
||||
@@ -1800,7 +1851,9 @@ IntAna_QuadQuadGeo::IntAna_QuadQuadGeo(const gp_Cylinder& Cyl,
|
||||
param1bis(0),
|
||||
param2bis(0),
|
||||
myCommonGen(Standard_False),
|
||||
myPChar(0,0,0)
|
||||
myPChar(0,0,0),
|
||||
myAngularTolerance(0.0),
|
||||
myUseAngularTolerance(Standard_False)
|
||||
{
|
||||
InitTolerances();
|
||||
Perform(Sph,Con,Tol);
|
||||
@@ -1912,7 +1965,9 @@ IntAna_QuadQuadGeo::IntAna_QuadQuadGeo(const gp_Cylinder& Cyl,
|
||||
param1bis(0),
|
||||
param2bis(0),
|
||||
myCommonGen(Standard_False),
|
||||
myPChar(0,0,0)
|
||||
myPChar(0,0,0),
|
||||
myAngularTolerance(0.0),
|
||||
myUseAngularTolerance(Standard_False)
|
||||
{
|
||||
InitTolerances();
|
||||
Perform(Sph1,Sph2,Tol);
|
||||
@@ -2026,7 +2081,9 @@ IntAna_QuadQuadGeo::IntAna_QuadQuadGeo(const gp_Pln& Pln,
|
||||
param1bis(0),
|
||||
param2bis(0),
|
||||
myCommonGen(Standard_False),
|
||||
myPChar(0,0,0)
|
||||
myPChar(0,0,0),
|
||||
myAngularTolerance(0.0),
|
||||
myUseAngularTolerance(Standard_False)
|
||||
{
|
||||
InitTolerances();
|
||||
Perform(Pln,Tor,Tol);
|
||||
@@ -2138,7 +2195,9 @@ IntAna_QuadQuadGeo::IntAna_QuadQuadGeo(const gp_Cylinder& Cyl,
|
||||
param1bis(0),
|
||||
param2bis(0),
|
||||
myCommonGen(Standard_False),
|
||||
myPChar(0,0,0)
|
||||
myPChar(0,0,0),
|
||||
myAngularTolerance(0.0),
|
||||
myUseAngularTolerance(Standard_False)
|
||||
{
|
||||
InitTolerances();
|
||||
Perform(Cyl,Tor,Tol);
|
||||
@@ -2221,7 +2280,9 @@ IntAna_QuadQuadGeo::IntAna_QuadQuadGeo(const gp_Cone& Con,
|
||||
param1bis(0),
|
||||
param2bis(0),
|
||||
myCommonGen(Standard_False),
|
||||
myPChar(0,0,0)
|
||||
myPChar(0,0,0),
|
||||
myAngularTolerance(0.0),
|
||||
myUseAngularTolerance(Standard_False)
|
||||
{
|
||||
InitTolerances();
|
||||
Perform(Con,Tor,Tol);
|
||||
@@ -2359,7 +2420,9 @@ IntAna_QuadQuadGeo::IntAna_QuadQuadGeo(const gp_Sphere& Sph,
|
||||
param1bis(0),
|
||||
param2bis(0),
|
||||
myCommonGen(Standard_False),
|
||||
myPChar(0,0,0)
|
||||
myPChar(0,0,0),
|
||||
myAngularTolerance(0.0),
|
||||
myUseAngularTolerance(Standard_False)
|
||||
{
|
||||
InitTolerances();
|
||||
Perform(Sph,Tor,Tol);
|
||||
@@ -2456,7 +2519,9 @@ IntAna_QuadQuadGeo::IntAna_QuadQuadGeo(const gp_Torus& Tor1,
|
||||
param1bis(0),
|
||||
param2bis(0),
|
||||
myCommonGen(Standard_False),
|
||||
myPChar(0,0,0)
|
||||
myPChar(0,0,0),
|
||||
myAngularTolerance(0.0),
|
||||
myUseAngularTolerance(Standard_False)
|
||||
{
|
||||
InitTolerances();
|
||||
Perform(Tor1,Tor2,Tol);
|
||||
@@ -2692,6 +2757,7 @@ const gp_Pnt& IntAna_QuadQuadGeo::PChar() const
|
||||
{
|
||||
return myPChar;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : RefineDir
|
||||
//purpose :
|
||||
|
@@ -61,6 +61,9 @@ public:
|
||||
//! Empty constructor.
|
||||
Standard_EXPORT IntAna_QuadQuadGeo();
|
||||
|
||||
//! Constructor with angular tolerance
|
||||
Standard_EXPORT IntAna_QuadQuadGeo(Standard_Real theAngularTolerance, Standard_Boolean theUseAngularTolerance);
|
||||
|
||||
//! Creates the intersection between two planes.
|
||||
//! TolAng is the angular tolerance used to determine
|
||||
//! if the planes are parallel.
|
||||
@@ -261,7 +264,8 @@ protected:
|
||||
Standard_Real myEPSILON_AXES_PARA;
|
||||
Standard_Boolean myCommonGen;
|
||||
gp_Pnt myPChar;
|
||||
|
||||
Standard_Real myAngularTolerance;
|
||||
Standard_Boolean myUseAngularTolerance;
|
||||
|
||||
private:
|
||||
|
||||
|
@@ -108,8 +108,8 @@ public:
|
||||
//! An exception is raised if Index<=0 or Index>NbLine.
|
||||
const Handle(IntPatch_Line)& Line (const Standard_Integer Index) const;
|
||||
|
||||
|
||||
|
||||
//! Sets the angular tolerance
|
||||
void SetAngularTolerance (Standard_Real theAngularTolerance);
|
||||
|
||||
protected:
|
||||
|
||||
@@ -128,7 +128,8 @@ private:
|
||||
IntPatch_SequenceOfPoint spnt;
|
||||
IntPatch_SequenceOfLine slin;
|
||||
IntPatch_TheSOnBounds solrst;
|
||||
|
||||
Standard_Real myAngularTolerance;
|
||||
Standard_Boolean myUseAngularTolerance;
|
||||
|
||||
};
|
||||
|
||||
|
@@ -71,3 +71,9 @@ inline const Handle(IntPatch_Line)& IntPatch_ImpImpIntersection::Line (const Sta
|
||||
if (!IsDone ()) { throw StdFail_NotDone(); }
|
||||
return slin(Index);
|
||||
}
|
||||
|
||||
inline void IntPatch_ImpImpIntersection::SetAngularTolerance (Standard_Real theAngularTolerance)
|
||||
{
|
||||
myAngularTolerance = theAngularTolerance;
|
||||
myUseAngularTolerance = Standard_True;
|
||||
}
|
||||
|
@@ -125,7 +125,9 @@ static Standard_Boolean IntCoCo(const IntSurf_Quadric&,
|
||||
Standard_Boolean&,
|
||||
Standard_Boolean&,
|
||||
IntPatch_SequenceOfLine&,
|
||||
IntPatch_SequenceOfPoint&);
|
||||
IntPatch_SequenceOfPoint&,
|
||||
Standard_Boolean theUseAngularTolerance = Standard_False,
|
||||
Standard_Real theAngularTolerance = 0.0);
|
||||
|
||||
//torus
|
||||
static Standard_Boolean IntPTo(const IntSurf_Quadric&,
|
||||
|
@@ -29,7 +29,8 @@ IntPatch_ImpImpIntersection::IntPatch_ImpImpIntersection ():
|
||||
myDone(IntStatus_Fail),
|
||||
empt(Standard_True),
|
||||
tgte(Standard_False),
|
||||
oppo(Standard_False)
|
||||
oppo(Standard_False),
|
||||
myUseAngularTolerance(Standard_False)
|
||||
{
|
||||
}
|
||||
//=======================================================================
|
||||
@@ -231,7 +232,7 @@ void IntPatch_ImpImpIntersection::Perform(const Handle(Adaptor3d_Surface)& S1,
|
||||
}
|
||||
//
|
||||
case 33: { // Cone/Cone
|
||||
if (!IntCoCo(quad1, quad2, TolTang, empt, SameSurf, multpoint, slin, spnt)) {
|
||||
if (!IntCoCo(quad1, quad2, TolTang, empt, SameSurf, multpoint, slin, spnt, myUseAngularTolerance, myAngularTolerance)) {
|
||||
return;
|
||||
}
|
||||
bEmpty = empt;
|
||||
|
@@ -27,7 +27,9 @@ Standard_Boolean IntCoCo(const IntSurf_Quadric& Quad1,
|
||||
Standard_Boolean& Same,
|
||||
Standard_Boolean& Multpoint,
|
||||
IntPatch_SequenceOfLine& slin,
|
||||
IntPatch_SequenceOfPoint& spnt)
|
||||
IntPatch_SequenceOfPoint& spnt,
|
||||
Standard_Boolean theUseAngularTolerance,
|
||||
Standard_Real theAngularTolerance)
|
||||
|
||||
{
|
||||
Standard_Integer i, NbSol;
|
||||
@@ -38,7 +40,8 @@ Standard_Boolean IntCoCo(const IntSurf_Quadric& Quad1,
|
||||
gp_Cone Co1(Quad1.Cone());
|
||||
gp_Cone Co2(Quad2.Cone());
|
||||
//
|
||||
IntAna_QuadQuadGeo inter(Co1,Co2,Tol);
|
||||
IntAna_QuadQuadGeo inter(theAngularTolerance, theUseAngularTolerance);
|
||||
inter.Perform(Co1,Co2,Tol);
|
||||
if (!inter.IsDone()) {
|
||||
return Standard_False;
|
||||
}
|
||||
|
@@ -53,7 +53,8 @@ IntPatch_Intersection::IntPatch_Intersection ()
|
||||
myU1Start(0.0),
|
||||
myV1Start(0.0),
|
||||
myU2Start(0.0),
|
||||
myV2Start(0.0)
|
||||
myV2Start(0.0),
|
||||
myUseAngularTolerance(Standard_False)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -76,7 +77,8 @@ IntPatch_Intersection::IntPatch_Intersection(const Handle(Adaptor3d_Surface)& S
|
||||
myU1Start(0.0),
|
||||
myV1Start(0.0),
|
||||
myU2Start(0.0),
|
||||
myV2Start(0.0)
|
||||
myV2Start(0.0),
|
||||
myUseAngularTolerance(Standard_False)
|
||||
{
|
||||
if(myTolArc<1e-8) myTolArc=1e-8;
|
||||
if(myTolTang<1e-8) myTolTang=1e-8;
|
||||
@@ -102,7 +104,8 @@ IntPatch_Intersection::IntPatch_Intersection(const Handle(Adaptor3d_Surface)& S
|
||||
myU1Start(0.0),
|
||||
myV1Start(0.0),
|
||||
myU2Start(0.0),
|
||||
myV2Start(0.0)
|
||||
myV2Start(0.0),
|
||||
myUseAngularTolerance(Standard_False)
|
||||
{
|
||||
Perform(S1,D1,TolArc,TolTang);
|
||||
}
|
||||
@@ -129,6 +132,12 @@ void IntPatch_Intersection::SetTolerances(const Standard_Real TolArc,
|
||||
if(myUVMaxStep>0.5) myUVMaxStep=0.5;
|
||||
}
|
||||
|
||||
void IntPatch_Intersection::SetAngularTolerance (Standard_Real theAngularTolerance)
|
||||
{
|
||||
myAngularTolerance = theAngularTolerance;
|
||||
myUseAngularTolerance = Standard_True;
|
||||
}
|
||||
|
||||
//======================================================================
|
||||
// function: Perform
|
||||
//======================================================================
|
||||
@@ -1354,8 +1363,13 @@ void IntPatch_Intersection::GeomGeomPerfom(const Handle(Adaptor3d_Surface)& theS
|
||||
const GeomAbs_SurfaceType theTyps2,
|
||||
const Standard_Boolean theIsReqToKeepRLine)
|
||||
{
|
||||
IntPatch_ImpImpIntersection interii(theS1,theD1,theS2,theD2,
|
||||
myTolArc,myTolTang, theIsReqToKeepRLine);
|
||||
IntPatch_ImpImpIntersection interii;
|
||||
|
||||
if (myUseAngularTolerance)
|
||||
{
|
||||
interii.SetAngularTolerance(myAngularTolerance);
|
||||
}
|
||||
interii.Perform(theS1, theD1, theS2, theD2, myTolArc, myTolTang, theIsReqToKeepRLine);
|
||||
|
||||
if (!interii.IsDone())
|
||||
{
|
||||
|
@@ -62,6 +62,8 @@ public:
|
||||
//! points in their respective parametric spaces.
|
||||
Standard_EXPORT void SetTolerances (const Standard_Real TolArc, const Standard_Real TolTang, const Standard_Real UVMaxStep, const Standard_Real Fleche);
|
||||
|
||||
Standard_EXPORT void SetAngularTolerance (Standard_Real theAngularTolerance);
|
||||
|
||||
//! Flag theIsReqToKeepRLine has been entered only for
|
||||
//! compatibility with TopOpeBRep package. It shall be deleted
|
||||
//! after deleting TopOpeBRep.
|
||||
@@ -197,7 +199,8 @@ private:
|
||||
Standard_Real myV1Start;
|
||||
Standard_Real myU2Start;
|
||||
Standard_Real myV2Start;
|
||||
|
||||
Standard_Real myAngularTolerance;
|
||||
Standard_Boolean myUseAngularTolerance;
|
||||
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user