0027892: Construction error in offset
[occt.git] / src / Geom / Geom_OffsetSurface.cxx
index 9eda42e..156f2fd 100644 (file)
@@ -49,6 +49,7 @@
 #include <GeomAbs_CurveType.hxx>
 #include <GeomAbs_IsoType.hxx>
 #include <GeomAbs_Shape.hxx>
+#include <GeomAdaptor_Surface.hxx>
 #include <GeomEvaluator_OffsetSurface.hxx>
 #include <gp.hxx>
 #include <gp_Dir.hxx>
@@ -220,15 +221,15 @@ void Geom_OffsetSurface::SetBasisSurface (const Handle(Geom_Surface)& S,
   
   equivSurf = Surface();
 
-  if (basisSurf->IsKind(STANDARD_TYPE(Geom_BSplineSurface)) ||
-      basisSurf->IsKind(STANDARD_TYPE(Geom_BezierSurface)))
+  if (aCheckingSurf->IsKind(STANDARD_TYPE(Geom_BSplineSurface)) ||
+      aCheckingSurf->IsKind(STANDARD_TYPE(Geom_BezierSurface)))
   {
     // Tolerance en dur pour l'instant ,mais on devrait la proposer dans le constructeur
     // et la mettre en champ, on pourrait utiliser par exemple pour l'extraction d'iso 
     // et aussi pour les singularite. Pour les surfaces osculatrices, on l'utilise pour
     // detecter si une iso est degeneree.
     const Standard_Real Tol = Precision::Confusion(); //0.0001;
-    myOscSurf = new Geom_OsculatingSurface(basisSurf, Tol);
+    myOscSurf = new Geom_OsculatingSurface(aCheckingSurf, Tol);
   }
 
   // Surface value calculator
@@ -456,7 +457,7 @@ public:
     Standard_Integer *ErrorCode);
 
 private:
-  Handle(Geom_Surface) CurrentSurface;
+  GeomAdaptor_Surface CurrentSurface;
   Standard_Real IsoPar;
 };
 
@@ -469,14 +470,14 @@ void Geom_OffsetSurface_UIsoEvaluator::Evaluate(Standard_Integer *,/*Dimension*/
 { 
   gp_Pnt P;
   if (*DerivativeRequest == 0) {
-    P = CurrentSurface->Value(IsoPar,*Parameter);
+    P = CurrentSurface.Value(IsoPar,*Parameter);
     Result[0] = P.X();
     Result[1] = P.Y();
     Result[2] = P.Z();
   }
   else {
     gp_Vec DU,DV;
-    CurrentSurface->D1(IsoPar,*Parameter,P,DU,DV);
+    CurrentSurface.D1(IsoPar,*Parameter,P,DU,DV);
     Result[0] = DV.X();
     Result[1] = DV.Y();
     Result[2] = DV.Z();
@@ -685,7 +686,7 @@ Standard_Boolean Geom_OffsetSurface::IsUClosed () const
     Handle(Geom_RectangularTrimmedSurface) St = 
       Handle(Geom_RectangularTrimmedSurface)::DownCast(SBasis);
 
-    Handle(Geom_Surface) S = Handle(Geom_Surface)::DownCast(St->BasisSurface());
+    Handle(Geom_Surface) S = St->BasisSurface();
     if (S->IsKind (STANDARD_TYPE(Geom_ElementarySurface))) {
       UClosed = SBasis->IsUClosed();
     }
@@ -737,7 +738,7 @@ Standard_Boolean Geom_OffsetSurface::IsVClosed () const
     Handle(Geom_RectangularTrimmedSurface) St = 
       Handle(Geom_RectangularTrimmedSurface)::DownCast(SBasis);
 
-    Handle(Geom_Surface) S = Handle(Geom_Surface)::DownCast(St->BasisSurface());
+    Handle(Geom_Surface) S = St->BasisSurface();
     if (S->IsKind (STANDARD_TYPE(Geom_ElementarySurface))) {
       VClosed = SBasis->IsVClosed();
     }