0026252: GeomAdaptor_Surface should use inner adaptor to calculate values of complex...
[occt.git] / src / Adaptor3d / Adaptor3d_SurfaceOfLinearExtrusion.cxx
diff --git a/src/Adaptor3d/Adaptor3d_SurfaceOfLinearExtrusion.cxx b/src/Adaptor3d/Adaptor3d_SurfaceOfLinearExtrusion.cxx
deleted file mode 100644 (file)
index 6eec03e..0000000
+++ /dev/null
@@ -1,740 +0,0 @@
-// Created on: 1993-04-21
-// Created by: Bruno DUMORTIER
-// Copyright (c) 1993-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-
-#include <Adaptor3d_HCurve.hxx>
-#include <Adaptor3d_HSurface.hxx>
-#include <Adaptor3d_HSurfaceOfLinearExtrusion.hxx>
-#include <Adaptor3d_SurfaceOfLinearExtrusion.hxx>
-#include <Geom_BezierSurface.hxx>
-#include <Geom_BSplineSurface.hxx>
-#include <gp.hxx>
-#include <gp_Ax1.hxx>
-#include <gp_Cone.hxx>
-#include <gp_Cylinder.hxx>
-#include <gp_Dir.hxx>
-#include <gp_Pln.hxx>
-#include <gp_Pnt.hxx>
-#include <gp_Sphere.hxx>
-#include <gp_Torus.hxx>
-#include <gp_Vec.hxx>
-#include <Precision.hxx>
-#include <Standard_DomainError.hxx>
-#include <Standard_NoSuchObject.hxx>
-#include <Standard_OutOfRange.hxx>
-
-//=======================================================================
-//function : Adaptor3d_SurfaceOfLinearExtrusion
-//purpose  : 
-//=======================================================================
-Adaptor3d_SurfaceOfLinearExtrusion::Adaptor3d_SurfaceOfLinearExtrusion()
-{}
-
-//=======================================================================
-//function : Adaptor3d_SurfaceOfLinearExtrusion
-//purpose  : 
-//=======================================================================
-
-Adaptor3d_SurfaceOfLinearExtrusion::Adaptor3d_SurfaceOfLinearExtrusion
-(const Handle(Adaptor3d_HCurve)& C)
-{
-  Load( C);
-}
-
-//=======================================================================
-//function : Adaptor3d_SurfaceOfLinearExtrusion
-//purpose  : 
-//=======================================================================
-
-Adaptor3d_SurfaceOfLinearExtrusion::Adaptor3d_SurfaceOfLinearExtrusion
-(const Handle(Adaptor3d_HCurve)& C,
- const gp_Dir&        V)
-{
-  Load( C);
-  Load( V);
-}
-
-//=======================================================================
-//function : Load
-//purpose  : 
-//=======================================================================
-
-void Adaptor3d_SurfaceOfLinearExtrusion::Load( const Handle(Adaptor3d_HCurve)& C)
-{
-  myBasisCurve = C;
-}
-
-//=======================================================================
-//function : Load
-//purpose  : 
-//=======================================================================
-
-void Adaptor3d_SurfaceOfLinearExtrusion::Load( const gp_Dir& V)
-{
-  myDirection = V;
-}
-
-//=======================================================================
-//function : FirstUParameter
-//purpose  : 
-//=======================================================================
-
-Standard_Real Adaptor3d_SurfaceOfLinearExtrusion::FirstUParameter() const 
-{
-  return myBasisCurve->FirstParameter();
-}
-
-//=======================================================================
-//function : LastUParameter
-//purpose  : 
-//=======================================================================
-
-Standard_Real Adaptor3d_SurfaceOfLinearExtrusion::LastUParameter() const 
-{
-  return myBasisCurve->LastParameter();
-}
-
-//=======================================================================
-//function : FirstVParameter
-//purpose  : 
-//=======================================================================
-
-Standard_Real Adaptor3d_SurfaceOfLinearExtrusion::FirstVParameter() const 
-{
-  return RealFirst();
-}
-
-//=======================================================================
-//function : LastVParameter
-//purpose  : 
-//=======================================================================
-
-Standard_Real Adaptor3d_SurfaceOfLinearExtrusion::LastVParameter() const 
-{
-  return RealLast();
-}
-
-//=======================================================================
-//function : UContinuity
-//purpose  : 
-//=======================================================================
-
-GeomAbs_Shape Adaptor3d_SurfaceOfLinearExtrusion::UContinuity() const 
-{
-  return myBasisCurve->Continuity();
-}
-
-//=======================================================================
-//function : VContinuity
-//purpose  : 
-//=======================================================================
-
-GeomAbs_Shape Adaptor3d_SurfaceOfLinearExtrusion::VContinuity() const 
-{
-  return GeomAbs_CN;
-}
-
-//=======================================================================
-//function : NbUIntervals
-//purpose  : 
-//=======================================================================
-
-Standard_Integer Adaptor3d_SurfaceOfLinearExtrusion::NbUIntervals
-(const GeomAbs_Shape S)  const 
-{
-  return   myBasisCurve->NbIntervals(S);
-}
-
-//=======================================================================
-//function : NbVIntervals
-//purpose  : 
-//=======================================================================
-
-Standard_Integer Adaptor3d_SurfaceOfLinearExtrusion::NbVIntervals
-(const GeomAbs_Shape ) const 
-{
-  return 1;
-}
-
-//=======================================================================
-//function : UIntervals
-//purpose  : 
-//=======================================================================
-
-void Adaptor3d_SurfaceOfLinearExtrusion::UIntervals
-(TColStd_Array1OfReal&  T, const GeomAbs_Shape S) const 
-{
-  myBasisCurve->Intervals(T,S);
-}
-
-//=======================================================================
-//function : VIntervals
-//purpose  : 
-//=======================================================================
-
-void Adaptor3d_SurfaceOfLinearExtrusion::VIntervals
-//(TColStd_Array1OfReal&  T, const GeomAbs_Shape S) const 
-(TColStd_Array1OfReal&  T, const GeomAbs_Shape ) const 
-{
- T(T.Lower()) = FirstVParameter() ;
- T(T.Lower() + 1) = LastVParameter() ;
-}
-
-//=======================================================================
-//function : VTrim
-//purpose  : 
-//=======================================================================
-
-Handle(Adaptor3d_HSurface)  Adaptor3d_SurfaceOfLinearExtrusion::VTrim
-(const Standard_Real First ,
- const Standard_Real Last,
- const Standard_Real Tol) const 
-{
-  Handle(Adaptor3d_HCurve) newBasisCurve =
-  myBasisCurve->Trim(First, Last, Tol);
-  
-  Adaptor3d_SurfaceOfLinearExtrusion * SurfacePtr =
-  new  Adaptor3d_SurfaceOfLinearExtrusion(newBasisCurve, myDirection) ;
-
-  return new Adaptor3d_HSurfaceOfLinearExtrusion(*SurfacePtr);
-}
-
-//=======================================================================
-//function : UTrim
-//purpose  : 
-//=======================================================================
-
-Handle(Adaptor3d_HSurface)  Adaptor3d_SurfaceOfLinearExtrusion::UTrim
-//(const Standard_Real First ,
-// const Standard_Real Last,
-// const Standard_Real Tol) const 
-(const Standard_Real ,
- const Standard_Real ,
- const Standard_Real ) const 
-{
-  Adaptor3d_SurfaceOfLinearExtrusion * SurfacePtr = 
-  new  Adaptor3d_SurfaceOfLinearExtrusion(myBasisCurve,myDirection);
-
-  return new Adaptor3d_HSurfaceOfLinearExtrusion(*SurfacePtr) ;
-}
-
-//=======================================================================
-//function : IsUClosed
-//purpose  : 
-//=======================================================================
-
-Standard_Boolean Adaptor3d_SurfaceOfLinearExtrusion::IsUClosed() const 
-{
-  return myBasisCurve->IsClosed();
-}
-
-//=======================================================================
-//function : IsVClosed
-//purpose  : 
-//=======================================================================
-
-Standard_Boolean Adaptor3d_SurfaceOfLinearExtrusion::IsVClosed() const 
-{
-  return Standard_True;
-}
-
-//=======================================================================
-//function : IsUPeriodic
-//purpose  : 
-//=======================================================================
-
-Standard_Boolean Adaptor3d_SurfaceOfLinearExtrusion::IsUPeriodic() const 
-{
-  return myBasisCurve->IsPeriodic();
-}
-
-//=======================================================================
-//function : UPeriod
-//purpose  : 
-//=======================================================================
-
-Standard_Real Adaptor3d_SurfaceOfLinearExtrusion::UPeriod() const 
-{
-  return myBasisCurve->Period() ;
-}
-
-//=======================================================================
-//function : IsVPeriodic
-//purpose  : 
-//=======================================================================
-
-Standard_Boolean Adaptor3d_SurfaceOfLinearExtrusion::IsVPeriodic() const 
-{
-  return Standard_False;
-}
-
-//=======================================================================
-//function : VPeriod
-//purpose  : 
-//=======================================================================
-
-Standard_Real Adaptor3d_SurfaceOfLinearExtrusion::VPeriod() const 
-{
-  Standard_DomainError::Raise("Adaptor3d_SurfaceOfLinearExtrusion::VPeriod");
-  return 0.0e0 ;
-}
-
-//=======================================================================
-//function : Value
-//purpose  : 
-//=======================================================================
-
-gp_Pnt Adaptor3d_SurfaceOfLinearExtrusion::Value(const Standard_Real U, 
-                                                 const Standard_Real V)
-     const 
-{
-  gp_Pnt P;
-  P = myBasisCurve->Value(U);
-  P.Translate( V * gp_Vec(myDirection));
-  return P;
-}
-
-//=======================================================================
-//function : D0
-//purpose  : 
-//=======================================================================
-
-void Adaptor3d_SurfaceOfLinearExtrusion::D0(const Standard_Real U,
-                                            const Standard_Real V, 
-                                            gp_Pnt&             P) const 
-{
-  myBasisCurve->D0(U,P);
-  P.Translate( V * gp_Vec(myDirection));
-}
-
-//=======================================================================
-//function : D1
-//purpose  : 
-//=======================================================================
-
-void Adaptor3d_SurfaceOfLinearExtrusion::D1(const Standard_Real U, 
-                                            const Standard_Real V, 
-                                                  gp_Pnt& P, 
-                                                  gp_Vec& D1U, 
-                                                  gp_Vec& D1V) const 
-{
-  myBasisCurve->D1(U,P,D1U);
-  D0(U,V,P);
-  D1V = gp_Vec(myDirection);
-}
-
-//=======================================================================
-//function : D2
-//purpose  : 
-//=======================================================================
-
-void Adaptor3d_SurfaceOfLinearExtrusion::D2(const Standard_Real U, 
-                                            const Standard_Real V,
-                                            gp_Pnt& P, 
-                                            gp_Vec& D1U, gp_Vec& D1V,
-                                            gp_Vec& D2U, gp_Vec& D2V, 
-                                            gp_Vec& D2UV) const 
-{
-  myBasisCurve->D2(U,P,D1U,D2U);
-  D1V = gp_Vec(myDirection);
-  D2V.SetCoord( 0., 0., 0.);
-  D2UV.SetCoord( 0., 0., 0.);
-  D0(U,V,P);
-}
-
-//=======================================================================
-//function : D3
-//purpose  : 
-//=======================================================================
-
-void Adaptor3d_SurfaceOfLinearExtrusion::D3(const Standard_Real U, 
-                                            const Standard_Real V,
-                                            gp_Pnt& P,
-                                            gp_Vec& D1U, gp_Vec& D1V,
-                                            gp_Vec& D2U, gp_Vec& D2V, 
-                                            gp_Vec& D2UV,
-                                            gp_Vec& D3U, gp_Vec& D3V, 
-                                            gp_Vec& D3UUV, gp_Vec& D3UVV) const 
-{
-  myBasisCurve->D3(U,P,D1U,D2U,D3U);
-  D1V = gp_Vec(myDirection);
-  D2V.SetCoord( 0., 0., 0.);
-  D2UV.SetCoord( 0., 0., 0.);
-  D3V.SetCoord( 0., 0., 0.);
-  D3UUV.SetCoord( 0., 0., 0.);
-  D3UVV.SetCoord( 0., 0., 0.);
-  D0(U,V,P);
-}
-
-//=======================================================================
-//function : DN
-//purpose  : 
-//=======================================================================
-
-gp_Vec Adaptor3d_SurfaceOfLinearExtrusion::DN
-(const Standard_Real    U, 
-// const Standard_Real    V,
- const Standard_Real    ,
- const Standard_Integer NU, 
- const Standard_Integer NV) const 
-{
-  if ( (NU+NV)<1 || NU<0 || NV<0) {
-    Standard_DomainError::Raise("Adaptor3d_SurfaceOfLinearExtrusion::DN");
-    return gp_Vec();
-  }
-  else {
-    if (NU == 0 && NV ==1) return gp_Vec( myDirection);
-    else if (NV == 0)      return myBasisCurve->DN(U,NU);
-    else                   return gp_Vec( 0., 0., 0.);
-  }   
-}
-
-//=======================================================================
-//function : UResolution
-//purpose  : 
-//=======================================================================
-
-Standard_Real Adaptor3d_SurfaceOfLinearExtrusion::UResolution
-(const Standard_Real R3d) const 
-{
-  return myBasisCurve->Resolution(R3d);
-}
-
-//=======================================================================
-//function : VResolution
-//purpose  : 
-//=======================================================================
-
-Standard_Real Adaptor3d_SurfaceOfLinearExtrusion::VResolution
-(const Standard_Real R3d) const 
-{
-  return R3d;
-}
-
-//=======================================================================
-//function : GetType
-//purpose  : 
-//=======================================================================
-
-GeomAbs_SurfaceType Adaptor3d_SurfaceOfLinearExtrusion::GetType() const 
-{
-  switch ( myBasisCurve->GetType()) {
-    
-  case GeomAbs_Line:
-    {
-      gp_Dir D = myBasisCurve->Line().Direction();
-      if (myDirection.IsParallel( D, Precision::Angular())) {
-        return GeomAbs_SurfaceOfExtrusion;
-      }
-      else {
-        return GeomAbs_Plane;
-      }
-    }
-    
-  case GeomAbs_Circle:
-    {
-      gp_Dir D = (myBasisCurve->Circle()).Axis().Direction();
-      if ( myDirection.IsParallel( D, Precision::Angular())) {
-        return GeomAbs_Cylinder;
-      }
-      // JAG 10.11.95
-      else if (myDirection.IsNormal(D, Precision::Angular())) {
-        return GeomAbs_Plane;
-      }
-      else {
-        return GeomAbs_SurfaceOfExtrusion;
-      }
-    }
-    // JAG 10.11.95
-    
-  case GeomAbs_Ellipse:
-    {
-      gp_Dir D = (myBasisCurve->Ellipse()).Axis().Direction();
-      if (myDirection.IsNormal(D, Precision::Angular())) {
-        return GeomAbs_Plane;
-      }
-      else {
-        return GeomAbs_SurfaceOfExtrusion;
-      }
-    }
-    
-  case GeomAbs_Parabola:
-    {
-      gp_Dir D = (myBasisCurve->Parabola()).Axis().Direction();
-      if (myDirection.IsNormal(D, Precision::Angular())) {
-        return GeomAbs_Plane;
-      }
-      else {
-        return GeomAbs_SurfaceOfExtrusion;
-      }
-    }
-    
-  case GeomAbs_Hyperbola:
-    {
-      gp_Dir D = (myBasisCurve->Hyperbola()).Axis().Direction();
-      if (myDirection.IsNormal(D, Precision::Angular())) {
-        return GeomAbs_Plane;
-      }
-      else {
-        return GeomAbs_SurfaceOfExtrusion;
-      }
-    }
-
-  default:
-    return GeomAbs_SurfaceOfExtrusion;
-
-  }
-}
-
-//=======================================================================
-//function : Plane
-//purpose  : 
-//=======================================================================
-
-gp_Pln Adaptor3d_SurfaceOfLinearExtrusion::Plane() const 
-{ 
-  Standard_NoSuchObject_Raise_if (GetType() != GeomAbs_Plane,
-                  "Adaptor3d_SurfaceOfLinearExtrusion::Plane");
-/*
-  gp_Pnt P;
-  gp_Vec Ox, Oy;
-  D1( 0., 0., P, Ox, Oy);
-  gp_Ax3 Ax3(P,gp_Dir(Ox^Oy),gp_Dir(Ox));
-  if (gp_Dir(Oy).Dot(Ax3.YDirection())<0.){
-    Ax3.YReverse();
-  }
-  return gp_Pln(Ax3);
-*/
-
-  gp_Pnt P;
-  gp_Vec D1u, newZ;
-  Standard_Real UFirst = myBasisCurve->FirstParameter();
-  Standard_Real ULast  = myBasisCurve->LastParameter();
-  if (Precision::IsNegativeInfinite(UFirst) &&
-      Precision::IsPositiveInfinite(ULast)) {
-    UFirst = -100.;
-    ULast  = 100.;
-  }
-  else if (Precision::IsNegativeInfinite(UFirst)) {
-    UFirst = ULast - 200.;
-  }
-  else if (Precision::IsPositiveInfinite(ULast)) {
-    ULast = UFirst + 200.;
-  }
-  Standard_Real deltau = (ULast-UFirst)/20.;
-  for (Standard_Integer i =1; i<=21; i++) {
-    Standard_Real prm = UFirst + (i-1)*deltau;
-    myBasisCurve->D1(prm,P,D1u);
-    newZ = D1u.Normalized().Crossed(myDirection);
-    if (newZ.Magnitude() > 1.e-12) break;
-  }
-  gp_Ax3 Ax3(P,gp_Dir(newZ),gp_Dir(D1u));
-  if (myDirection.Dot(Ax3.YDirection())<0.){
-    Ax3.YReverse();
-  }
-  return gp_Pln(Ax3);
-}
-
-
-//=======================================================================
-//function : Cylinder
-//purpose  : 
-//=======================================================================
-
-gp_Cylinder Adaptor3d_SurfaceOfLinearExtrusion::Cylinder() const 
-{
-  Standard_NoSuchObject_Raise_if 
-    (GetType() != GeomAbs_Cylinder,
-     "Adaptor3d_SurfaceOfLinearExtrusion::Cylinder");
-
-  gp_Circ C =  myBasisCurve->Circle() ;
-  gp_Ax3 Ax3(C.Position());
-  if(myDirection.Dot((C.Axis()).Direction())<0.){
-    Ax3.ZReverse();
-  }
-  return gp_Cylinder(Ax3,C.Radius());
-}
-
-//=======================================================================
-//function : Cone
-//purpose  : 
-//=======================================================================
-
-gp_Cone Adaptor3d_SurfaceOfLinearExtrusion::Cone() const 
-{
-  Standard_NoSuchObject::Raise("Adaptor3d_SurfaceOfLinearExtrusion::Cone");
-  return gp_Cone();
-}
-
-//=======================================================================
-//function : Sphere
-//purpose  : 
-//=======================================================================
-
-gp_Sphere Adaptor3d_SurfaceOfLinearExtrusion::Sphere() const 
-{
-  Standard_NoSuchObject::Raise("Adaptor3d_SurfaceOfLinearExtrusion::Sphere");
-  return gp_Sphere();
-}
-
-//=======================================================================
-//function : Torus
-//purpose  : 
-//=======================================================================
-
-gp_Torus Adaptor3d_SurfaceOfLinearExtrusion::Torus() const 
-{
-  Standard_NoSuchObject::Raise("Adaptor3d_SurfaceOfLinearExtrusion::Torus");
-  return gp_Torus();
-}
-
-
-//=======================================================================
-//function : Axis
-//purpose  : 
-//=======================================================================
-
-gp_Ax1 Adaptor3d_SurfaceOfLinearExtrusion::AxeOfRevolution() const 
-{
-  Standard_NoSuchObject::Raise("Adaptor3d_SurfaceOfLinearExtrusion::Axes");
-  return gp_Ax1();
-}
-
-//=======================================================================
-//function : UDegree
-//purpose  : 
-//=======================================================================
-
-Standard_Integer Adaptor3d_SurfaceOfLinearExtrusion::UDegree() const 
-{
-  return myBasisCurve -> Degree();
-}
-//=======================================================================
-//function : NbUPoles
-//purpose  : 
-//=======================================================================
-
-Standard_Integer Adaptor3d_SurfaceOfLinearExtrusion::NbUPoles() const 
-{
-  return myBasisCurve->NbPoles();
-}
-//=======================================================================
-//function : VDegree
-//purpose  : 
-//=======================================================================
-
-Standard_Integer Adaptor3d_SurfaceOfLinearExtrusion::VDegree() const 
-{
-  Standard_NoSuchObject::Raise("Adaptor3d_SurfaceOfLinearExtrusion::VDegree");
-  return 0;
-}
-
-//=======================================================================
-//function : NbVPoles
-//purpose  : 
-//=======================================================================
-
-Standard_Integer Adaptor3d_SurfaceOfLinearExtrusion::NbVPoles() const 
-{
-  Standard_NoSuchObject::Raise("Adaptor3d_SurfaceOfLinearExtrusion::NbVPoles");
-  return 0;
-}
-
-//=======================================================================
-//function : NbUKnots
-//purpose  : 
-//=======================================================================
-
-Standard_Integer Adaptor3d_SurfaceOfLinearExtrusion::NbUKnots() const 
-{
-  Standard_NoSuchObject::Raise
-    ("Adaptor3d_SurfaceOfLinearExtrusion::NbUKnots");
-  return 0;
-}
-//=======================================================================
-//function : NbVKnots
-//purpose  : 
-//=======================================================================
-
-Standard_Integer Adaptor3d_SurfaceOfLinearExtrusion::NbVKnots() const 
-{
-  Standard_NoSuchObject::Raise("Adaptor3d_SurfaceOfLinearExtrusion::NbVKnots");
-  return 0;
-}
-//=======================================================================
-//function : IsURational
-//purpose  : 
-//=======================================================================
-
-Standard_Boolean Adaptor3d_SurfaceOfLinearExtrusion::IsURational() const 
-{
-  Standard_NoSuchObject::Raise
-    ("Adaptor3d_SurfaceOfLinearExtrusion::IsURational");
-  return Standard_False;
-}
-//=======================================================================
-//function : IsVRational
-//purpose  : 
-//=======================================================================
-
-Standard_Boolean Adaptor3d_SurfaceOfLinearExtrusion::IsVRational() const 
-{
-  Standard_NoSuchObject::Raise
-    ("Adaptor3d_SurfaceOfLinearExtrusion::IsVRational");
-  return Standard_False;
-}
-//=======================================================================
-//function : Bezier
-//purpose  : 
-//=======================================================================
-
-
-Handle(Geom_BezierSurface)  Adaptor3d_SurfaceOfLinearExtrusion::Bezier() const 
-{
-  Standard_NoSuchObject::Raise("Adaptor3d_SurfaceOfLinearExtrusion::Axes");
-  return Handle(Geom_BezierSurface)() ;
-}
-
-//=======================================================================
-//function : BSpline
-//purpose  : 
-//=======================================================================
-
-Handle(Geom_BSplineSurface)  Adaptor3d_SurfaceOfLinearExtrusion::BSpline() const 
-{
-  Standard_NoSuchObject::Raise("Adaptor3d_SurfaceOfLinearExtrusion::Axes");
-  return Handle(Geom_BSplineSurface)() ;
-}
-
-//=======================================================================
-//function : Direction
-//purpose  : 
-//=======================================================================
-
-gp_Dir Adaptor3d_SurfaceOfLinearExtrusion::Direction() const
-{
-  return myDirection;
-}
-
-//=======================================================================
-//function : BasisCurve
-//purpose  : 
-//=======================================================================
-
-Handle(Adaptor3d_HCurve) Adaptor3d_SurfaceOfLinearExtrusion::BasisCurve() const 
-{
-  return myBasisCurve;
-}