0024023: Revamp the OCCT Handle -- downcast (automatic)
[occt.git] / src / GeomFill / GeomFill_SimpleBound.cxx
1 // Created on: 1995-11-03
2 // Created by: Laurent BOURESCHE
3 // Copyright (c) 1995-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 #include <GeomFill_SimpleBound.ixx>
18 #include <Law_BSpFunc.hxx>
19 #include <Law.hxx>
20
21 //=======================================================================
22 //function : GeomFill_SimpleBound
23 //purpose  : 
24 //=======================================================================
25
26 GeomFill_SimpleBound::GeomFill_SimpleBound
27 (const Handle(Adaptor3d_HCurve)& Curve,
28  const Standard_Real           Tol3d,
29  const Standard_Real           Tolang) :
30  GeomFill_Boundary(Tol3d,Tolang), myC3d(Curve)
31 {
32 }
33
34 //=======================================================================
35 //function : Value
36 //purpose  : 
37 //=======================================================================
38
39 gp_Pnt GeomFill_SimpleBound::Value(const Standard_Real U) const 
40 {
41   Standard_Real x = U;
42   if(!myPar.IsNull()) x = myPar->Value(U);
43   return myC3d->Value(x);
44 }
45
46
47 //=======================================================================
48 //function : D1
49 //purpose  : 
50 //=======================================================================
51
52 void GeomFill_SimpleBound::D1(const Standard_Real U, 
53                               gp_Pnt& P, 
54                               gp_Vec& V) const 
55 {
56   Standard_Real x = U, dx = 1.;
57   if(!myPar.IsNull()) myPar->D1(U,x,dx);
58   myC3d->D1(x, P, V);
59   V.Multiply(dx);
60 }
61
62 //=======================================================================
63 //function : Reparametrize
64 //purpose  : 
65 //=======================================================================
66
67 void GeomFill_SimpleBound::Reparametrize(const Standard_Real First, 
68                                          const Standard_Real Last,
69                                          const Standard_Boolean HasDF, 
70                                          const Standard_Boolean HasDL, 
71                                          const Standard_Real DF, 
72                                          const Standard_Real DL,
73                                          const Standard_Boolean Rev)
74 {
75   Handle(Law_BSpline) curve = Law::Reparametrize(myC3d->Curve(),
76                                                  First,Last,
77                                                  HasDF,HasDL,DF,DL,
78                                                  Rev,30);
79   myPar = new Law_BSpFunc();
80   Handle(Law_BSpFunc)::DownCast (myPar)->SetCurve(curve);
81 }
82
83 //=======================================================================
84 //function : Bounds
85 //purpose  : 
86 //=======================================================================
87
88 void GeomFill_SimpleBound::Bounds(Standard_Real& First, 
89                                   Standard_Real& Last) const 
90 {
91   if(!myPar.IsNull()) myPar->Bounds(First,Last);
92   else {
93     First = myC3d->FirstParameter();
94     Last = myC3d->LastParameter();
95   }
96 }
97
98
99 //=======================================================================
100 //function : IsDegenerated
101 //purpose  : 
102 //=======================================================================
103
104 Standard_Boolean GeomFill_SimpleBound::IsDegenerated() const 
105 {
106   return Standard_False;
107 }