#include <algorithm>
-#include <Adaptor2d_HCurve2d.hxx>
-#include <Adaptor3d_HCurve.hxx>
-#include <Adaptor3d_HSurface.hxx>
+#include <Adaptor2d_Curve2d.hxx>
+#include <Adaptor3d_Curve.hxx>
+#include <Adaptor3d_Surface.hxx>
#include <Extrema_ExtCS.hxx>
#include <Extrema_ExtPS.hxx>
#include <Extrema_GenLocateExtPS.hxx>
#include <TColgp_HSequenceOfPnt.hxx>
#include <Adaptor3d_CurveOnSurface.hxx>
#include <Geom2d_Line.hxx>
-#include <Geom2dAdaptor_HCurve.hxx>
+#include <Geom2dAdaptor_Curve.hxx>
#include <Extrema_ExtCC.hxx>
#include <NCollection_Vector.hxx>
#define FuncTol 1.e-10
+IMPLEMENT_STANDARD_RTTIEXT(ProjLib_CompProjectedCurve, Adaptor2d_Curve2d)
+
#ifdef OCCT_DEBUG_CHRONO
#include <OSD_Timer.hxx>
// myPeriodicDir - 0 for U periodicity and 1 for V periodicity.
struct SplitDS
{
- SplitDS(const Handle(Adaptor3d_HCurve) &theCurve,
- const Handle(Adaptor3d_HSurface) &theSurface,
+ SplitDS(const Handle(Adaptor3d_Curve) &theCurve,
+ const Handle(Adaptor3d_Surface) &theSurface,
NCollection_Vector<Standard_Real> &theSplits)
: myCurve(theCurve),
mySurface(theSurface),
// Assignment operator is forbidden.
void operator=(const SplitDS &theSplitDS);
- const Handle(Adaptor3d_HCurve) myCurve;
- const Handle(Adaptor3d_HSurface) mySurface;
+ const Handle(Adaptor3d_Curve) myCurve;
+ const Handle(Adaptor3d_Surface) mySurface;
NCollection_Vector<Standard_Real> &mySplits;
Standard_Real myPerMinParam;
};
//! Compute split points in the parameter space of the curve.
- static void BuildCurveSplits(const Handle(Adaptor3d_HCurve) &theCurve,
- const Handle(Adaptor3d_HSurface) &theSurface,
+ static void BuildCurveSplits(const Handle(Adaptor3d_Curve) &theCurve,
+ const Handle(Adaptor3d_Surface) &theSurface,
const Standard_Real theTolU,
const Standard_Real theTolV,
NCollection_Vector<Standard_Real> &theSplits);
const Standard_Real u,
const Standard_Real v,
gp_Vec2d& V,
- const Handle(Adaptor3d_HCurve)& Curve,
- const Handle(Adaptor3d_HSurface)& Surface)
+ const Handle(Adaptor3d_Curve)& Curve,
+ const Handle(Adaptor3d_Surface)& Surface)
{
gp_Pnt S, C;
gp_Vec DS1_u, DS1_v, DS2_u, DS2_uv, DS2_v, DC1_t;
const Standard_Real u,
const Standard_Real v,
gp_Vec2d& V1, gp_Vec2d& V2,
- const Handle(Adaptor3d_HCurve)& Curve,
- const Handle(Adaptor3d_HSurface)& Surface)
+ const Handle(Adaptor3d_Curve)& Curve,
+ const Handle(Adaptor3d_Surface)& Surface)
{
gp_Pnt S, C;
gp_Vec DS1_u, DS1_v, DS2_u, DS2_uv, DS2_v,
const Standard_Real u,
const Standard_Real v,
gp_Vec& V,
- const Handle(Adaptor3d_HCurve)& Curve,
- const Handle(Adaptor3d_HSurface)& Surface)
+ const Handle(Adaptor3d_Curve)& Curve,
+ const Handle(Adaptor3d_Surface)& Surface)
{
gp_Pnt S, C;
gp_Vec2d V2d;
const Standard_Real u,
const Standard_Real v,
gp_Vec& V1 , gp_Vec& V2 ,
- const Handle(Adaptor3d_HCurve)& Curve,
- const Handle(Adaptor3d_HSurface)& Surface)
+ const Handle(Adaptor3d_Curve)& Curve,
+ const Handle(Adaptor3d_Surface)& Surface)
{
gp_Pnt S, C;
gp_Vec2d V12d,V22d;
const Standard_Real Tol,
const Standard_Real TolU,
const Standard_Real TolV,
- const Handle(Adaptor3d_HCurve)& Curve,
- const Handle(Adaptor3d_HSurface)& Surface)
+ const Handle(Adaptor3d_Curve)& Curve,
+ const Handle(Adaptor3d_Surface)& Surface)
{
Standard_Real U0, V0, t, t1, t2, FirstU, LastU, FirstV, LastV;
gp_Pnt2d POnS;
gp_Pnt P;
P = Seq.Last ();
Seq.Remove (Seq.Length ());
- ProjLib_PrjResolve aPrjPS (Curve->Curve (),
- Surface->Surface (),
- Standard_Integer (P.Z ()));
+ ProjLib_PrjResolve aPrjPS (*Curve, *Surface, Standard_Integer (P.Z ()));
if (Standard_Integer (P.Z ()) == 2)
{
aPrjPS.Perform (t, P.X (), V0, gp_Pnt2d (Tol, TolV),
const Standard_Real Tol,
const Standard_Real TolU,
const Standard_Real TolV,
- const Handle(Adaptor3d_HCurve)& Curve,
- const Handle(Adaptor3d_HSurface)& Surface)
+ const Handle(Adaptor3d_Curve)& Curve,
+ const Handle(Adaptor3d_Surface)& Surface)
{
#ifdef OCCT_DEBUG_CHRONO
InitChron(chr_dicho_bound);
gp_Pnt2d POnS;
U0 = Sol.Y();
V0 = Sol.Z();
- ProjLib_PrjResolve aPrjPS(Curve->Curve(), Surface->Surface(), 1);
+ ProjLib_PrjResolve aPrjPS (*Curve, *Surface, 1);
Standard_Real aNotSol = NotSol;
while (fabs(Sol.X() - aNotSol) > Tol)
static Standard_Boolean InitialPoint(const gp_Pnt& Point,
const Standard_Real t,
- const Handle(Adaptor3d_HCurve)& C,
- const Handle(Adaptor3d_HSurface)& S,
+ const Handle(Adaptor3d_Curve)& C,
+ const Handle(Adaptor3d_Surface)& S,
const Standard_Real TolU,
const Standard_Real TolV,
Standard_Real& U,
Standard_Real& V)
{
- ProjLib_PrjResolve aPrjPS(C->Curve(), S->Surface(), 1);
+ ProjLib_PrjResolve aPrjPS (*C, *S, 1);
Standard_Real ParU,ParV;
Extrema_ExtPS aExtPS;
- aExtPS.Initialize(S->Surface(), S->FirstUParameter(),
+ aExtPS.Initialize (*S, S->FirstUParameter(),
S->LastUParameter(), S->FirstVParameter(),
S->LastVParameter(), TolU, TolV);
//=======================================================================
ProjLib_CompProjectedCurve::ProjLib_CompProjectedCurve
- (const Handle(Adaptor3d_HSurface)& theSurface,
- const Handle(Adaptor3d_HCurve)& theCurve,
+ (const Handle(Adaptor3d_Surface)& theSurface,
+ const Handle(Adaptor3d_Curve)& theCurve,
const Standard_Real theTolU,
const Standard_Real theTolV)
: mySurface (theSurface),
//=======================================================================
ProjLib_CompProjectedCurve::ProjLib_CompProjectedCurve
- (const Handle(Adaptor3d_HSurface)& theSurface,
- const Handle(Adaptor3d_HCurve)& theCurve,
+ (const Handle(Adaptor3d_Surface)& theSurface,
+ const Handle(Adaptor3d_Curve)& theCurve,
const Standard_Real theTolU,
const Standard_Real theTolV,
const Standard_Real theMaxDist)
isSplitsComputed = Standard_False;
const Standard_Real aTolExt = Precision::PConfusion();
- Extrema_ExtCS CExt(myCurve->Curve(), mySurface->Surface(), aTolExt, aTolExt);
+ Extrema_ExtCS CExt (*myCurve, *mySurface, aTolExt, aTolExt);
if (CExt.IsDone() && CExt.NbExt())
{
// Search for the minimum solution.
gp_Pnt2d aLowBorder(mySurface->FirstUParameter(),mySurface->FirstVParameter());
gp_Pnt2d aUppBorder(mySurface->LastUParameter(), mySurface->LastVParameter());
gp_Pnt2d aTol(myTolU, myTolV);
- ProjLib_PrjResolve aPrjPS(myCurve->Curve(), mySurface->Surface(), 1);
+ ProjLib_PrjResolve aPrjPS (*myCurve, *mySurface, 1);
t = FirstU;
Standard_Boolean new_part;
//purpose :
//=======================================================================
-void ProjLib_CompProjectedCurve::Load(const Handle(Adaptor3d_HSurface)& S)
+void ProjLib_CompProjectedCurve::Load(const Handle(Adaptor3d_Surface)& S)
{
mySurface = S;
}
//purpose :
//=======================================================================
-void ProjLib_CompProjectedCurve::Load(const Handle(Adaptor3d_HCurve)& C)
+void ProjLib_CompProjectedCurve::Load(const Handle(Adaptor3d_Curve)& C)
{
myCurve = C;
}
//purpose :
//=======================================================================
-const Handle(Adaptor3d_HSurface)& ProjLib_CompProjectedCurve::GetSurface() const
+const Handle(Adaptor3d_Surface)& ProjLib_CompProjectedCurve::GetSurface() const
{
return mySurface;
}
//purpose :
//=======================================================================
-const Handle(Adaptor3d_HCurve)& ProjLib_CompProjectedCurve::GetCurve() const
+const Handle(Adaptor3d_Curve)& ProjLib_CompProjectedCurve::GetCurve() const
{
return myCurve;
}
}
//End of cubic interpolation
- ProjLib_PrjResolve aPrjPS(myCurve->Curve(), mySurface->Surface(), 1);
+ ProjLib_PrjResolve aPrjPS (*myCurve, *mySurface, 1);
aPrjPS.Perform(U, U0, V0, gp_Pnt2d(myTolU, myTolV),
gp_Pnt2d(mySurface->FirstUParameter(), mySurface->FirstVParameter()),
gp_Pnt2d(mySurface->LastUParameter(), mySurface->LastVParameter()));
else
{
gp_Pnt thePoint = myCurve->Value(U);
- Extrema_ExtPS aExtPS(thePoint, mySurface->Surface(), myTolU, myTolV);
+ Extrema_ExtPS aExtPS(thePoint, *mySurface, myTolU, myTolV);
if (aExtPS.IsDone() && aExtPS.NbExt())
{
Standard_Integer k, Nend, imin = 1;
Standard_Real V;
V = (mySequence->Value(i)->Value(j).Z()
+ mySequence->Value(i)->Value(j +1).Z())/2;
- ProjLib_PrjResolve Solver(myCurve->Curve(), mySurface->Surface(), 2);
+ ProjLib_PrjResolve Solver (*myCurve, *mySurface, 2);
gp_Vec2d D;
gp_Pnt Triple;
Standard_Real U;
U = (mySequence->Value(i)->Value(j).Y()
+ mySequence->Value(i)->Value(j +1).Y())/2;
- ProjLib_PrjResolve Solver(myCurve->Curve(), mySurface->Surface(), 3);
+ ProjLib_PrjResolve Solver (*myCurve, *mySurface, 3);
gp_Vec2d D;
gp_Pnt Triple;
//purpose :
//=======================================================================
-Handle(Adaptor2d_HCurve2d) ProjLib_CompProjectedCurve::Trim
+Handle(Adaptor2d_Curve2d) ProjLib_CompProjectedCurve::Trim
(const Standard_Real First,
const Standard_Real Last,
const Standard_Real Tol) const
{
Handle(ProjLib_HCompProjectedCurve) HCS =
new ProjLib_HCompProjectedCurve(*this);
- HCS->ChangeCurve2d().Load(mySurface);
- HCS->ChangeCurve2d().Load(myCurve->Trim(First,Last,Tol));
+ HCS->Load(mySurface);
+ HCS->Load(myCurve->Trim(First,Last,Tol));
return HCS;
}
//function : BuildCurveSplits
//purpose :
//=======================================================================
-void BuildCurveSplits(const Handle(Adaptor3d_HCurve) &theCurve,
- const Handle(Adaptor3d_HSurface) &theSurface,
+void BuildCurveSplits(const Handle(Adaptor3d_Curve) &theCurve,
+ const Handle(Adaptor3d_Surface) &theSurface,
const Standard_Real theTolU,
const Standard_Real theTolV,
NCollection_Vector<Standard_Real> &theSplits)
SplitDS aDS(theCurve, theSurface, theSplits);
Extrema_ExtPS anExtPS;
- anExtPS.Initialize(theSurface->Surface(),
+ anExtPS.Initialize(*theSurface,
theSurface->FirstUParameter(), theSurface->LastUParameter(),
theSurface->FirstVParameter(), theSurface->LastVParameter(),
theTolU, theTolV);
// Create line which is represent periodic border.
Handle(Geom2d_Curve) aC2GC = new Geom2d_Line(aStartPnt, aDir);
- Handle(Geom2dAdaptor_HCurve) aC = new Geom2dAdaptor_HCurve(aC2GC, 0, aLast2DParam);
+ Handle(Geom2dAdaptor_Curve) aC = new Geom2dAdaptor_Curve(aC2GC, 0, aLast2DParam);
Adaptor3d_CurveOnSurface aCOnS(aC, theSplitDS.mySurface);
Extrema_ExtCC anExtCC;
anExtCC.SetCurve(1, aCOnS);
- anExtCC.SetCurve(2, theSplitDS.myCurve->Curve());
+ anExtCC.SetCurve(2, *theSplitDS.myCurve);
anExtCC.SetSingleSolutionFlag(Standard_True); // Search only one solution since multiple invocations are needed.
anExtCC.SetRange(1, 0, aLast2DParam);
theSplitDS.myExtCC = &anExtCC;