b311480e |
1 | // Created on: 1998-02-02 |
2 | // Created by: Philippe MANGIN |
3 | // Copyright (c) 1998-1999 Matra Datavision |
973c2be1 |
4 | // Copyright (c) 1999-2014 OPEN CASCADE SAS |
b311480e |
5 | // |
973c2be1 |
6 | // This file is part of Open CASCADE Technology software library. |
b311480e |
7 | // |
d5f74e42 |
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 |
973c2be1 |
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. |
b311480e |
13 | // |
973c2be1 |
14 | // Alternatively, this file may be used under the terms of Open CASCADE |
15 | // commercial license or contractual agreement. |
7fd59977 |
16 | |
7fd59977 |
17 | |
42cf5bc1 |
18 | #include <GeomFill_LocationLaw.hxx> |
19 | #include <GeomFill_LocFunction.hxx> |
7fd59977 |
20 | #include <gp_Mat.hxx> |
21 | #include <gp_Vec.hxx> |
22 | #include <TColgp_Array1OfPnt2d.hxx> |
23 | #include <TColgp_Array1OfVec2d.hxx> |
24 | |
25 | GeomFill_LocFunction::GeomFill_LocFunction(const Handle(GeomFill_LocationLaw)& Law) |
26 | :V(1,4), DV(1,4), D2V(1,4) |
27 | |
28 | { |
29 | myLaw = Law; |
30 | } |
31 | |
32 | Standard_Boolean GeomFill_LocFunction::D0(const Standard_Real Param, |
33 | // const Standard_Real First, |
34 | const Standard_Real , |
35 | // const Standard_Real Last) |
36 | const Standard_Real ) |
37 | { |
75259fc5 |
38 | gp_Mat aM; |
7fd59977 |
39 | Standard_Boolean B; |
75259fc5 |
40 | B = myLaw->D0(Param, aM, V.ChangeValue(1)); |
41 | V(2).SetXYZ(aM.Column(1)); |
42 | V(3).SetXYZ(aM.Column(2)); |
43 | V(4).SetXYZ(aM.Column(3)); |
7fd59977 |
44 | return B; |
45 | } |
46 | |
47 | Standard_Boolean GeomFill_LocFunction::D1(const Standard_Real Param, |
48 | // const Standard_Real First, |
49 | const Standard_Real , |
50 | // const Standard_Real Last) |
51 | const Standard_Real ) |
52 | { |
53 | TColgp_Array1OfPnt2d T1(1,1); |
54 | TColgp_Array1OfVec2d T2(1,1); |
75259fc5 |
55 | gp_Mat aM, aDM; |
7fd59977 |
56 | Standard_Boolean B; |
75259fc5 |
57 | B = myLaw->D1(Param, aM, V.ChangeValue(1), |
58 | aDM, DV.ChangeValue(1), |
7fd59977 |
59 | T1, T2); |
60 | |
75259fc5 |
61 | V(2).SetXYZ(aM.Column(1)); |
62 | V(3).SetXYZ(aM.Column(2)); |
63 | V(4).SetXYZ(aM.Column(3)); |
7fd59977 |
64 | |
75259fc5 |
65 | DV(2).SetXYZ(aDM.Column(1)); |
66 | DV(3).SetXYZ(aDM.Column(2)); |
67 | DV(4).SetXYZ(aDM.Column(3)); |
7fd59977 |
68 | return B; |
69 | } |
70 | |
71 | Standard_Boolean GeomFill_LocFunction::D2(const Standard_Real Param, |
72 | // const Standard_Real First, |
73 | const Standard_Real , |
74 | // const Standard_Real Last) |
75 | const Standard_Real ) |
76 | { |
77 | TColgp_Array1OfPnt2d T1(1,1); |
78 | TColgp_Array1OfVec2d T2(1,1), T3(1,1); |
75259fc5 |
79 | gp_Mat aM, aDM, aD2M; |
7fd59977 |
80 | Standard_Boolean B; |
75259fc5 |
81 | B = myLaw->D2(Param, aM, V.ChangeValue(1), |
82 | aDM, DV.ChangeValue(1), |
83 | aD2M, D2V.ChangeValue(1), |
7fd59977 |
84 | T1, T2, T3); |
75259fc5 |
85 | V(2).SetXYZ(aM.Column(1)); |
86 | V(3).SetXYZ(aM.Column(2)); |
87 | V(4).SetXYZ(aM.Column(3)); |
7fd59977 |
88 | |
75259fc5 |
89 | DV(2).SetXYZ(aDM.Column(1)); |
90 | DV(3).SetXYZ(aDM.Column(2)); |
91 | DV(4).SetXYZ(aDM.Column(3)); |
7fd59977 |
92 | |
93 | |
75259fc5 |
94 | D2V(2).SetXYZ(aD2M.Column(1)); |
95 | D2V(3).SetXYZ(aD2M.Column(2)); |
96 | D2V(4).SetXYZ(aD2M.Column(3)); |
7fd59977 |
97 | |
98 | return B; |
99 | } |
100 | |
101 | void GeomFill_LocFunction::DN(const Standard_Real Param, |
102 | const Standard_Real First, |
103 | const Standard_Real Last, |
104 | const Standard_Integer Order, |
105 | Standard_Real& Result, |
106 | Standard_Integer& Ier) |
107 | { |
108 | Standard_Boolean B; |
109 | Standard_Real * AddrResult = &Result; |
110 | const Standard_Real * LocalResult=NULL; |
111 | |
112 | Ier = 0; |
113 | switch (Order) { |
114 | case 0: |
115 | { |
116 | B = D0(Param, First, Last); |
117 | LocalResult = (Standard_Real*)(&V(1)); |
118 | break; |
119 | } |
120 | case 1: |
121 | { |
122 | B = D1(Param, First, Last); |
123 | LocalResult = (Standard_Real*)(&DV(1)); |
124 | break; |
125 | } |
126 | case 2: |
127 | { |
128 | B = D2(Param, First, Last); |
129 | LocalResult = (Standard_Real*)(&D2V(1)); |
130 | break; |
131 | } |
132 | default : |
133 | { |
134 | B = Standard_False; |
135 | } |
136 | } |
137 | if (!B) { |
138 | Ier = Order+1; |
139 | } |
140 | for (Standard_Integer ii=0; ii<=11; ii++) { |
141 | AddrResult[ii] = LocalResult[ii]; |
142 | } |
143 | } |