#include <Adaptor3d_HCurve.hxx>
#include <Geom_BezierCurve.hxx>
#include <Geom_BSplineCurve.hxx>
+#include <Geom_OffsetCurve.hxx>
#include <gp_Circ.hxx>
#include <gp_Elips.hxx>
#include <gp_Hypr.hxx>
//purpose :
//=======================================================================
-Handle(Adaptor3d_HCurve) Adaptor3d_Curve::BasisCurve() const
+Handle(Geom_OffsetCurve) Adaptor3d_Curve::OffsetCurve() const
{
- Standard_NotImplemented::Raise("Adaptor3d_Curve::BasisCurve");
- return Handle(Adaptor3d_HCurve)();
-}
-
-
-//=======================================================================
-//function : OffsetValue
-//purpose :
-//=======================================================================
-
-Standard_Real Adaptor3d_Curve::OffsetValue() const
-{
- Standard_NotImplemented::Raise("Adaptor3d_Curve::OffsetValue");
- return 0.;
+ Standard_NotImplemented::Raise("Adaptor3d_Curve::OffsetCurve");
+ return Handle(Geom_OffsetCurve)();
}
class gp_Parab;
class Geom_BezierCurve;
class Geom_BSplineCurve;
+class Geom_OffsetCurve;
//! Root class for 3D curves on which geometric
Standard_EXPORT virtual Handle(Geom_BSplineCurve) BSpline() const;
- Standard_EXPORT virtual Handle(Adaptor3d_HCurve) BasisCurve() const;
-
- Standard_EXPORT virtual Standard_Real OffsetValue() const;
+ Standard_EXPORT virtual Handle(Geom_OffsetCurve) OffsetCurve() const;
Standard_EXPORT virtual ~Adaptor3d_Curve();
class gp_Vec;
class Geom_BezierCurve;
class Geom_BSplineCurve;
+class Geom_OffsetCurve;
class Adaptor3d_HCurve;
Handle(Geom_BSplineCurve) BSpline() const;
- Handle(Adaptor3d_HCurve) BasisCurve() const;
-
- Standard_Real OffsetValue() const;
-
+ Handle(Geom_OffsetCurve) OffsetCurve() const;
DEFINE_STANDARD_RTTIEXT(Adaptor3d_HCurve,MMgt_TShared)
//purpose :
//=======================================================================
- inline Handle(Adaptor3d_HCurve) Adaptor3d_HCurve::BasisCurve() const
+ inline Handle(Geom_OffsetCurve) Adaptor3d_HCurve::OffsetCurve() const
{
- return Curve().BasisCurve();
-}
-
-
-//=======================================================================
-//function : OffsetValue
-//purpose :
-//=======================================================================
-
- inline Standard_Real Adaptor3d_HCurve::OffsetValue() const
-{
- return Curve().OffsetValue();
+ return Curve().OffsetCurve();
}
#include <Geom2dAdaptor_HCurve.hxx>
#include <Geom_BezierCurve.hxx>
#include <Geom_BSplineCurve.hxx>
+#include <Geom_OffsetCurve.hxx>
#include <Geom_Surface.hxx>
#include <GeomAdaptor_Curve.hxx>
#include <GeomAdaptor_HSurface.hxx>
//purpose :
//=======================================================================
-Handle(Adaptor3d_HCurve) BRepAdaptor_Curve::BasisCurve() const
+Handle(Geom_OffsetCurve) BRepAdaptor_Curve::OffsetCurve() const
{
if ( !Is3DCurve() || myCurve.GetType() != GeomAbs_OffsetCurve)
- Standard_NoSuchObject::Raise("BRepAdaptor_Curve::BasisCurve");
+ Standard_NoSuchObject::Raise("BRepAdaptor_Curve::OffsetCurve");
- const Handle(Geom_Curve)& aGC = myCurve.Curve();
- Handle(Geom_OffsetCurve) anOffC = Handle(Geom_OffsetCurve)::DownCast(aGC);
- Handle(Geom_Curve) aBC = anOffC->BasisCurve();
- aBC = Handle(Geom_Curve)::DownCast(aBC->Transformed(myTrsf));
-
- Handle(GeomAdaptor_HCurve) aGABC = new GeomAdaptor_HCurve(aBC);
-
- return aGABC;
+ Handle(Geom_OffsetCurve) anOffC = myCurve.OffsetCurve();
+ return myTrsf.Form() == gp_Identity
+ ? anOffC : Handle(Geom_OffsetCurve)::DownCast(anOffC->Transformed(myTrsf));
}
-
-//=======================================================================
-//function : OffsetValue
-//purpose :
-//=======================================================================
-
-Standard_Real BRepAdaptor_Curve::OffsetValue() const
-{
- if ( !Is3DCurve() || myCurve.GetType() != GeomAbs_OffsetCurve)
- Standard_NoSuchObject::Raise("BRepAdaptor_Curve::OffsetValue");
-
- return myCurve.OffsetValue();
-}
class gp_Parab;
class Geom_BezierCurve;
class Geom_BSplineCurve;
+class Geom_OffsetCurve;
//! The Curve from BRepAdaptor allows to use an Edge
//! using this method
Standard_EXPORT Handle(Geom_BSplineCurve) BSpline() const Standard_OVERRIDE;
- Standard_EXPORT Handle(Adaptor3d_HCurve) BasisCurve() const Standard_OVERRIDE;
-
- Standard_EXPORT Standard_Real OffsetValue() const Standard_OVERRIDE;
+ Standard_EXPORT Handle(Geom_OffsetCurve) OffsetCurve() const Standard_OVERRIDE;
#include <Extrema_GlobOptFuncCS.hxx>
#include <Extrema_POnCurv.hxx>
#include <Extrema_POnSurf.hxx>
+#include <Geom_Hyperbola.hxx>
#include <Geom_Line.hxx>
+#include <Geom_OffsetCurve.hxx>
#include <GeomAdaptor_Curve.hxx>
#include <math_FunctionSetRoot.hxx>
#include <math_PSO.hxx>
static void GetSurfMaxParamVals(const Adaptor3d_SurfacePtr theS,
Standard_Real& theUmax, Standard_Real& theVmax)
{
+ // determine if the surface is extrusion or revolution
+ // and its basis curve is hyperbola
theUmax = UMaxParamVal;
theVmax = VMaxParamVal;
Handle(Adaptor3d_HCurve) aBC;
return;
}
//
- if(aBC->GetType() == GeomAbs_OffsetCurve)
+ Standard_Boolean isHypebola = (aBC->GetType() == GeomAbs_Hyperbola);
+ if(!isHypebola && aBC->GetType() == GeomAbs_OffsetCurve)
{
- aBC = aBC->BasisCurve();
+ isHypebola = aBC->OffsetCurve()->BasisCurve()->IsKind(STANDARD_TYPE(Geom_Hyperbola));
}
- if(aBC->GetType() == GeomAbs_Hyperbola)
+ if (isHypebola)
{
if(aST == GeomAbs_SurfaceOfExtrusion)
{
{
if(theC.GetType() == GeomAbs_OffsetCurve)
{
- Handle(Adaptor3d_HCurve) aBC = theC.BasisCurve();
- if(aBC->GetType() == GeomAbs_Hyperbola)
+ Standard_Boolean isHypebola =
+ theC.OffsetCurve()->BasisCurve()->IsKind(STANDARD_TYPE(Geom_Hyperbola));
+ if (isHypebola)
{
return HyperbolaLimit;
}
//purpose :
//=======================================================================
-Handle(Adaptor3d_HCurve) GeomAdaptor_Curve::BasisCurve() const
+Handle(Geom_OffsetCurve) GeomAdaptor_Curve::OffsetCurve() const
{
if ( myTypeCurve != GeomAbs_OffsetCurve)
- Standard_NoSuchObject::Raise("GeomAdaptor_Curve::BasisCurve");
-
- Handle(Geom_OffsetCurve) anOffC = Handle(Geom_OffsetCurve)::DownCast(myCurve);
- Handle(Geom_Curve) aBC = anOffC->BasisCurve();
-
- Handle(GeomAdaptor_HCurve) aGABC = new GeomAdaptor_HCurve(aBC);
- return aGABC;
+ Standard_NoSuchObject::Raise("GeomAdaptor_Curve::OffsetCurve");
+ return Handle(Geom_OffsetCurve)::DownCast(myCurve);
}
-
-//=======================================================================
-//function : OffsetValue
-//purpose :
-//=======================================================================
-
-Standard_Real GeomAdaptor_Curve::OffsetValue() const
-{
- if ( myTypeCurve != GeomAbs_OffsetCurve)
- Standard_NoSuchObject::Raise("GeomAdaptor_Curve::OffsetValue");
-
- return Handle(Geom_OffsetCurve)::DownCast(myCurve)->Offset();
-}
-
class gp_Parab;
class Geom_BezierCurve;
class Geom_BSplineCurve;
+class Geom_OffsetCurve;
//! This class provides an interface between the services provided by any
//! myFirst/Last.
Standard_EXPORT Handle(Geom_BSplineCurve) BSpline() const Standard_OVERRIDE;
- Standard_EXPORT Handle(Adaptor3d_HCurve) BasisCurve() const Standard_OVERRIDE;
-
- Standard_EXPORT Standard_Real OffsetValue() const Standard_OVERRIDE;
+ Standard_EXPORT Handle(Geom_OffsetCurve) OffsetCurve() const Standard_OVERRIDE;
friend class GeomAdaptor_Surface;