0025748: Parallel version of progress indicator
[occt.git] / src / Plate / Plate_Plate.hxx
1 // Created on: 1995-10-18
2 // Created by: Andre LIEUTIER
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 #ifndef _Plate_Plate_HeaderFile
18 #define _Plate_Plate_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_DefineAlloc.hxx>
22 #include <Standard_Handle.hxx>
23
24 #include <Standard_Integer.hxx>
25 #include <Standard_Address.hxx>
26 #include <Standard_Boolean.hxx>
27 #include <Plate_SequenceOfPinpointConstraint.hxx>
28 #include <Plate_SequenceOfLinearXYZConstraint.hxx>
29 #include <Plate_SequenceOfLinearScalarConstraint.hxx>
30 #include <Standard_Real.hxx>
31 #include <TColgp_HArray2OfXYZ.hxx>
32 #include <TColgp_SequenceOfXY.hxx>
33 #include <Message_ProgressScope.hxx>
34
35 class Plate_PinpointConstraint;
36 class Plate_LinearXYZConstraint;
37 class Plate_LinearScalarConstraint;
38 class Plate_GlobalTranslationConstraint;
39 class Plate_LineConstraint;
40 class Plate_PlaneConstraint;
41 class Plate_SampledCurveConstraint;
42 class Plate_GtoCConstraint;
43 class Plate_FreeGtoCConstraint;
44 class gp_XYZ;
45 class gp_XY;
46 class math_Matrix;
47
48
49 //! This class implement a variationnal spline algorithm able
50 //! to define a two variable function satisfying some constraints
51 //! and minimizing an energy like criterion.
52 class Plate_Plate 
53 {
54 public:
55
56   DEFINE_STANDARD_ALLOC
57
58   
59   Standard_EXPORT Plate_Plate();
60   
61   Standard_EXPORT Plate_Plate(const Plate_Plate& Ref);
62   
63   Standard_EXPORT Plate_Plate& Copy (const Plate_Plate& Ref);
64 Plate_Plate& operator= (const Plate_Plate& Ref)
65 {
66   return Copy(Ref);
67 }
68   
69   Standard_EXPORT void Load (const Plate_PinpointConstraint& PConst);
70   
71   Standard_EXPORT void Load (const Plate_LinearXYZConstraint& LXYZConst);
72   
73   Standard_EXPORT void Load (const Plate_LinearScalarConstraint& LScalarConst);
74   
75   Standard_EXPORT void Load (const Plate_GlobalTranslationConstraint& GTConst);
76   
77   Standard_EXPORT void Load (const Plate_LineConstraint& LConst);
78   
79   Standard_EXPORT void Load (const Plate_PlaneConstraint& PConst);
80   
81   Standard_EXPORT void Load (const Plate_SampledCurveConstraint& SCConst);
82   
83   Standard_EXPORT void Load (const Plate_GtoCConstraint& GtoCConst);
84   
85   Standard_EXPORT void Load (const Plate_FreeGtoCConstraint& FGtoCConst);
86   
87   Standard_EXPORT void SolveTI (const Standard_Integer ord = 4, 
88                                 const Standard_Real anisotropie = 1.0, 
89                                 const Message_ProgressRange& theProgress = Message_ProgressRange());
90   
91   //! returns True if all has been correctly done.
92   Standard_EXPORT Standard_Boolean IsDone() const;
93   
94   Standard_EXPORT void destroy();
95 ~Plate_Plate()
96 {
97   destroy();
98 }
99   
100   //! reset the Plate in the initial state
101   //! ( same as after Create())
102   Standard_EXPORT void Init();
103   
104   Standard_EXPORT gp_XYZ Evaluate (const gp_XY& point2d) const;
105   
106   Standard_EXPORT gp_XYZ EvaluateDerivative (const gp_XY& point2d, const Standard_Integer iu, const Standard_Integer iv) const;
107   
108   Standard_EXPORT void CoefPol (Handle(TColgp_HArray2OfXYZ)& Coefs) const;
109   
110   Standard_EXPORT void SetPolynomialPartOnly (const Standard_Boolean PPOnly = Standard_True);
111   
112   Standard_EXPORT Standard_Integer Continuity() const;
113   
114   Standard_EXPORT void UVBox (Standard_Real& UMin, Standard_Real& UMax, Standard_Real& VMin, Standard_Real& VMax) const;
115   
116   Standard_EXPORT void UVConstraints (TColgp_SequenceOfXY& Seq) const;
117
118
119
120
121 protected:
122
123
124
125
126
127 private:
128
129   
130   Standard_EXPORT Standard_Real SolEm (const gp_XY& point2d, const Standard_Integer iu, const Standard_Integer iv) const;
131   
132     Standard_Real Polm (const gp_XY& point2d, const Standard_Integer iu, const Standard_Integer iv, const Standard_Integer idu, const Standard_Integer idv) const;
133   
134     Standard_Integer& Deru (const Standard_Integer index) const;
135   
136     Standard_Integer& Derv (const Standard_Integer index) const;
137   
138     gp_XYZ& Solution (const Standard_Integer index) const;
139   
140     gp_XY& Points (const Standard_Integer index) const;
141   
142   Standard_EXPORT void SolveTI1 (const Standard_Integer IterationNumber,
143                                  const Message_ProgressRange& theProgress = Message_ProgressRange());
144   
145   Standard_EXPORT void SolveTI2 (const Standard_Integer IterationNumber,
146                                  const Message_ProgressRange& theProgress = Message_ProgressRange());
147   
148   Standard_EXPORT void SolveTI3 (const Standard_Integer IterationNumber,
149                                  const Message_ProgressRange& theProgress = Message_ProgressRange());
150   
151   Standard_EXPORT void fillXYZmatrix (math_Matrix& mat, const Standard_Integer i0, const Standard_Integer j0, const Standard_Integer ncc1, const Standard_Integer ncc2) const;
152
153
154   Standard_Integer order;
155   Standard_Integer n_el;
156   Standard_Integer n_dim;
157   Standard_Address solution;
158   Standard_Address points;
159   Standard_Address deru;
160   Standard_Address derv;
161   Standard_Boolean OK;
162   Plate_SequenceOfPinpointConstraint myConstraints;
163   Plate_SequenceOfLinearXYZConstraint myLXYZConstraints;
164   Plate_SequenceOfLinearScalarConstraint myLScalarConstraints;
165   Standard_Real ddu[10];
166   Standard_Real ddv[10];
167   Standard_Integer maxConstraintOrder;
168   Standard_Boolean PolynomialPartOnly;
169   Standard_Real Uold;
170   Standard_Real Vold;
171   Standard_Real U2;
172   Standard_Real R;
173   Standard_Real L;
174
175
176 };
177
178
179 #include <Plate_Plate.lxx>
180
181
182
183
184
185 #endif // _Plate_Plate_HeaderFile