From: msv Date: Fri, 12 Aug 2016 08:03:28 +0000 (+0300) Subject: //Consider remark concerning new methods in Adaptor3d_Curve class. X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=e352304640c81be2d40acf44dbb40f7d4c9a54a8;p=occt-copy.git //Consider remark concerning new methods in Adaptor3d_Curve class. --- diff --git a/src/Adaptor3d/Adaptor3d_Curve.cxx b/src/Adaptor3d/Adaptor3d_Curve.cxx index afb5789e4d..4825344378 100644 --- a/src/Adaptor3d/Adaptor3d_Curve.cxx +++ b/src/Adaptor3d/Adaptor3d_Curve.cxx @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -382,20 +383,8 @@ Handle(Geom_BSplineCurve) Adaptor3d_Curve::BSpline() const //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)(); } diff --git a/src/Adaptor3d/Adaptor3d_Curve.hxx b/src/Adaptor3d/Adaptor3d_Curve.hxx index c8bf429748..de882dc430 100644 --- a/src/Adaptor3d/Adaptor3d_Curve.hxx +++ b/src/Adaptor3d/Adaptor3d_Curve.hxx @@ -40,6 +40,7 @@ class gp_Hypr; class gp_Parab; class Geom_BezierCurve; class Geom_BSplineCurve; +class Geom_OffsetCurve; //! Root class for 3D curves on which geometric @@ -156,9 +157,7 @@ public: 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(); diff --git a/src/Adaptor3d/Adaptor3d_HCurve.hxx b/src/Adaptor3d/Adaptor3d_HCurve.hxx index 75a4cd9c9d..be29b50bd6 100644 --- a/src/Adaptor3d/Adaptor3d_HCurve.hxx +++ b/src/Adaptor3d/Adaptor3d_HCurve.hxx @@ -42,6 +42,7 @@ class gp_Pnt; class gp_Vec; class Geom_BezierCurve; class Geom_BSplineCurve; +class Geom_OffsetCurve; class Adaptor3d_HCurve; @@ -134,10 +135,7 @@ public: 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) diff --git a/src/Adaptor3d/Adaptor3d_HCurve.lxx b/src/Adaptor3d/Adaptor3d_HCurve.lxx index 94eb2f2e26..48b2d8d0d3 100644 --- a/src/Adaptor3d/Adaptor3d_HCurve.lxx +++ b/src/Adaptor3d/Adaptor3d_HCurve.lxx @@ -298,18 +298,7 @@ inline Standard_Integer Adaptor3d_HCurve::NbKnots() const //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(); } diff --git a/src/BRepAdaptor/BRepAdaptor_Curve.cxx b/src/BRepAdaptor/BRepAdaptor_Curve.cxx index c53ed062d1..c1b07510c0 100644 --- a/src/BRepAdaptor/BRepAdaptor_Curve.cxx +++ b/src/BRepAdaptor/BRepAdaptor_Curve.cxx @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -657,30 +658,12 @@ Handle(Geom_BSplineCurve) BRepAdaptor_Curve::BSpline() const //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(); -} diff --git a/src/BRepAdaptor/BRepAdaptor_Curve.hxx b/src/BRepAdaptor/BRepAdaptor_Curve.hxx index 7ffe3b3b92..96a87a73a6 100644 --- a/src/BRepAdaptor/BRepAdaptor_Curve.hxx +++ b/src/BRepAdaptor/BRepAdaptor_Curve.hxx @@ -51,6 +51,7 @@ class gp_Hypr; class gp_Parab; class Geom_BezierCurve; class Geom_BSplineCurve; +class Geom_OffsetCurve; //! The Curve from BRepAdaptor allows to use an Edge @@ -220,9 +221,7 @@ public: //! 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; diff --git a/src/Extrema/Extrema_GenExtCS.cxx b/src/Extrema/Extrema_GenExtCS.cxx index f108016baa..ce19e79d32 100644 --- a/src/Extrema/Extrema_GenExtCS.cxx +++ b/src/Extrema/Extrema_GenExtCS.cxx @@ -24,7 +24,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -46,6 +48,8 @@ const Standard_Real HyperbolaLimit = 23.; //ln(UMaxParamVal) 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; @@ -75,12 +79,13 @@ static void GetSurfMaxParamVals(const Adaptor3d_SurfacePtr theS, 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) { @@ -98,8 +103,9 @@ static Standard_Real GetCurvMaxParamVal(const Adaptor3d_Curve& theC) { 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; } diff --git a/src/GeomAdaptor/GeomAdaptor_Curve.cxx b/src/GeomAdaptor/GeomAdaptor_Curve.cxx index bc265388d0..90f9214919 100644 --- a/src/GeomAdaptor/GeomAdaptor_Curve.cxx +++ b/src/GeomAdaptor/GeomAdaptor_Curve.cxx @@ -965,28 +965,9 @@ Handle(Geom_BSplineCurve) GeomAdaptor_Curve::BSpline() const //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(); -} - diff --git a/src/GeomAdaptor/GeomAdaptor_Curve.hxx b/src/GeomAdaptor/GeomAdaptor_Curve.hxx index 7c197e2814..690480906c 100644 --- a/src/GeomAdaptor/GeomAdaptor_Curve.hxx +++ b/src/GeomAdaptor/GeomAdaptor_Curve.hxx @@ -47,6 +47,7 @@ class gp_Hypr; class gp_Parab; class Geom_BezierCurve; class Geom_BSplineCurve; +class Geom_OffsetCurve; //! This class provides an interface between the services provided by any @@ -207,9 +208,7 @@ public: //! 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;