0031035: Coding - uninitialized class fields reported by Visual Studio Code Analysis
[occt.git] / src / Law / Law_Linear.cxx
1 // Created on: 1995-01-12
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 // pmn -> 17/01/1996 added : Continuity, (Nb)Interals, D2, Trim
18
19 #include <Law_Function.hxx>
20 #include <Law_Linear.hxx>
21 #include <Standard_OutOfRange.hxx>
22 #include <Standard_Type.hxx>
23
24 IMPLEMENT_STANDARD_RTTIEXT(Law_Linear,Law_Function)
25
26 Law_Linear::Law_Linear ()
27 : valdeb(0.0),
28   valfin(0.0),
29   pdeb(0.0),
30   pfin(0.0)
31 {
32 }
33
34
35 void Law_Linear::Set (const Standard_Real Pdeb,
36                       const Standard_Real Valdeb,
37                       const Standard_Real Pfin,
38                       const Standard_Real Valfin)
39 {
40   pdeb = Pdeb;
41   pfin = Pfin;
42   valdeb = Valdeb;
43   valfin = Valfin;
44 }
45
46 //=======================================================================
47 //function : Continuity
48 //purpose  : 
49 //=======================================================================
50 GeomAbs_Shape Law_Linear::Continuity() const 
51 {
52   return GeomAbs_CN;
53 }
54
55 //=======================================================================
56 //function : NbIntervals
57 //purpose  : 
58 //=======================================================================
59 //Standard_Integer Law_Linear::NbIntervals(const GeomAbs_Shape S) const 
60 Standard_Integer Law_Linear::NbIntervals(const GeomAbs_Shape ) const 
61 {
62    return 1;
63 }
64
65 //=======================================================================
66 //function : Intervals
67 //purpose  : 
68 //=======================================================================
69 void Law_Linear::Intervals(TColStd_Array1OfReal& T,
70 //                           const GeomAbs_Shape S) const 
71                            const GeomAbs_Shape ) const 
72 {
73   T.SetValue(T.Lower(), pdeb);
74   T.SetValue(T.Upper(), pfin);
75 }
76
77 Standard_Real Law_Linear::Value(const Standard_Real X)
78 {
79   return ((X-pdeb)*valfin + (pfin-X)*valdeb)/(pfin-pdeb);
80 }
81
82 void Law_Linear::D1(const Standard_Real X,
83                     Standard_Real& F,
84                     Standard_Real& D)
85 {
86   F = ((X-pdeb)*valfin + (pfin-X)*valdeb)/(pfin-pdeb);
87   D = (valfin-valdeb)/(pfin-pdeb);
88 }
89 void Law_Linear::D2(const Standard_Real X,
90                     Standard_Real& F,
91                     Standard_Real& D,
92                     Standard_Real& D2)
93 {
94   F = ((X-pdeb)*valfin + (pfin-X)*valdeb)/(pfin-pdeb);
95   D = (valfin-valdeb)/(pfin-pdeb);
96   D2 = 0;
97 }
98
99 //=======================================================================
100 //function : Trim
101 //purpose  : 
102 //=======================================================================
103
104 Handle(Law_Function) Law_Linear::Trim(const Standard_Real PFirst, 
105                                       const Standard_Real PLast, 
106 //                                    const Standard_Real Tol) const 
107                                       const Standard_Real ) const 
108 {
109   Handle(Law_Linear) l = new (Law_Linear)();
110   Standard_Real Vdeb, Vfin;
111   Vdeb = (( PFirst-pdeb)*valfin + (pfin-PFirst)*valdeb)/(pfin-pdeb);
112   Vfin = (( PLast-pdeb)*valfin + (pfin-PLast)*valdeb)/(pfin-pdeb);
113   l->Set(PFirst, Vdeb, PLast, Vfin);
114
115   return l;
116 }
117
118
119 void Law_Linear::Bounds(Standard_Real& PFirst,
120                         Standard_Real& PLast)
121 {
122   PFirst = pdeb;
123   PLast  = pfin;
124 }