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

0026252: GeomAdaptor_Surface should use inner adaptor to calculate values of complex surfaces

* Implement GeomEvaluator package
* Inject evaluators to GeomAdaptor_Surface to calculate values of complex surfaces
* Inject evaluators to Geom_Surface classes to calculate values for offset surfaces, surfaces of revolution and surfaces of extrusion
* Move Adaptor3d_SurfaceOfLinearExtrusion and Adaptor3d_SurfaceOfRevolution to GeomAdaptor and unify calculation of their values and derivatives
* Code optimizations
* Update test cases

Update of test-cases according to the new behavior
This commit is contained in:
azv
2015-11-16 15:48:07 +03:00
committed by bugmaster
parent 6e4dfbecee
commit 6b84c3f7db
57 changed files with 2202 additions and 3279 deletions

View File

@@ -33,7 +33,7 @@
#include <gp_Vec.hxx>
#include <math_FunctionSetRoot.hxx>
#include <math_Vector.hxx>
#include <Adaptor3d_HSurfaceOfLinearExtrusion.hxx>
#include <GeomAdaptor_HSurfaceOfLinearExtrusion.hxx>
static gp_Ax2 GetPosition (const Handle(Adaptor3d_HCurve)& C);
@@ -158,7 +158,7 @@ Extrema_ExtPExtS::Extrema_ExtPExtS()
//=============================================================================
Extrema_ExtPExtS::Extrema_ExtPExtS (const gp_Pnt& theP,
const Handle(Adaptor3d_HSurfaceOfLinearExtrusion)& theS,
const Handle(GeomAdaptor_HSurfaceOfLinearExtrusion)& theS,
const Standard_Real theUmin,
const Standard_Real theUsup,
const Standard_Real theVmin,
@@ -189,7 +189,7 @@ Extrema_ExtPExtS::Extrema_ExtPExtS (const gp_Pnt&
//=============================================================================
Extrema_ExtPExtS::Extrema_ExtPExtS (const gp_Pnt& theP,
const Handle(Adaptor3d_HSurfaceOfLinearExtrusion)& theS,
const Handle(GeomAdaptor_HSurfaceOfLinearExtrusion)& theS,
const Standard_Real theTolU,
const Standard_Real theTolV)
: myuinf(theS->FirstUParameter()),
@@ -219,7 +219,7 @@ Extrema_ExtPExtS::Extrema_ExtPExtS (const gp_Pnt&
//purpose :
//=======================================================================
void Extrema_ExtPExtS::Initialize (const Handle(Adaptor3d_HSurfaceOfLinearExtrusion)& theS,
void Extrema_ExtPExtS::Initialize (const Handle(GeomAdaptor_HSurfaceOfLinearExtrusion)& theS,
const Standard_Real theUinf,
const Standard_Real theUsup,
const Standard_Real theVinf,

View File

@@ -30,7 +30,7 @@
#include <Extrema_POnSurf.hxx>
#include <Standard_Transient.hxx>
class Adaptor3d_HCurve;
class Adaptor3d_HSurfaceOfLinearExtrusion;
class GeomAdaptor_HSurfaceOfLinearExtrusion;
class StdFail_NotDone;
class Standard_OutOfRange;
class gp_Pnt;
@@ -54,14 +54,14 @@ public:
//! It calculates all the distances between a point
//! from gp and a Surface.
Standard_EXPORT Extrema_ExtPExtS(const gp_Pnt& P, const Handle(Adaptor3d_HSurfaceOfLinearExtrusion)& S, const Standard_Real Umin, const Standard_Real Usup, const Standard_Real Vmin, const Standard_Real Vsup, const Standard_Real TolU, const Standard_Real TolV);
Standard_EXPORT Extrema_ExtPExtS(const gp_Pnt& P, const Handle(GeomAdaptor_HSurfaceOfLinearExtrusion)& S, const Standard_Real Umin, const Standard_Real Usup, const Standard_Real Vmin, const Standard_Real Vsup, const Standard_Real TolU, const Standard_Real TolV);
//! It calculates all the distances between a point
//! from gp and a Surface.
Standard_EXPORT Extrema_ExtPExtS(const gp_Pnt& P, const Handle(Adaptor3d_HSurfaceOfLinearExtrusion)& S, const Standard_Real TolU, const Standard_Real TolV);
Standard_EXPORT Extrema_ExtPExtS(const gp_Pnt& P, const Handle(GeomAdaptor_HSurfaceOfLinearExtrusion)& S, const Standard_Real TolU, const Standard_Real TolV);
//! Initializes the fields of the algorithm.
Standard_EXPORT void Initialize (const Handle(Adaptor3d_HSurfaceOfLinearExtrusion)& S, const Standard_Real Uinf, const Standard_Real Usup, const Standard_Real Vinf, const Standard_Real Vsup, const Standard_Real TolU, const Standard_Real TolV);
Standard_EXPORT void Initialize (const Handle(GeomAdaptor_HSurfaceOfLinearExtrusion)& S, const Standard_Real Uinf, const Standard_Real Usup, const Standard_Real Vinf, const Standard_Real Vsup, const Standard_Real TolU, const Standard_Real TolV);
Standard_EXPORT void Perform (const gp_Pnt& P);
@@ -100,7 +100,7 @@ private:
Standard_Real mytolv;
Extrema_FuncExtPS myF;
Handle(Adaptor3d_HCurve) myC;
Handle(Adaptor3d_HSurfaceOfLinearExtrusion) myS;
Handle(GeomAdaptor_HSurfaceOfLinearExtrusion) myS;
gp_Vec myDirection;
gp_Ax2 myPosition;
Extrema_GenExtPS myExtPS;

View File

@@ -16,7 +16,7 @@
#include <Adaptor3d_HCurve.hxx>
#include <Adaptor3d_HSurfaceOfRevolution.hxx>
#include <GeomAdaptor_HSurfaceOfRevolution.hxx>
#include <ElCLib.hxx>
#include <Extrema_ExtPElC.hxx>
#include <Extrema_ExtPRevS.hxx>
@@ -35,7 +35,7 @@
#include <Standard_Type.hxx>
#include <StdFail_NotDone.hxx>
static gp_Ax2 GetPosition (const Adaptor3d_SurfaceOfRevolution& S)//const Handle(Adaptor_HCurve)& C)
static gp_Ax2 GetPosition (const GeomAdaptor_SurfaceOfRevolution& S)//const Handle(Adaptor_HCurve)& C)
{
Handle(Adaptor3d_HCurve) C = S.BasisCurve();
@@ -76,7 +76,7 @@ static gp_Ax2 GetPosition (const Adaptor3d_SurfaceOfRevolution& S)//const Handle
//purpose :
//=======================================================================
static Standard_Boolean HasSingularity(const Adaptor3d_SurfaceOfRevolution& S)
static Standard_Boolean HasSingularity(const GeomAdaptor_SurfaceOfRevolution& S)
{
const Handle(Adaptor3d_HCurve) C = S.BasisCurve();
@@ -216,7 +216,7 @@ Extrema_ExtPRevS::Extrema_ExtPRevS()
//=======================================================================
Extrema_ExtPRevS::Extrema_ExtPRevS (const gp_Pnt& theP,
const Handle(Adaptor3d_HSurfaceOfRevolution)& theS,
const Handle(GeomAdaptor_HSurfaceOfRevolution)& theS,
const Standard_Real theUmin,
const Standard_Real theUsup,
const Standard_Real theVmin,
@@ -240,7 +240,7 @@ Extrema_ExtPRevS::Extrema_ExtPRevS (const gp_Pnt&
//=======================================================================
Extrema_ExtPRevS::Extrema_ExtPRevS (const gp_Pnt& theP,
const Handle(Adaptor3d_HSurfaceOfRevolution)& theS,
const Handle(GeomAdaptor_HSurfaceOfRevolution)& theS,
const Standard_Real theTolU,
const Standard_Real theTolV)
{
@@ -259,7 +259,7 @@ Extrema_ExtPRevS::Extrema_ExtPRevS (const gp_Pnt&
//purpose :
//=======================================================================
void Extrema_ExtPRevS::Initialize (const Handle(Adaptor3d_HSurfaceOfRevolution)& theS,
void Extrema_ExtPRevS::Initialize (const Handle(GeomAdaptor_HSurfaceOfRevolution)& theS,
const Standard_Real theUmin,
const Standard_Real theUsup,
const Standard_Real theVmin,

View File

@@ -27,7 +27,7 @@
#include <Standard_Integer.hxx>
#include <Extrema_POnSurf.hxx>
#include <Standard_Transient.hxx>
class Adaptor3d_HSurfaceOfRevolution;
class GeomAdaptor_HSurfaceOfRevolution;
class StdFail_NotDone;
class Standard_OutOfRange;
class gp_Pnt;
@@ -50,13 +50,13 @@ public:
//! It calculates all the distances between a point
//! from gp and a SurfacePtr from Adaptor3d.
Standard_EXPORT Extrema_ExtPRevS(const gp_Pnt& P, const Handle(Adaptor3d_HSurfaceOfRevolution)& S, const Standard_Real Umin, const Standard_Real Usup, const Standard_Real Vmin, const Standard_Real Vsup, const Standard_Real TolU, const Standard_Real TolV);
Standard_EXPORT Extrema_ExtPRevS(const gp_Pnt& P, const Handle(GeomAdaptor_HSurfaceOfRevolution)& S, const Standard_Real Umin, const Standard_Real Usup, const Standard_Real Vmin, const Standard_Real Vsup, const Standard_Real TolU, const Standard_Real TolV);
//! It calculates all the distances between a point
//! from gp and a SurfacePtr from Adaptor3d.
Standard_EXPORT Extrema_ExtPRevS(const gp_Pnt& P, const Handle(Adaptor3d_HSurfaceOfRevolution)& S, const Standard_Real TolU, const Standard_Real TolV);
Standard_EXPORT Extrema_ExtPRevS(const gp_Pnt& P, const Handle(GeomAdaptor_HSurfaceOfRevolution)& S, const Standard_Real TolU, const Standard_Real TolV);
Standard_EXPORT void Initialize (const Handle(Adaptor3d_HSurfaceOfRevolution)& S, const Standard_Real Umin, const Standard_Real Usup, const Standard_Real Vmin, const Standard_Real Vsup, const Standard_Real TolU, const Standard_Real TolV);
Standard_EXPORT void Initialize (const Handle(GeomAdaptor_HSurfaceOfRevolution)& S, const Standard_Real Umin, const Standard_Real Usup, const Standard_Real Vmin, const Standard_Real Vsup, const Standard_Real TolU, const Standard_Real TolV);
Standard_EXPORT void Perform (const gp_Pnt& P);
@@ -85,7 +85,7 @@ protected:
private:
Handle(Adaptor3d_HSurfaceOfRevolution) myS;
Handle(GeomAdaptor_HSurfaceOfRevolution) myS;
Standard_Real myvinf;
Standard_Real myvsup;
Standard_Real mytolv;

View File

@@ -14,8 +14,8 @@
//-----------------------------------------------------------------
#include <Adaptor3d_HSurfaceOfLinearExtrusion.hxx>
#include <Adaptor3d_HSurfaceOfRevolution.hxx>
#include <GeomAdaptor_HSurfaceOfLinearExtrusion.hxx>
#include <GeomAdaptor_HSurfaceOfRevolution.hxx>
#include <Adaptor3d_Surface.hxx>
#include <ElCLib.hxx>
#include <Extrema_ExtPExtS.hxx>
@@ -289,8 +289,8 @@ void Extrema_ExtPS::Perform(const gp_Pnt& thePoint)
{
if (myExtPExtS.IsNull())
{
Handle(Adaptor3d_HSurfaceOfLinearExtrusion) aS (new Adaptor3d_HSurfaceOfLinearExtrusion (
Adaptor3d_SurfaceOfLinearExtrusion (myS->BasisCurve(), myS->Direction())));
Handle(GeomAdaptor_HSurfaceOfLinearExtrusion) aS (new GeomAdaptor_HSurfaceOfLinearExtrusion (
GeomAdaptor_SurfaceOfLinearExtrusion (myS->BasisCurve(), myS->Direction())));
myExtPExtS = new Extrema_ExtPExtS (thePoint, aS, myuinf, myusup, myvinf, myvsup, mytolu, mytolv);
}
@@ -315,8 +315,8 @@ void Extrema_ExtPS::Perform(const gp_Pnt& thePoint)
{
if (myExtPRevS.IsNull())
{
Handle(Adaptor3d_HSurfaceOfRevolution) aS (new Adaptor3d_HSurfaceOfRevolution (
Adaptor3d_SurfaceOfRevolution (myS->BasisCurve(), myS->AxeOfRevolution())));
Handle(GeomAdaptor_HSurfaceOfRevolution) aS (new GeomAdaptor_HSurfaceOfRevolution (
GeomAdaptor_SurfaceOfRevolution (myS->BasisCurve(), myS->AxeOfRevolution())));
myExtPRevS = new Extrema_ExtPRevS (thePoint, aS, myuinf, myusup, myvinf, myvsup, mytolu, mytolv);
}