0024023: Revamp the OCCT Handle -- ambiguity
[occt.git] / src / BRepFill / BRepFill_Filling.cdl
1 -- Created on: 1998-08-26
2 -- Created by: Julia GERASIMOVA
3 -- Copyright (c) 1998-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 class Filling from BRepFill
18
19         ---Purpose: N-Side Filling
20         --  This algorithm avoids to build a face from:
21         --  * a set of edges defining the bounds of the face and some
22         --    constraints the surface support has to satisfy
23         --  * a set of edges and points defining some constraints
24         --    the support surface has to satisfy
25         --  * an initial surface to deform for satisfying the constraints
26         --  * a set of parameters to control the constraints.
27         --
28         --  The support surface of the face is computed by deformation
29         --  of the initial surface in order to satisfy the given constraints.
30         --  The set of bounding edges defines the wire of the face.
31         --
32         --  If no initial surface is given, the algorithm computes it
33         --  automatically.
34         --  If the set of edges is not connected (Free constraint)
35         --  missing edges are automatically computed.
36         --
37         --  Limitations:
38         --  * If some constraints are not compatible
39         --    The algorithm does not take them into account.
40         --    So the constraints will not be satisfyed in an area containing
41         --    the incompatibilitries.
42         --  * The constraints defining the bound of the face have to be
43         --    entered in order to have a continuous wire.
44         --
45         --  Other Applications:
46         --  * Deformation of a face to satisfy internal constraints
47         --  * Deformation of a face to improve Gi continuity with
48         --    connected faces
49         
50         ---Level: Advanced
51
52 uses
53     Shape from TopoDS,
54     Edge  from TopoDS,
55     Face  from TopoDS,
56     Pnt   from gp,
57     Shape from GeomAbs,
58     BuildPlateSurface          from GeomPlate,
59     SequenceOfEdgeFaceAndOrder from BRepFill,
60     SequenceOfFaceAndOrder     from BRepFill,
61     SequenceOfPointConstraint  from GeomPlate,
62     SequenceOfShape from TopTools,
63     ListOfShape  from TopTools,
64     DataMapOfShapeListOfShape from TopTools,
65     SequenceOfPnt from TColgp
66
67 raises
68     NotDone,
69     OutOfRange,
70     ConstructionError
71
72 is
73     Create( Degree      : Integer from Standard = 3;
74             NbPtsOnCur  : Integer from Standard = 15;
75             NbIter      : Integer from Standard = 2;
76             Anisotropie : Boolean from Standard = Standard_False;
77             Tol2d       : Real    from Standard = 0.00001;
78             Tol3d       : Real    from Standard = 0.0001;
79             TolAng      : Real    from Standard = 0.01;
80             TolCurv     : Real    from Standard = 0.1;
81             MaxDeg      : Integer from Standard = 8;
82             MaxSegments : Integer from Standard = 9 )
83     ---Purpose: Constructor
84     --
85     returns Filling from BRepFill;
86     
87
88     SetConstrParam( me : in out; Tol2d   : Real    from Standard = 0.00001;
89                                  Tol3d   : Real    from Standard = 0.0001;
90                                  TolAng  : Real    from Standard = 0.01;
91                                  TolCurv : Real    from Standard = 0.1 );
92     ---Purpose: Sets the values of Tolerances used to control the constraint.
93     --  Tol2d:
94     --  Tol3d:   it is the maximum distance allowed between the support surface
95     --           and the constraints
96     --  TolAng:  it is the maximum angle allowed between the normal of the surface
97     --           and the constraints
98     --  TolCurv: it is the maximum difference of curvature allowed between
99     --           the surface and the constraint
100     
101     SetResolParam( me : in out; Degree      : Integer from Standard = 3;
102                                 NbPtsOnCur  : Integer from Standard = 15;
103                                 NbIter      : Integer from Standard = 2;
104                                 Anisotropie : Boolean from Standard = Standard_False );
105     ---Purpose: Sets the parameters used for resolution.
106     --  The default values of these parameters have been chosen for a good
107     --  ratio quality/performance.
108     --  Degree:      it is the order of energy criterion to minimize for computing
109     --               the deformation of the surface.
110     --               The default value is 3
111     --               The recommanded value is i+2 where i is the maximum order of the
112     --               constraints.
113     --  NbPtsOnCur:  it is the average number of points for discretisation
114     --               of the edges.
115     --  NbIter:      it is the maximum number of iterations of the process.
116     --               For each iteration the number of discretisation points is
117     --               increased.
118     --  Anisotropie: 
119     
120     SetApproxParam( me : in out; MaxDeg      : Integer from Standard = 8;
121                                  MaxSegments : Integer from Standard = 9 );
122     ---Purpose: Sets the parameters used for approximation of the surface
123     --
124     
125
126     LoadInitSurface( me : in out; aFace : Face from TopoDS );
127     ---Purpose: Loads the initial Surface
128     --          The initial surface must have orthogonal local coordinates,
129     --          i.e. partial derivatives dS/du and dS/dv must be orthogonal
130     --          at each point of surface.
131     --          If this condition breaks, distortions of resulting surface
132     --          are possible.
133     
134
135     Add( me : in out; anEdge : Edge from TopoDS;
136                       Order  : Shape from GeomAbs;
137                       IsBound : Boolean from Standard = Standard_True )
138     returns Integer from Standard
139     ---Purpose: Adds a new constraint which also defines an edge of the wire
140     --          of the face
141     --  Order: Order of the constraint:
142     --         GeomAbs_C0 : the surface has to pass by 3D representation
143     --                      of the edge
144     --         GeomAbs_G1 : the surface has to pass by 3D representation
145     --                      of the edge and to respect tangency with the first
146     --                      face of the edge
147     --         GeomAbs_G2 : the surface has to pass by 3D representation
148     --                      of the edge and to respect tangency and curvature
149     --                      with the first face of the edge.
150     raises ConstructionError from Standard;
151     -- if the edge has no representation on a face and Order is
152     -- GeomAbs_G1 or GeomAbs_G2.
153     
154     Add( me : in out; anEdge  : Edge from TopoDS;
155                       Support : Face from TopoDS;
156                       Order   : Shape from GeomAbs;
157                       IsBound : Boolean from Standard = Standard_True )
158     returns Integer from Standard
159     ---Purpose: Adds a new constraint which also defines an edge of the wire
160     --          of the face
161     --  Order: Order of the constraint:
162     --         GeomAbs_C0 : the surface has to pass by 3D representation
163     --                      of the edge
164     --         GeomAbs_G1 : the surface has to pass by 3D representation
165     --                      of the edge and to respect tangency with the
166     --                      given face
167     --         GeomAbs_G2 : the surface has to pass by 3D representation
168     --                      of the edge and to respect tangency and curvature
169     --                      with the given face.
170     raises ConstructionError from Standard;
171     -- if the edge has no 2d representation on the given face
172     
173     Add( me : in out; Support : Face from TopoDS;
174                       Order   : Shape from GeomAbs )
175     returns Integer from Standard;
176     ---Purpose: Adds a free constraint on a face. The corresponding edge has to
177     --  be automatically recomputed.
178     --  It is always a bound.
179     
180     Add( me : in out; Point : Pnt from gp )
181     returns Integer from Standard;
182     ---Purpose: Adds a punctual constraint
183     
184     Add( me : in out; U, V    : Real from Standard;
185                       Support : Face from TopoDS;
186                       Order   : Shape from GeomAbs )
187     returns Integer from Standard;
188     ---Purpose: Adds a punctual constraint.
189     
190
191     AddConstraints( me : in out; SeqOfConstraints : SequenceOfEdgeFaceAndOrder from BRepFill )
192     ---Purpose: Adds constraints to builder
193     is private;
194
195     BuildWires( me : in out; EdgeList  : in out ListOfShape from TopTools;
196                              WireList  : out ListOfShape from TopTools )
197     ---Purpose: Builds wires of maximum length
198     is private;
199     
200     FindExtremitiesOfHoles( me; WireList : ListOfShape from TopTools;
201                                 VerSeq   : out SequenceOfShape from TopTools )
202     ---Purpose: Finds extremities of future edges to fix the holes between wires.
203     --          Can properly operate only with convex contour
204     is private;
205     
206     Build( me : in out );
207     ---Purpose: Builds the resulting faces
208     
209     IsDone(me) returns Boolean from Standard;
210     
211     Face(me) returns Face from TopoDS;
212     -- returns the resulting face
213     
214     Generated (me: in out; S : Shape from TopoDS)
215         ---Purpose: Returns the list of shapes generated from the
216         --          shape <S>. 
217         ---C++: return const & 
218         ---Level: Public
219     returns ListOfShape from TopTools;
220
221     G0Error(me) returns Real from Standard;
222     -- returns the max distance between the result and the constraints
223     
224     G1Error(me) returns Real from Standard;
225     -- returns the max angle between the result and the constraints
226     
227     G2Error(me) returns Real from Standard;
228     -- returns the max difference of curvature between the result and the constraints
229     
230     
231     G0Error( me : in out; Index : Integer from Standard ) returns Real from Standard;
232     -- returns the max distance between the result and the constraint Index
233     
234     G1Error( me : in out; Index : Integer from Standard ) returns Real from Standard;
235     -- returns the max angle between the result and the constraint Index
236     
237     G2Error( me : in out; Index : Integer from Standard ) returns Real from Standard;
238     -- returns the max difference of curvature between the result and the constraint Index
239     
240 fields
241
242     myBuilder         : BuildPlateSurface          from GeomPlate;
243     myBoundary        : SequenceOfEdgeFaceAndOrder from BRepFill; 
244     myConstraints     : SequenceOfEdgeFaceAndOrder from BRepFill;
245     myFreeConstraints : SequenceOfFaceAndOrder     from BRepFill;
246     myPoints          : SequenceOfPointConstraint  from GeomPlate;
247     
248     myOldNewMap       : DataMapOfShapeListOfShape  from TopTools;
249     myGenerated       : ListOfShape                from TopTools;
250     
251     myFace            : Face from TopoDS;
252     
253     myInitFace    : Face    from TopoDS;
254     
255     -- Tolerances
256     myTol2d       : Real    from Standard;
257     myTol3d       : Real    from Standard;
258     myTolAng      : Real    from Standard;
259     myTolCurv     : Real    from Standard;
260     
261     -- Parameters of approximation
262     myMaxDeg      : Integer from Standard;
263     myMaxSegments : Integer from Standard;
264     
265     -- Parameters of resolution
266     myDegree      : Integer from Standard;
267     myNbPtsOnCur  : Integer from Standard;
268     myNbIter      : Integer from Standard;
269     myAnisotropie : Boolean from Standard;
270     
271     myIsInitFaceGiven : Boolean from Standard; 
272      
273     myIsDone : Boolean from Standard; 
274      
275 end Filling;