CommitLineData
b311480e 1-- Created on: 1991-07-25
2-- Created by: Laurent PAINNOT
3-- Copyright (c) 1991-1999 Matra Datavision
5--
6-- The content of this file is subject to the Open CASCADE Technology Public
7-- License Version 6.5 (the "License"). You may not use the content of this file
10--
11-- The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
12-- main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
13--
15-- distributed on an "AS IS" basis, without warranty of any kind, and the
16-- Initial Developer hereby disclaims all such warranties, including without
17-- limitation, any warranties of merchantability, fitness for a particular
18-- purpose or non-infringement. Please see the License for the specific terms
19-- and conditions governing the rights and limitations under the License.
7fd59977 20
21
22
b311480e 23
24generic class ResolConstraint from AppParCurves
7fd59977 25 (MultiLine as any;
26 ToolLine as any) -- as ToolLine(MultiLine)
27
28
29 ---Purpose: This classe describes the algorithm to find the approximate
30 -- solution of a MultiLine with constraints. The resolution
31 -- algorithm is the Uzawa method. See the math package
33 -- All the tangencies of MultiPointConstraint's points
34 -- will be colinear.
35 -- Be careful of the curvature: it is possible to have some
36 -- curvAature points only for one curve. In this case, the Uzawa
37 -- method is used with a non-linear resolution, much more longer.
38
39
40uses Matrix from math,
41 Vector from math,
42 Array1OfInteger from TColStd,
43 MultiCurve from AppParCurves,
44 HArray1OfConstraintCouple from AppParCurves
45
46
47raises OutOfRange from Standard
48
49is
50
51 Create(SSP: MultiLine; SCurv: in out MultiCurve;
52 FirstPoint, LastPoint: Integer;
53 Constraints: HArray1OfConstraintCouple;
54 Bern, DerivativeBern: Matrix; Tolerance: Real = 1.0e-10)
55 ---Purpose: Given a MultiLine SSP with constraints points, this
56 -- algorithm finds the best curve solution to approximate it.
57 -- The poles from SCurv issued for example from the least
58 -- squares are used as a guess solution for the uzawa
59 -- algorithm. The tolerance used in the Uzawa algorithms
60 -- is Tolerance.
61 -- A is the Bernstein matrix associated to the MultiLine
62 -- and DA is the derivative bernstein matrix.(They can come
63 -- from an approximation with ParLeastSquare.)
64 -- The MultiCurve is modified. New MultiPoles are given.
65
66
67 returns ResolConstraint from AppParCurves;
68
69
70 IsDone(me)
71 ---Purpose: returns True if all has been correctly done.
72
73 returns Boolean
74 is static;
75
76
77 Error(me)
78 ---Purpose: returns the maximum difference value between the curve
79 -- and the given points.
80
81 returns Real
82 is static;
83
84
85 ConstraintMatrix(me)
86 ---Purpose:
87 ---C++: return const&
88
89 returns Matrix
90 is static;
91
92
93 Duale(me)
94 ---Purpose: returns the duale variables of the system.
95 ---C++: return const&
96 returns Vector
97 is static;
98
99
100 ConstraintDerivative(me: in out; SSP: MultiLine; Parameters: Vector;
101 Deg: Integer; DA: Matrix)
102 ---Purpose: Returns the derivative of the constraint matrix.
103 ---C++: return const&
104 returns Matrix
105 is static;
106
107
108 InverseMatrix(me)
109 ---Purpose: returns the Inverse of Cont*Transposed(Cont), where
110 -- Cont is the constraint matrix for the algorithm.
111 ---C++: return const&
112
113 returns Matrix
114 is static;
115
116 NbConstraints(me; SSP: MultiLine; FirstPoint, LastPoint: Integer;
117 TheConstraints: HArray1OfConstraintCouple)
118 ---Purpose: is used internally to create the fields.
119
120 returns Integer
121 is static protected;
122
123
124 NbColumns(me; SSP: MultiLine; Deg: Integer)
125 ---Purpose: is internally used for the fields creation.
126
127 returns Integer
128 is static protected;
129
130
131fields
132
133Done: Boolean;
134Err: Real;
135Cont: Matrix;
136DeCont: Matrix;
137Secont: Vector;
138CTCinv: Matrix;
139Vardua: Vector;
140IncPass: Integer;
141IncTan: Integer;
142IncCurv: Integer;
143IPas: Array1OfInteger;
144ITan: Array1OfInteger;
145ICurv: Array1OfInteger;
146
147end ResolConstraint;