0022819: Redesign of OpenGl driver
[occt.git] / src / Graphic3d / Graphic3d_Group.cdl
1     --
2     -- File:    Graphic3d_Group.cdl
3     -- Created: Vendredi 6 Septembre 1991
4     -- Author:  NW,JPB,CAL
5     --      27/09/97 ; PCT : add manual control of  textures
6     --              11/97 ; CAL : ajout polyline par 2 points
7     --      16/06/2000 : ATS: Study G005 - Group store presentations of it's objects in field
8     --                        MyListOfPArray to avoid deletion of handle-manipulating 
9     --                        primitives.
10     --
11     ---Copyright:   MatraDatavision 1991,1992,1993,1994
12     --
13     class Group from Graphic3d inherits TShared
14     
15         ---Version:
16
17         ---Purpose: This class allows the definition of groups
18         --     of primitives inside of graphic objects (presentations).
19         --     A group contains the primitives and attributes
20         --     for which the range is limited to this group.
21         --     The primitives of a group can be globally suppressed.
22         --
23         --      There are two main group usage models:
24         --
25         --        1) Non-modifiable, or unbounded, group ('black box'). 
26         --           Developers can repeat a sequence of 
27         --           SetPrimitivesAspect() with AddPrimitiveArray() methods arbitrary number of times
28         --           to define arbitrary number of primitive "blocks" each having individual apect values.
29         --           Any modification of such a group is forbidden, as aspects and primitives are mixed 
30         --           in memory without any high-level logical structure, and any modification is very likely to result
31         --           in corruption of the group internal data.
32         --           It is necessary to recreate such a group as a whole when some attribute should be changed.
33         --           (for example, in terms of AIS it is necessary to re-Compute() the whole presentation each time).
34         --        2) Bounded group. Developers should specify the necessary group aspects with help of
35         --           SetGroupPrimitivesAspect() and then add primitives to the group.
36         --           Such a group have simplified organization in memory (a single block of attributes
37         --           followed by a block of primitives) and therefore it can be modified, if it is necessary to
38         --           change parameters of some aspect that has already been set, using methods:
39         --           IsGroupPrimitivesAspectSet() to detect which aspect was set for primitives;
40         --           GroupPrimitivesAspect() to read current aspect values
41         --           and SetGroupPrimitivesAspect() to set new values.
42         -- 
43         --        Developers are strongly recommended to take all the above into account when filling Graphic3d_Group
44         --        with aspects and primitives and choose the group usage model beforehand out of application needs.
45
46         ---Warning:
47         ---References:
48     
49     uses
50     
51         Array1OfInteger             from TColStd,
52         Array1OfReal                from TColStd,
53         HArray1OfByte               from TColStd,
54     
55         ExtendedString              from TCollection,
56     
57         PlaneAngle                  from Quantity,
58     
59         Array1OfEdge                from Aspect,
60         Edge                        from Aspect,
61     
62         GroupAspect                 from Graphic3d,
63         AspectLine3d                from Graphic3d,
64         AspectMarker3d              from Graphic3d,
65         AspectText3d                from Graphic3d,
66         AspectFillArea3d            from Graphic3d,
67         HorizontalTextAlignment     from Graphic3d,
68         CBitFields4                 from Graphic3d,
69         CGroup                      from Graphic3d,
70         GraphicDriver               from Graphic3d,
71         Structure                   from Graphic3d,
72         TextPath                    from Graphic3d,
73         TypeOfPolygon               from Graphic3d,
74         Vector                      from Graphic3d,
75         Array1OfVertex              from Graphic3d,
76         Array2OfVertex              from Graphic3d,
77         Vertex                      from Graphic3d,
78         Array1OfVertexC             from Graphic3d,
79         Array2OfVertexC             from Graphic3d,
80         VertexC                     from Graphic3d,
81         Array1OfVertexN             from Graphic3d,
82         Array2OfVertexN             from Graphic3d,
83         VertexN                     from Graphic3d,
84         Array1OfVertexNC            from Graphic3d,
85         Array2OfVertexNC            from Graphic3d,
86         VertexNC                    from Graphic3d,
87         VerticalTextAlignment       from Graphic3d, 
88         VertexNT                    from Graphic3d, 
89         Array1OfVertexNT            from Graphic3d,
90         Array2OfVertexNT            from Graphic3d,
91         ArrayOfPrimitives           from Graphic3d,
92         ListOfPArray                from Graphic3d,
93         ListIteratorOfListOfPArray  from Graphic3d,
94         TransModeFlags              from Graphic3d,
95         CBounds                     from Graphic3d
96     
97     raises
98     
99         GroupDefinitionError        from Graphic3d,
100         PickIdDefinitionError       from Graphic3d,
101     OutOfRange          from Standard
102     
103     is
104         Create ( AStructure : Structure from Graphic3d )
105             returns mutable Group from Graphic3d;
106         ---Level: Public
107         ---Purpose: Creates a group in the structure <AStructure>.
108     
109         ---------------------------------------------------
110         -- Category: Methods to modify the class definition
111         ---------------------------------------------------
112     
113         Clear ( me  : mutable;
114                 theUpdateStructureMgr : Boolean from Standard = Standard_True )
115             is static;
116         ---Level: Public
117         ---Purpose: Supress all primitives and attributes of <me>.
118         --          To clear group without update in Graphic3d_StructureManager
119         --          pass Standard_False as <theUpdateStructureMgr>. This
120         --          used on context and viewer destruction, when the pointer
121         --          to structure manager in Graphic3d_Structure could be 
122         --          already released (pointers are used here to avoid handle 
123         --          cross-reference);
124         ---Category: Methods to modify the class definition
125     
126         Destroy ( me    : mutable )
127             is static;
128         ---Level: Public
129         ---Purpose: Supress the group <me> in the structure.
130         ---Category: Methods to modify the class definition
131         ---C++: alias ~
132     
133         Remove ( me : mutable )
134             is static;
135         ---Level: Public
136         ---Purpose: Supress the group <me> in the structure.
137         --  Warning: No more graphic operations in <me> after this call.
138         ---Category: Methods to modify the class definition
139
140         --SetTransformPersistence( me     : mutable;
141         --                         AFlag  : TransModeFlags from Graphic3d )
142         ---Level: Public
143     ---Purpose: Modifies the current modelling transform persistence (pan, zoom or rotate)
144         --is static;
145
146     --TransformPersistence( me )
147     --      returns TransModeFlags from Graphic3d
148         ---Level: Public
149     ---Purpose: Get the current modelling transform persistence (pan, zoom or rotate)
150         --is static;
151     
152         SetGroupPrimitivesAspect ( me   : mutable )
153             is static;
154         ---Level: Public
155         ---Purpose: Removes the context for all the line primitives
156         --      of the group.
157         ---Category: Methods to modify the class definition
158     
159         SetGroupPrimitivesAspect ( me   : mutable;
160                                    CTX  : AspectLine3d from Graphic3d )
161             is static;
162         ---Level: Public
163         ---Purpose: Modifies the context for all the line primitives
164         --      of the group.
165         ---Category: Methods to modify the class definition
166     
167         SetGroupPrimitivesAspect ( me   : mutable;
168                                    CTX  : AspectFillArea3d from Graphic3d )
169             is static;
170         ---Level: Public
171         ---Purpose: Modifies the context for all the face primitives
172         --      of the group.
173         ---Category: Methods to modify the class definition
174     
175         SetGroupPrimitivesAspect ( me   : mutable;
176                                    CTX  : AspectText3d from Graphic3d )
177             is static;
178         ---Level: Public
179         ---Purpose: Modifies the context for all the text primitives
180         --      of the group.
181         ---Category: Methods to modify the class definition
182     
183         SetGroupPrimitivesAspect ( me   : mutable;
184                                    CTX  : AspectMarker3d from Graphic3d )
185             is static;
186         ---Level: Public
187         ---Purpose: Modifies the context for all the marker primitives
188         --      of the group.
189         ---Category: Methods to modify the class definition
190     
191         SetPrimitivesAspect ( me    : mutable;
192                               CTX   : AspectLine3d from Graphic3d )
193             is static;
194         ---Level: Public
195         ---Purpose: Modifies the current context of the group to give
196         --      another aspect for all the line primitives created
197         --      after this call in the group.
198         ---Category: Methods to modify the class definition
199     
200         SetPrimitivesAspect ( me    : mutable;
201                               CTX   : AspectFillArea3d from Graphic3d )
202             is static;
203         ---Level: Public
204         ---Purpose: Modifies the current context of the group to give
205         --      another aspect for all the face primitives created
206         --      after this call in the group.
207         ---Category: Methods to modify the class definition
208     
209         SetPrimitivesAspect ( me    : mutable;
210                               CTX   : AspectText3d from Graphic3d )
211             is static;
212         ---Level: Public
213         ---Purpose: Modifies the current context of the group to give
214         --      another aspect for all the text primitives created
215         --      after this call in the group.
216         ---Category: Methods to modify the class definition
217     
218         SetPrimitivesAspect ( me    : mutable;
219                               CTX   : AspectMarker3d from Graphic3d )
220             is static;
221         ---Level: Public
222         ---Purpose: Modifies the current context of the group to give
223         --      another aspect for all the marker primitives created
224         --      after this call in the group.
225         ---Category: Methods to modify the class definition
226     
227         SetMinMaxValues ( me                : mutable;
228                           XMin, YMin, ZMin  : Real from Standard;
229                           XMax, YMax, ZMax  : Real from Standard )
230             is static;
231         ---Level: Public
232         ---Purpose: Sets the coordinates of the boundary box of the
233         --      group <me>.
234         ---Category: Methods to modify the class definition
235     
236         --------------------------------------------------
237         -- Category: Methods to manage the pick identifier
238         --------------------------------------------------
239     
240         PickId ( me )
241             returns Integer from Standard
242             is static;
243         ---Level: Public
244         ---Purpose: Returns the pick identifier of the group <me>.
245         --  Category: Methods to manage the pick identifier
246         --  Warning: Returns 0 if the pick identifier is not defined.
247     
248         RemovePickId ( me   : mutable )
249             is static;
250         ---Level: Public
251         ---Purpose: Removes the pick identifier of the group <me>.
252         --  Category: Methods to manage the pick identifier
253         --  Warning: Now the Pick Identifier is null.
254     
255         SetPickId ( me  : mutable;
256                     Id  : Integer from Standard )
257         ---Level: Public
258         ---Purpose: Places a pick identifier in the group <me>.
259         --  Category: Methods to manage the pick identifier
260         --  Warning: A Pick Identifier is an integer greater than zero.
261         ---     Raises PickIdDefinitionError if <Id> is a negative value.
262         raises PickIdDefinitionError from Graphic3d is static;
263     
264         -------------------------------------
265         -- Category: Methods to create Marker
266         -------------------------------------
267     
268         ---------------------------------------------
269         -- Summary of Markers                      --
270         --                                         --
271         -- They should have one or more vertices.  --
272         --                                         --
273         -- They have the following attributes.     --
274         --                                         --
275         --  Marker Type.                       --
276         --  Marker Scale Factor.               --
277         --  Marker Color.                      --
278         --                                         --
279         -- The  size, shape  and orientation  of a --
280         -- marker is not subject to transformation --
281         ---------------------------------------------
282     
283         Marker ( me         : mutable;
284                  APoint     : Vertex from Graphic3d;
285                  EvalMinMax : Boolean from Standard = Standard_True )
286             is static;
287         ---Level: Public
288         ---Purpose: Creates a marker in position <APoint> which will be drawn
289         --      with the current attribute (AspectMarker).
290         ---Category: Methods to create Marker
291     
292         MarkerSet ( me          : mutable;
293                     ListVertex  : Array1OfVertex from Graphic3d;
294                     EvalMinMax  : Boolean from Standard = Standard_True )
295             is static;
296         ---Purpose: Creates a group of markers defined by a table of
297         --     vertices.
298         ---Category: Methods to create Marker
299     
300         --------------------------------------
301         -- Category: Methods to create Polygon
302         --------------------------------------
303     
304         --------------------------------------------------
305         -- Summary of Polygons                          --
306         --                                              --
307         -- They are limited to one boundary.            --
308         --                                              --
309         -- The boundary should be closed.               --
310         --                                              --
311         -- They should have at least three vertices.    --
312         --                                              --
313         -- They should be planar.                       --
314         --                                              --
315         -- They should have a normal.                   --
316         --                                              --
317         -- The boundary is drawn only when the interior --
318         -- style is hollow.                             --
319         --                                              --
320         -- The boundary have the following attributes : --
321         --                                              --
322         --  Line Type.                              --
323         --  Line Width Scale Factor.                --
324         --  Line Color.                             --
325         --                                              --
326         -- They have only interior attributes :         --
327         --                                              --
328         --  Interior Style.                         --
329         --  Interior Color.                         --
330         --  Front Material.                         --
331         --  Back Material.                          --
332         --------------------------------------------------
333     
334         Polygon ( me            : mutable;
335                   ListVertex    : Array1OfVertex from Graphic3d;
336                   AType         : TypeOfPolygon from Graphic3d = Graphic3d_TOP_CONVEX;
337                   EvalMinMax    : Boolean from Standard = Standard_True )
338             is static;
339         ---Level: Public
340         ---Purpose: Links up points to create a face drawn
341         --      using the current fill attributes (AspectFillArea3d))
342         --      The first and last points are not duplicates.
343         ---Category: Methods to create Polygon
344     
345         Polygon ( me            : mutable;
346                   ListVertex    : Array1OfVertex from Graphic3d;
347                   Normal        : Vector from Graphic3d;
348                   AType         : TypeOfPolygon from Graphic3d = Graphic3d_TOP_CONVEX;
349                   EvalMinMax    : Boolean from Standard = Standard_True )
350             is static;
351         ---Level: Public
352         ---Purpose: Links up points to create a face drawn
353         --      using the current fill attributes (AspectFillArea3d))
354         --      The first and last points are not duplicates.
355         --      The normal to the polygon is defined normalised.
356         ---Category: Methods to create Polygon
357     
358         Polygon ( me            : mutable;
359                   ListVertex    : Array1OfVertexN from Graphic3d;
360                   AType         : TypeOfPolygon from Graphic3d = Graphic3d_TOP_CONVEX;
361                   EvalMinMax    : Boolean from Standard = Standard_True )
362             is static;
363         ---Level: Public
364         ---Purpose: Links up points to create a face drawn
365         --      using the current fill attributes (AspectFillArea3d))
366         --      The first and last points are not duplicates.
367         --      The normal is defined and normalised for each vertex.
368         ---Category: Methods to create Polygon
369     
370         Polygon ( me            : mutable;
371                   ListVertex    : Array1OfVertexN from Graphic3d;
372                   Normal        : Vector from Graphic3d;
373                   AType         : TypeOfPolygon from Graphic3d = Graphic3d_TOP_CONVEX;
374                   EvalMinMax    : Boolean from Standard = Standard_True )
375             is static;
376         ---Level: Public
377         ---Purpose: Links up points to create a face drawn
378         --      using the current fill attributes (AspectFillArea3d))
379         --      The first and last points are not duplicates.
380         --      The normal is defined for each vertex.
381         --      The normal to the polygon is defined normalised.
382         ---Category: Methods to create Polygon
383     
384      
385         Polygon ( me            : mutable;
386                   ListVertex    : Array1OfVertexNT from Graphic3d;
387                   AType         : TypeOfPolygon from Graphic3d = Graphic3d_TOP_CONVEX;
388                   EvalMinMax    : Boolean from Standard = Standard_True )
389             is static;
390         ---Level: Public
391         ---Purpose: Links up points to create a face drawn
392         --      using the current fill attributes (AspectFillArea3d))
393         --      The first and last points are not duplicated.
394         --      The normal is defined and normalised for each vertex.
395         --          The texture coordinate is defined for each vertex.
396         ---Category: Methods to create Polygon
397     
398     
399     
400         --------------------------------------------------
401         -- Summary of Polygons with holes               --
402         --                                              --
403         -- They may have multiple boundaries.           --
404         --                                              --
405         -- Each boundary should be closed.              --
406         --                                              --
407         -- Each  boundary  should  have at  least three --
408         -- vertices.                                    --
409         --                                              --
410         -- They should be planar.                       --
411         --                                              --
412         -- They should have a normal.                   --
413         --                                              --
414         -- The boundary is drawn only when the interior --
415         -- style is hollow.                             --
416         --                                              --
417         -- The boundary have the following attributes : --
418         --                                              --
419         --  Line Type.                              --
420         --  Line Width Scale Factor.                --
421         --  Line Color.                             --
422         --                                              --
423         -- They have only interior attributes :         --
424         --                                              --
425         --  Interior Style.                         --
426         --  Interior Color.                         --
427         --  Front Material.                         --
428         --  Back Material.                          --
429         --------------------------------------------------
430     
431         Polygon ( me            : mutable;
432                   Bounds        : Array1OfInteger from TColStd;
433                   ListVertex    : Array1OfVertex from Graphic3d;
434                   EvalMinMax    : Boolean from Standard = Standard_True )
435             is static;
436         ---Level: Public
437         ---Purpose: Creates a face with holes.
438         --      The face is described by the total number
439         --      of vertices on the external contour and around the holes,
440         --      and by the list of vertices.
441         --      The face will be drawn
442         --      using the current fill attributes (AspectFillArea3d))
443         --      The first and last points are not duplicates.
444         --      Bounds : total number of interior and exterior vertices
445         --      ListVertex : a list of the interior and exterior vertices
446         ---Category: Methods to create Polygon
447     
448         Polygon ( me            : mutable;
449                   Bounds        : Array1OfInteger from TColStd;
450                   ListVertex    : Array1OfVertex from Graphic3d;
451                   Normal        : Vector from Graphic3d;
452                   EvalMinMax    : Boolean from Standard = Standard_True )
453             is static;
454         ---Level: Public
455         ---Purpose: Creates a face with holes.
456         --      The face is described by the total number
457         --      of vertices on the external contour and around the holes,
458         --      and by the list of vertices.
459         --      The face will be drawn
460         --      using the current fill attributes (AspectFillArea3d))
461         --      The first and last points are not duplicates.
462         --      The normal to the polygon is normalised.
463         --      Bounds : total number of interior and exterior vertices
464         --      ListVertex : a list of the interior and exterior vertices
465         ---Category: Methods to create Polygon
466     
467         Polygon ( me            : mutable;
468                   Bounds        : Array1OfInteger from TColStd;
469                   ListVertex    : Array1OfVertexN from Graphic3d;
470                   EvalMinMax    : Boolean from Standard = Standard_True )
471             is static;
472         ---Level: Public
473         ---Purpose: Creates a face with holes.
474         --      The face is described by the total number
475         --      of vertices on the external contour and around the holes,
476         --      and by the list of vertices.
477         --      The face will be drawn
478         --      using the current fill attributes (AspectFillArea3d))
479         --      The first and last points are not duplicates.
480         --      Bounds : total number of interior and exterior vertices
481         --      ListVertex : a list of the interior and exterior vertices
482         ---Category: Methods to create Polygon
483     
484         Polygon ( me            : mutable;
485                   Bounds        : Array1OfInteger from TColStd;
486                   ListVertex    : Array1OfVertexN from Graphic3d;
487                   Normal        : Vector from Graphic3d;
488                   EvalMinMax    : Boolean from Standard = Standard_True )
489             is static;
490         ---Level: Public
491         ---Purpose: Creates a face with holes.
492         --      The face is described by the total number
493         --      of vertices on the external contour and around the holes,
494         --      and by the list of vertices.
495         --      The face will be drawn
496         --      using the current fill attributes (AspectFillArea3d))
497         --      The first and last points are not duplicates.
498         --      The normal to the polygon is normalised.
499         --      Bounds : total number of interior and exterior vertices
500         --      ListVertex : a list of the interior and exterior vertices
501         ---Category: Methods to create Polygon
502     
503         PolygonSet ( me           : mutable;
504                      Bounds       : Array1OfInteger from TColStd;
505                      ListVertex   : Array1OfVertex from Graphic3d;
506                      AType        : TypeOfPolygon from Graphic3d = Graphic3d_TOP_CONVEX;
507                      EvalMinMax   : Boolean from Standard = Standard_True )
508             is static;
509         ---Level: Public
510         ---Purpose: Links up points to create a set of face drawn
511         --      using the current fill attributes (AspectFillArea3d))
512         --      The first and last points are not duplicates.
513         ---Category: Methods to create Polygon
514     
515         ---------------------------------------
516         -- Category: Methods to create Polyline
517         ---------------------------------------
518     
519         --------------------------------------------
520         -- Summary of Polylines                   --
521         --                                        --
522         -- They should have two or more vertices. --
523         --                                        --
524         -- They have the following attributes.    --
525         --                                        --
526         --  Line Type.                        --
527         --  Line Width Scale Factor.          --
528         --  Line Color.                       --
529         --------------------------------------------
530     
531         Polyline ( me           : mutable;
532                    APT1         : Vertex from Graphic3d;
533                    APT2         : Vertex from Graphic3d;
534                    EvalMinMax   : Boolean from Standard = Standard_True )
535             is static;
536         ---Level: Public
537         ---Purpose: Links up points to create a line drawn
538         --      using the current line attributes (AspectLine)
539         ---Category: Methods to create Polyline
540     
541         Polyline ( me         : mutable;
542                    ListVertex : Array1OfVertex from Graphic3d;
543                    EvalMinMax : Boolean from Standard = Standard_True )
544             is static;
545         ---Level: Public
546         ---Purpose: Links up points to create a line drawn
547         --      using the current line attributes (AspectLine)
548         ---Category: Methods to create Polyline
549     
550         Polyline ( me         : mutable;
551                    ListVertex : Array1OfVertexC from Graphic3d;
552                    EvalMinMax : Boolean from Standard = Standard_True )
553             is static;
554         ---Level: Public
555         ---Purpose: Links up points to create a line drawn
556         --      using the current line attributes (AspectLine)
557         --      except for the colour which is defined
558         --      for each vertex.
559         ---Category: Methods to create Polyline
560     
561         -----------------------------------------
562         -- Category: Methods to create Quadrangle
563         -----------------------------------------
564     
565         QuadrangleMesh ( me         : mutable;
566                          ListVertex : Array2OfVertex from Graphic3d;
567                          EvalMinMax : Boolean from Standard = Standard_True )
568         ---Level: Public
569         ---Purpose: Creates a group of quadrilaterals from a list of
570         --      points, such that their vertices are:
571         --      Ki,j; Ki,j+1; Ki+1,j+1; Ki+1,j.
572         --      The quadrilaterals will be drawn according to the
573         --      current attributes (AspectFillArea3d).
574         --  Category: Methods to create Quadrangle
575         --  Warning: Raises GroupDefinitionError if <ListVertex> contains
576         --      less than four points.
577         raises GroupDefinitionError from Graphic3d is static;
578     
579         QuadrangleMesh ( me         : mutable;
580                          ListVertex : Array2OfVertexN from Graphic3d;
581                          EvalMinMax : Boolean from Standard = Standard_True )
582         ---Level: Public
583         ---Purpose: Creates a group of quadrilaterals from a list of
584         --      points, such that their vertices are:
585         --      Ki,j; Ki,j+1; Ki+1,j+1; Ki+1,j.
586         --      The quadrilaterals will be drawn according to the
587         --      current attributes (AspectFillArea3d).
588         --      For each vertex the normal is given.
589         --  Category: Methods to create Quadrangle
590         --  Warning: Raises GroupDefinitionError if <ListVertex> contains
591         --      less than four points.
592         raises GroupDefinitionError from Graphic3d is static;
593     
594         QuadrangleMesh ( me           : mutable;
595                          ListVertex   : Array2OfVertexNT from Graphic3d;
596                          EvalMinMax   : Boolean from Standard = Standard_True )
597         ---Level: Public
598         ---Purpose: Creates a group of quadrilaterals from a list of
599         --      points, such that their vertices are:
600         --      Ki,j; Ki,j+1; Ki+1,j+1; Ki+1,j.
601         --      The quadrilaterals will be drawn according to the
602         --      current attributes (AspectFillArea3d).
603         --      For each vertex the normal is given.
604         --      For each vertex a texture coordinate is given.
605         --  Category: Methods to create Quadrangle
606         --  Warning: Raises GroupDefinitionError if <ListVertex> contains
607         --      less than four points.
608         raises GroupDefinitionError from Graphic3d is static;
609
610         -----------------------------------
611         -- Category: Methods to create Text
612         -----------------------------------
613     
614         --------------------------------------------
615         -- Summary of Texts                       --
616         --                                        --
617         -- Text  has  geometric  and nongeometric --
618         -- attributes.                            --
619         --                                        --
620         -- The geometric text attributes are :    --
621         --                                        --
622         --  Character Height.                 --
623         --  Character Up Vector.              --
624         --  Text Path.                        --
625         --  Text Alignment Horizontal.        --
626         --  Text Alignment Vertical.          --
627         --                                        --
628         -- The nongeometric text attributes are : --
629         --                                        --
630         --  Text Font.                        --
631         --  Character Spacing.                --
632         --  Character Expansion Factor.       --
633         --  Text Color.                       --
634         --------------------------------------------
635     
636         Text (  me  : mutable;
637             AText   : CString from Standard;
638             APoint  : Vertex from Graphic3d;
639             AHeight : Real from Standard;
640             AAngle  : PlaneAngle from Quantity;
641             ATp : TextPath from Graphic3d;
642             AHta    : HorizontalTextAlignment from Graphic3d;
643             AVta    : VerticalTextAlignment from Graphic3d;
644             EvalMinMax  : Boolean from Standard = Standard_True )
645             is static;
646         ---Level: Public
647         ---Purpose: Creates the string <AText> at position <APoint>.
648         --      The 3D point of attachment is projected. The text is
649         --      written in the plane of projection.
650         --      The attributes are given with respect to the plane of
651         --      projection.
652         --      AHeight : Height of text.
653         --            (Relative to the Normalized Projection
654         --              Coordinates (NPC) Space).
655         --      AAngle  : Orientation of the text
656         --            (with respect to the horizontal).
657         ---Category: Methods to create Text
658     
659         Text ( me   : mutable;
660                AText    : CString from Standard;
661                APoint   : Vertex from Graphic3d;
662                AHeight  : Real from Standard;
663                EvalMinMax   : Boolean from Standard = Standard_True )
664             is static;
665         ---Level: Public
666         ---Purpose: Creates the string <AText> at position <APoint>.
667         --      The 3D point of attachment is projected. The text is
668         --      written in the plane of projection.
669         --      The attributes are given with respect to the plane of
670         --      projection.
671         --      AHeight : Height of text.
672         --            (Relative to the Normalized Projection
673         --              Coordinates (NPC) Space).
674         --      The other attributes have the following default values:
675         --      AAngle  : PI / 2.
676         --      ATp     : TP_RIGHT
677         --      AHta    : HTA_LEFT
678         --      AVta    : VTA_BOTTOM
679         ---Category: Methods to create Text
680     
681         Text (  me          : mutable;
682                 AText       : ExtendedString from TCollection;
683                 APoint      : Vertex from Graphic3d;
684                 AHeight     : Real from Standard;
685                 AAngle      : PlaneAngle from Quantity;
686                 ATp         : TextPath from Graphic3d;
687                 AHta        : HorizontalTextAlignment from Graphic3d;
688                 AVta        : VerticalTextAlignment from Graphic3d;
689                 EvalMinMax  : Boolean from Standard = Standard_True )
690             is static;
691         ---Level: Internal
692         ---Purpose: Creates the string <AText> at position <APoint>.
693         --      The 3D point of attachment is projected. The text is
694         --      written in the plane of projection.
695         --      The attributes are given with respect to the plane of
696         --      projection.
697         --      AHeight : Height of text.
698         --            (Relative to the Normalized Projection
699         --              Coordinates (NPC) Space).
700         --      AAngle  : Orientation of the text
701         --            (with respect to the horizontal).
702         ---Category: Methods to create Text
703     
704         Text ( me           : mutable;
705                AText        : ExtendedString from TCollection;
706                APoint       : Vertex from Graphic3d;
707                AHeight      : Real from Standard;
708                EvalMinMax   : Boolean from Standard = Standard_True )
709             is static;
710         ---Level: Internal
711         ---Purpose: Creates the string <AText> at position <APoint>.
712         --      The 3D point of attachment is projected. The text is
713         --      written in the plane of projection.
714         --      The attributes are given with respect to the plane of
715         --      projection.
716         --      AHeight : Height of text.
717         --            (Relative to the Normalized Projection
718         --              Coordinates (NPC) Space).
719         --      The other attributes have the following default values:
720         --      AAngle  : PI / 2.
721         --      ATp     : TP_RIGHT
722         --      AHta    : HTA_LEFT
723         --      AVta    : VTA_BOTTOM
724         ---Category: Methods to create Text
725     
726         ---------------------------------------
727         ---Category: Methods to create Triangle
728         ---------------------------------------
729     
730         TriangleMesh ( me           : mutable;
731                        ListVertex   : Array1OfVertex from Graphic3d;
732                        EvalMinMax   : Boolean from Standard = Standard_True )
733         ---Level: Public
734         ---Purpose: Creates triangles from an array of points such that
735         --      the Kth triangle contains the vertices K, K+1, K+2.
736         --      The triangle will be drawn using the current fill
737         --      attributes (AspectFillArea3d)
738         --  Category: Methods to create Triangle
739         --  Warning: Raises GroupDefinitionError if <ListVertex> contains
740         --      less than three points.
741         raises GroupDefinitionError from Graphic3d is static;
742     
743         TriangleMesh ( me           : mutable;
744                        ListVertex   : Array1OfVertexN from Graphic3d;
745                        EvalMinMax   : Boolean from Standard = Standard_True )
746         ---Level: Public
747         ---Purpose: Creates triangles from an array of points such that
748         --      the Kth triangle contains the vertices K, K+1, K+2.
749         --      The triangle will be drawn using the current fill
750         --      attributes (AspectFillArea3d)
751         --      The normal is given for each vertex.
752         --  Category: Methods to create Triangle
753         --  Warning: Raises GroupDefinitionError if <ListVertex> contains
754         --      less than three points.
755         raises GroupDefinitionError from Graphic3d is static;
756     
757         TriangleMesh ( me           : mutable;
758                        ListVertex   : Array1OfVertexNT from Graphic3d;
759                        EvalMinMax   : Boolean from Standard = Standard_True )
760         ---Level: Public
761         ---Purpose: Creates triangles from an array of points such that
762         --      the Kth triangle contains the vertices K, K+1, K+2.
763         --      The triangle will be drawn using the current fill
764         --      attributes (AspectFillArea3d)
765         --      The normal is given for each vertex.
766         --      A texture coordinate is given for each vertex.
767         --  Category: Methods to create Triangle
768         --  Warning: Raises GroupDefinitionError if <ListVertex> contains
769         --      less than three points.
770         raises GroupDefinitionError from Graphic3d is static;
771   
772         TriangleSet ( me            : mutable;
773                       ListVertex    : Array1OfVertex from Graphic3d;
774                       ListEdge      : Array1OfEdge from Aspect;
775                       EvalMinMax    : Boolean from Standard = Standard_True )
776         ---Level: Public
777         ---Purpose: Creates a group of triangles defined by a table of
778         --      vertices and a table of edges, visible or not.
779         --  Category: Methods to create Triangle
780         --  Warning: Raises GroupDefinitionError if <ListVertex> contains
781         --      less than three points or if <ListEdge> contains
782         --      less than three edges.
783         raises GroupDefinitionError from Graphic3d is static;
784     
785         TriangleSet ( me            : mutable;
786                       ListVertex    : Array1OfVertexN from Graphic3d;
787                       ListEdge      : Array1OfEdge from Aspect;
788                       EvalMinMax    : Boolean from Standard = Standard_True )
789         ---Level: Public
790         ---Purpose: Creates a group of triangles defined by a table of
791         --      vertices and a table of edges, visible or not.
792         --      For each vertex the normal is given.
793         --  Category: Methods to create Triangle
794         --  Warning: Raises GroupDefinitionError if <ListVertex> contains
795         --      less than three points or if <ListEdge> contains
796         --      less than three edges.
797         raises GroupDefinitionError from Graphic3d is static;
798      
799         TriangleSet ( me            : mutable;
800                       ListVertex    : Array1OfVertexNT from Graphic3d;
801                       ListEdge      : Array1OfEdge from Aspect;
802                       EvalMinMax    : Boolean from Standard = Standard_True )
803         ---Level: Public
804         ---Purpose: Creates a group of triangles defined by a table of
805         --      vertices and a table of edges, visible or not.
806         --      For each vertex the normal is given.
807         --      For each vertex a texture coordinate is given.
808         --  Category: Methods to create Triangle
809         --  Warning: Raises GroupDefinitionError if <ListVertex> contains
810         --      less than three points or if <ListEdge> contains
811         --      less than three edges.
812         raises GroupDefinitionError from Graphic3d is static;
813     
814         TriangleSet ( me            : mutable;
815                       ListVertex    : Array1OfVertexC from Graphic3d;
816                       ListEdge      : Array1OfEdge from Aspect;
817                       EvalMinMax    : Boolean from Standard = Standard_True )
818         ---Level: Public
819         ---Purpose: Creates a group of triangles defined by a table of
820         --      vertices and a table of edges, visible or not.
821         --      For each vertex the color is given.
822         --  Category: Methods to create Triangle
823         --  Warning: Raises GroupDefinitionError if <ListVertex> contains
824         --      less than three points or if <ListEdge> contains
825         --      less than three edges.
826         raises GroupDefinitionError from Graphic3d is static;
827     
828         TriangleSet ( me            : mutable;
829                       ListVertex    : Array1OfVertexNC from Graphic3d;
830                       ListEdge      : Array1OfEdge from Aspect;
831                       EvalMinMax    : Boolean from Standard = Standard_True )
832         ---Level: Public
833         ---Purpose: Creates a group of triangles defined by a table of
834         --      vertices and a table of edges, visible or not.
835         --      For each vertex the normal and the color are given.
836         --  Category: Methods to create Triangle
837         --  Warning: Raises GroupDefinitionError if <ListVertex> contains
838         --      less than three points or if <ListEdge> contains
839         --      less than three edges.
840         raises GroupDefinitionError from Graphic3d is static;
841     
842     AddPrimitiveArray( me      : mutable;
843                        elem    : ArrayOfPrimitives from Graphic3d;
844           EvalMinMax: Boolean from Standard = Standard_True );
845         ---Level: Public
846     ---Purpose: Adds an array of primitives for display
847
848     RemovePrimitiveArray( me       : mutable;
849                           aRank    : Integer from Standard) 
850         ---Level: Public
851     ---Purpose: Remove the array of primitives of rank <aRank> 
852         raises OutOfRange from Standard is static;
853     -- if <aRank> is < 1 or > ArrayNumber()
854
855     RemovePrimitiveArrays( me       : mutable);
856         ---Level: Public
857     ---Purpose: Remove all array of primitives 
858     
859         UserDraw ( me           : mutable;
860                    AnObject     : Address from Standard; 
861                    EvalMinMax   : Boolean from Standard = Standard_True; 
862     -- SAMTECH contribution 5 July 2007 -- BEGIN
863            ContainsFacet: Boolean from Standard = Standard_False
864     -- SAMTECH contribution 5 July 2007 -- END 
865         )
866         ---Level: Public
867         ---Purpose: Creates an UserDraw primitive
868         --  Category: Methods to create UserDraw
869         --  Warning: Raises GroupDefinitionError if ...
870         raises GroupDefinitionError from Graphic3d is static;
871
872         ----------------------------
873         -- Category: Inquire methods
874         ----------------------------
875
876     ArrayNumber( me )
877     returns Integer from Standard;
878         ---Level: Public
879     ---Purpose: Returns the number of primitive array added in this group 
880
881     InitDefinedArray( me:mutable );
882         ---Level: Public
883     ---Purpose: Initialize the array list iterator. 
884
885     NextDefinedArray( me:mutable );
886         ---Level: Public
887     ---Purpose: Increments the array list iterator. 
888
889     MoreDefinedArray( me:mutable )
890     returns Boolean from Standard;
891         ---Level: Public
892     ---Purpose: Returns TRUE if more array exists in the list.
893
894     DefinedArray( me )
895     returns mutable ArrayOfPrimitives from Graphic3d;
896         ---Level: Public
897     ---Purpose: Returns the current array of primitives according
898     -- to the array list iterator value. 
899
900         IsGroupPrimitivesAspectSet ( me;
901                     theAspect : GroupAspect from Graphic3d )
902             returns Boolean from Standard
903             is static;
904         ---Level: Public
905         ---Purpose: Returns TRUE if aspect is set for the group.
906         ---Category: Inquire methods
907
908         GroupPrimitivesAspect ( me;
909                                 CTXL    : AspectLine3d from Graphic3d;
910                                 CTXT    : AspectText3d from Graphic3d;
911                                 CTXM    : AspectMarker3d from Graphic3d;
912                                 CTXF    : AspectFillArea3d from Graphic3d )
913                 is static;
914         ---Level: Public
915         ---Purpose: Returns the context of all the primitives of the group.
916         ---Category: Inquire methods
917     
918         PrimitivesAspect ( me;
919                            CTXL : AspectLine3d from Graphic3d;
920                            CTXT : AspectText3d from Graphic3d;
921                            CTXM : AspectMarker3d from Graphic3d;
922                            CTXF : AspectFillArea3d from Graphic3d )
923                 is static;
924         ---Level: Public
925         ---Purpose: Returns the last inserted context in the group <me>
926         --          foreach kind of primitives.
927         ---Category: Inquire methods
928
929         ContainsFacet ( me )
930             returns Boolean from Standard
931             is static;
932         ---Level: Internal
933         ---Purpose: Returns Standard_True if the group <me> contains
934         --      Polygons, Triangles or Quadrangles.
935         ---Category: Inquire methods
936     
937         IsDeleted ( me )
938             returns Boolean from Standard
939             is static;
940         ---Level: Public
941         ---Purpose: Returns Standard_True if the group <me> is deleted.
942         --      <me> is deleted after the call Remove (me) or the
943         --      associated structure is deleted.
944         ---Category: Inquire methods
945     
946         IsEmpty ( me )
947             returns Boolean from Standard
948             is static;
949         ---Level: Public
950         ---Purpose: Returns Standard_True if the group <me> is empty.
951         ---Warning: A group is empty if the MinMaxValues method returns :
952         --      XMin = YMin = ZMin = RealFirst ().
953         --      XMax = YMax = ZMax = RealLast ().
954         ---Category: Inquire methods
955     
956         MinMaxValues ( me;
957                        XMin, YMin, ZMin : out Real from Standard;
958                        XMax, YMax, ZMax : out Real from Standard )
959             is static;
960         ---Level: Public
961         ---Purpose: Returns the coordinates of the boundary box of the
962         --      group <me>.
963         ---Warning: If the group <me> is empty then :
964         --      XMin = YMin = ZMin = RealFirst ().
965         --      XMax = YMax = ZMax = RealLast ().
966         ---Category: Inquire methods
967     
968         Structure ( me )
969             returns mutable Structure from Graphic3d
970             is static;
971         ---Level: Public
972         ---Purpose: Returns the structure containing the group <me>.
973         ---Category: Inquire methods
974     
975         ----------------------------
976         -- Category: Private methods
977         ----------------------------
978     
979         Exploration ( me )
980             is static;
981         ---Level: Internal
982         ---Purpose: Prints informations about the group <me>.
983         ---Category: Private methods
984     
985         Labels ( me;
986              LB, LE : in out Integer from Standard )
987             is static private;
988         ---Level: Internal
989         ---Purpose: Returns the position of the group in the structure.
990         ---Category: Private methods
991     
992         MinMaxCoord ( me;
993                       XMin, YMin, ZMin : out Real from Standard;
994                       XMax, YMax, ZMax : out Real from Standard )
995             is static private;
996         ---Level: Internal
997         ---Purpose: Returns the extreme coordinates found in the group.
998         ---Warning: If the group <me> is empty then :
999         --      XMin = YMin = ZMin = RealFirst ().
1000         --      XMax = YMax = ZMax = RealLast ().
1001         ---Category: Private methods
1002     
1003         Update ( me )
1004             is static private;
1005         ---Level: Internal
1006         ---Purpose: Calls the Update method of the StructureManager which
1007         --      contains the associated Structure of the Group <me>.
1008         ---Category: Private methods
1009     
1010         -----------------------------
1011         -- Category: Internal methods
1012         -----------------------------
1013     
1014         BeginPrimitives ( me : mutable )
1015             is static;
1016         ---Level: Internal
1017         ---Category: Internal methods
1018     
1019         EndPrimitives ( me : mutable )
1020             is static;
1021         ---Level: Internal
1022         ---Category: Internal methods
1023     
1024         Bezier ( me         : mutable;
1025                  ListVertex : Array1OfVertex from Graphic3d;
1026                  EvalMinMax : Boolean from Standard = Standard_True )
1027         ---Level: Internal
1028         ---Purpose: Creates a non rational Bezier curve with a set of poles :
1029         --      ListVertex. The weights are defaulted to all being 1.
1030         --  Category: Methods to create Curve
1031         --  Warning: Raises GroupDefinitionError if <ListVertex> contains
1032         --      less than two points.
1033         raises GroupDefinitionError from Graphic3d is static;
1034     
1035         Bezier ( me         : mutable;
1036                  ListVertex : Array1OfVertex from Graphic3d;
1037                  ListWeight : Array1OfReal from TColStd;
1038                  EvalMinMax : Boolean from Standard = Standard_True )
1039         ---Level: Internal
1040         ---Purpose: Creates a non rational Bezier curve with a set of poles :
1041         --      ListVertex and the set of weights ListWeight.
1042             --      If all the weights are identical the curve is considered 
1043             --      as non rational.
1044         --  Category: Methods to create Curve
1045         --  Warning: Raises GroupDefinitionError if <ListVertex> contains
1046         --      less than two points or <ListVertex> and <ListWeight>
1047         --      have not the same length or one weight value is lower
1048         --      or equal to Resolution from package gp.
1049         raises GroupDefinitionError from Graphic3d is static;
1050     
1051     --
1052     
1053     fields
1054     
1055     --
1056     -- Class    :   Graphic3d_Group
1057     --
1058     -- Purpose  :   Declaration of variables specific to groups
1059     --          of primitives.
1060     --
1061     -- Reminder :   A group is defined in a structure
1062     --          It acts as the smallest editable entity.
1063     
1064         -- the associated C structure 
1065         MyCGroup        :   CGroup from Graphic3d;
1066     
1067         -- the graphic driver used
1068         MyGraphicDriver     :   GraphicDriver from Graphic3d;
1069     
1070         -- the state of the different contexts for primitives
1071         MyCBitFields        :   CBitFields4 from Graphic3d;
1072     
1073         -- the structure contains the group
1074         MyPtrStructure      :   Address from Standard;
1075     
1076         -- the min-max
1077     MyBounds                :       CBounds from Graphic3d;
1078
1079     MyListOfPArray          :   ListOfPArray from Graphic3d;
1080     MyListOfPArrayIterator  :   ListIteratorOfListOfPArray from Graphic3d;
1081
1082     MyMarkArray             :       HArray1OfByte from TColStd;
1083     MyMarkWidth             :       Integer from Standard;
1084     MyMarkHeight            :       Integer from Standard;
1085
1086     friends
1087     
1088         Remove from class Structure from Graphic3d
1089             ( me : mutable; AGroup : Group from Graphic3d )
1090     
1091     end Group;