ca9c0502ce626a83b5e58db366f2e4fd01878225
[occt.git] / src / HLRBRep / HLRBRep_Data.cdl
1 -- Created on: 1993-01-11
2 -- Created by: Christophe MARION
3 -- Copyright (c) 1993-1999 Matra Datavision
4 -- Copyright (c) 1999-2012 OPEN CASCADE SAS
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
8 -- except in compliance with the License. Please obtain a copy of the License
9 -- at http://www.opencascade.org and read it completely before using 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 --
14 -- The Original Code and all software distributed under the License is
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.
20
21
22 class Data from HLRBRep inherits TShared from MMgt
23
24 uses
25     Address           from Standard,
26     Integer           from Standard,
27     Boolean           from Standard,
28     ShortReal         from Standard,
29     Real              from Standard,
30     Array1OfInteger   from TColStd,
31     Pnt               from gp,
32     Pnt2d             from gp,
33     Dir2d             from gp,
34     CurveType         from GeomAbs,
35     SurfaceType       from GeomAbs,
36     State             from TopAbs,
37     Orientation       from TopAbs,
38     IndexedMapOfShape from TopTools,
39     IntersectionPoint from IntRes2d,
40     Interference      from HLRAlgo,
41     InterferenceList  from HLRAlgo,
42     Projector         from HLRAlgo,
43     EdgeData          from HLRBRep,
44     FaceData          from HLRBRep,
45     Array1OfEData     from HLRBRep,
46     Array1OfFData     from HLRBRep,
47     FaceIterator      from HLRBRep,
48     EdgeFaceTool      from HLRBRep,
49     Intersector       from HLRBRep,
50     Curve             from HLRBRep,
51     CLProps           from HLRBRep,
52     Surface           from HLRBRep,
53     SLProps           from HLRBRep,
54     TopolTool         from BRepTopAdaptor,
55     MapOfShapeTool    from BRepTopAdaptor
56     
57     
58 raises
59     UndefinedDerivative from StdFail
60
61 is
62     --
63     --       Method to load or edit the Data Structure
64     --       
65
66     Create(NV, NE, NF : Integer from Standard)
67         ---Purpose: Create an  empty data structure  of <NV> vertices,
68         --          <NE> edges and <NF> faces.
69     returns mutable Data from HLRBRep;
70     
71     Write(me : mutable; DS       : Data    from HLRBRep;
72                         dv,de,df : Integer from Standard)
73         ---Purpose: Write <DS>    in   me  with   a     translation of
74         --          <dv>,<de>,<df>.
75     is static;
76     
77     EDataArray(me : mutable) returns Array1OfEData from HLRBRep
78         ---C++: inline
79         ---C++: return &
80     is static;
81
82     FDataArray(me : mutable) returns Array1OfFData from HLRBRep
83         ---C++: inline
84         ---C++: return &
85     is static;
86
87     Tolerance(me : mutable; tol : ShortReal from Standard)
88         ---C++: inline
89         ---Purpose: Set the  tolerance for the  rejections  during the
90         --          exploration
91     is static;
92     
93     Tolerance(me) returns ShortReal from Standard
94         ---C++: inline
95         ---Purpose: returns  the tolerance for the  rejections  during
96         --          the exploration
97     is static;
98     
99     Update(me : mutable; P : Projector from HLRAlgo)
100         ---Purpose: end of building  of the Data and updating
101         --          all the informations linked to the projection.
102     is static;
103     
104     Projector(me : mutable) returns Projector from HLRAlgo
105         ---C++: inline
106         ---C++: return &
107     is static;
108
109     --
110     --      Methods to query the Data
111     --      
112     
113     NbVertices(me) returns Integer from Standard
114         ---C++: inline
115     is static;
116
117     NbEdges(me) returns Integer from Standard
118         ---C++: inline
119     is static;
120
121     NbFaces(me) returns Integer from Standard
122         ---C++: inline
123     is static;
124
125     EdgeMap(me : mutable) returns IndexedMapOfShape from TopTools
126         ---C++: inline
127         ---C++: return &
128     is static;
129
130     FaceMap(me : mutable) returns IndexedMapOfShape from TopTools
131         ---C++: inline
132         ---C++: return &
133     is static;
134
135     --
136     --      Exploration of non rejected visible edges
137     --      
138
139     InitBoundSort(me        : mutable;
140                   MinMaxTot : Address from Standard;
141                   e1,e2     : Integer from Standard)
142         ---Purpose: to compare with only non rejected edges.
143     is static;
144     
145     InitEdge(me : mutable; FI :        Integer        from Standard;
146                            MST: in out MapOfShapeTool from BRepTopAdaptor)
147         ---Purpose: Begin an iteration only  on visible Edges
148         --          crossing the face number <FI>.
149     is static;
150     
151     MoreEdge(me : mutable) returns Boolean from Standard
152     is static;
153     
154     NextEdge(me : mutable; skip : Boolean from Standard = Standard_True)
155     is static;
156     
157     Edge(me) returns Integer from Standard
158         ---Purpose: Returns the  current Edge
159     is static;
160
161     HidingTheFace(me) returns Boolean from Standard
162         ---C++: inline
163         ---Purpose: Returns true if   the  current edge to   be hidden
164         --          belongs to the hiding face.
165     is static;
166     
167     SimpleHidingFace(me) returns Boolean from Standard
168         ---C++: inline
169         ---Purpose: Returns true if the current hiding face is not  an
170         --          auto-intersected one.
171     is static;
172     
173     --
174     --     Intersection of current edge with face
175     --     
176     
177     InitInterference(me : mutable)
178         ---Purpose: Intersect  the current  Edge  with the boundary of
179         --          the hiding  face.   The interferences are given by
180         --          the More, Next, and Value methods.
181     is static;
182     
183     MoreInterference(me) returns Boolean from Standard
184         ---C++: inline
185     is static;
186     
187     NextInterference(me : mutable)
188     is static;
189
190     RejectedInterference(me : mutable) returns Boolean from Standard
191         ---Purpose: Returns  True if the  interference is rejected.
192     is static;
193     
194     AboveInterference(me : mutable) returns Boolean from Standard
195         ---Purpose: Returns True if the rejected interference is above
196         --          the face.
197     is static;
198     
199     Interference(me : mutable) returns Interference from HLRAlgo
200         ---C++: inline
201         ---C++: return &
202     is static;
203     
204     LocalLEGeometry2D(me : mutable; Param :     Real    from Standard;
205                                     Tg    : out Dir2d   from gp;
206                                     Nm    : out Dir2d   from gp;
207                                     Cu    : out Real    from Standard)
208         ---Purpose: Returns the local description of the projection of
209         --          the current LEdge  at parameter  <Param>.
210     raises
211         UndefinedDerivative from StdFail
212     is static;
213
214     LocalFEGeometry2D(me : mutable; FE    :     Integer from Standard;
215                                     Param :     Real    from Standard;
216                                     Tg    : out Dir2d   from gp;
217                                     Nm    : out Dir2d   from gp;
218                                     Cu    : out Real    from Standard)
219         ---Purpose: Returns the local description of the projection of
220         --          the current FEdge  at parameter  <Param>.
221     raises
222         UndefinedDerivative from StdFail
223     is static;
224
225     EdgeState(me : mutable; p1,p2       :     Real  from Standard;
226                             stbef, staf : out State from TopAbs)
227         ---Purpose: Returns the local  3D   state of the  intersection
228         --          between the current edge and the current face at the
229         --          <p1> and <p2> parameters.
230     is static;
231     
232     EdgeOfTheHidingFace(me; E  : Integer  from Standard;
233                             ED : EdgeData from HLRBRep)
234     returns Boolean from Standard
235         ---Purpose: Returns the  true if the  Edge <ED> belongs to the
236         --          Hiding Face.
237         ---C++: inline
238    is static;
239
240     HidingStartLevel(me : mutable; E  : Integer          from Standard;
241                                    ED : EdgeData         from HLRBRep;
242                                    IL : InterferenceList from HLRAlgo)
243     returns Integer from Standard
244         ---Purpose: Returns the number of  levels of hiding face above
245         --          the   first  point  of   the    edge <ED>.     The
246         --          InterferenceList is  given to  compute far away of
247         --          the Interferences and then come back.
248     is static;
249
250     Compare(me : mutable; E  : Integer  from Standard;
251                           ED : EdgeData from HLRBRep)
252     returns State from TopAbs
253         ---Purpose: Returns   the  state   of  the   Edge  <ED>  after
254         --          classification.
255     is static;
256
257     SimplClassify(me : mutable; E         :     Integer  from Standard;
258                                 ED        :     EdgeData from HLRBRep;
259                                 Nbp       :     Integer  from Standard;
260                                 p1,  p2   :     Real     from Standard)
261     returns State from TopAbs; 
262         ---Purpose: Simple classification of part of edge  [p1,  p2] 
263         --  returns  OUT  if  at  least  1 of  Nbp  points  of  edge  is  out 
264         --  othewise  returns  IN 
265         --  It  is  used  to  check  "suspision"  hided  part  of  edge.
266     
267     -- The following methods are private
268
269     OrientOutLine(me : mutable; I  :     Integer  from Standard;
270                                 FD : out FaceData from HLRBRep)
271     returns Boolean from Standard
272         ---Purpose: Orient the   OutLines  ( left  must  be  inside in
273         --          projection ). Returns True if the face of a closed
274         --          shell has been inverted;
275     is static private;
276
277     OrientOthEdge(me : mutable; I  :     Integer  from Standard;
278                                 FD : out FaceData from HLRBRep)
279         ---Purpose: Orient the Edges which  are not  Internal OutLine,
280         --          not Double and not IsoLine.
281     is static private;
282
283     Classify(me : mutable; E         :     Integer  from Standard;
284                            ED        :     EdgeData from HLRBRep;
285                            LevelFlag :     Boolean  from Standard;
286                            Level     : out Integer  from Standard;
287                            param     :     Real     from Standard)
288     returns State from TopAbs
289         ---Purpose: Classification of an edge.
290     is static private;
291
292     RejectedPoint(me : mutable; PInter      : IntersectionPoint from IntRes2d;
293                                 BoundOri    : Orientation       from TopAbs;
294                                 NumSeg      : Integer           from Standard) --- -1 if Point else NumSegment 
295     returns Boolean from Standard
296         ---Purpose: Returns  True  if the  intersection is  rejected.
297     is static private;
298
299     SameVertex(me : mutable; head1,head2 : Boolean from Standard)
300     returns Boolean from Standard
301         ---Purpose: returns True  if there is a common  vertex between
302         --          myLE and myFE  dependig  on  <head1> and  <head2>.
303     is static private;
304     
305     Destroy(me: mutable);
306         ---C++: alias ~
307     
308     
309 fields
310
311     -- basic data : Vertices, Edges, Faces
312     myNbVertices  : Integer           from Standard;
313     myNbEdges     : Integer           from Standard;
314     myNbFaces     : Integer           from Standard;
315     myEMap        : IndexedMapOfShape from TopTools;
316     myFMap        : IndexedMapOfShape from TopTools;
317     myEData       : Array1OfEData     from HLRBRep;
318     myFData       : Array1OfFData     from HLRBRep;
319     myEdgeIndices : Array1OfInteger   from TColStd;
320     myToler       : ShortReal         from Standard;
321     myProj        : Projector         from HLRAlgo;
322     myLLProps     : CLProps           from HLRBRep;
323     myFLProps     : CLProps           from HLRBRep;
324     mySLProps     : SLProps           from HLRBRep;
325     myBigSize     : Real              from Standard;
326
327     -- Face exploration
328     myFaceItr1    : FaceIterator      from HLRBRep;
329     myFaceItr2    : FaceIterator      from HLRBRep;
330     
331     -- Current hiding face
332     iFace         : Integer           from Standard;
333     iFaceData     : Address           from Standard;
334     iFaceGeom     : Address           from Standard;
335     iFaceMinMax   : Address           from Standard;
336     iFaceType     : SurfaceType       from GeomAbs;
337     iFaceBack     : Boolean           from Standard;
338     iFaceSimp     : Boolean           from Standard;
339     iFaceSmpl     : Boolean           from Standard;
340     iFaceTest     : Boolean           from Standard;
341     
342     -- Exploration of edges to be hidden
343     myHideCount   : Integer           from Standard;
344     myDeca        : Real              from Standard[16];
345     mySurD        : Real              from Standard[16];
346     myCurSortEd   : Integer           from Standard;
347     myNbrSortEd   : Integer           from Standard;
348      
349     -- Current hidden edge, to be intersected
350     myLE          : Integer           from Standard;
351     myLEOutLine   : Boolean           from Standard;
352     myLEInternal  : Boolean           from Standard;
353     myLEDouble    : Boolean           from Standard;
354     myLEIsoLine   : Boolean           from Standard;
355     myLEData      : Address           from Standard;
356     myLEGeom      : Address           from Standard;
357     myLEMinMax    : Address           from Standard;
358     myLEType      : CurveType         from GeomAbs;
359     myLETol       : ShortReal         from Standard;
360
361     -- Exploration of hiding face for intersection
362     myFE          : Integer           from Standard;
363     myFEOri       : Orientation       from TopAbs;
364     myFEOutLine   : Boolean           from Standard;
365     myFEInternal  : Boolean           from Standard;
366     myFEDouble    : Boolean           from Standard;
367     myFEData      : Address           from Standard;
368     myFEGeom      : Address           from Standard;
369     myFEType      : CurveType         from GeomAbs;
370     myFETol       : ShortReal         from Standard;
371     
372     -- Intersections
373     myIntersector : Intersector       from HLRBRep;
374     myClassifier  : TopolTool         from BRepTopAdaptor;
375     mySameVertex  : Boolean           from Standard;
376     myIntersected : Boolean           from Standard;
377     myNbPoints    : Integer           from Standard;
378     myNbSegments  : Integer           from Standard;
379     iInterf       : Integer           from Standard;
380     myIntf        : Interference      from HLRAlgo;
381     myAboveIntf   : Boolean           from Standard;
382
383     myReject      : Address           from Standard; 
384      
385     
386 end Data;