0026029: Visualization - Poor performance of connected objects
[occt.git] / src / Graphic3d / Graphic3d_Structure.cdl
1 -- Created on: 1991-06-12
2 -- Created by: NW,JPB,CAL
3 -- Copyright (c) 1991-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 --              11/97 ; CAL : gestion du GraphicClear
18 --              11/97 ; CAL : ajout pointer StructPtr
19 --              11/97 ; CAL : amelioration de l'effacement SetManager
20 --              01/98 ; CAL : gestion du HLRValidation
21 --              05/98 ; CAL : gestion du GraphicConnect et Disconnect
22 --              02/00 ; GG  : Made Transform() methode not mutable.
23 --              31/05/01 ; GG : Add ResetDisplayPriority() method
24
25 class Structure from Graphic3d inherits TShared
26
27         ---Version:
28
29         ---Purpose: This class allows the definition a graphic object.
30         --          This graphic structure can be displayed,
31         --          erased, or highlighted.
32         --          This graphic structure can be connected with
33         --          another graphic structure.
34         --  Keywords: Structure, StructureManager, Display, Erase, Highlight,
35         --           UnHighlight, Visible, Priority, Selectable, Visible,
36         --           Visual, Connection, Ancestors, Descendants, Transformation
37
38         ---Warning:
39         ---References:
40
41 uses
42
43     Array2OfReal            from TColStd,
44     SequenceOfAddress       from TColStd,
45
46     Color                   from Quantity,
47
48     GenId                   from Aspect,
49     TypeOfHighlightMethod   from Aspect,
50
51     DataStructureManager    from Graphic3d,
52     AspectFillArea3d        from Graphic3d,
53     AspectLine3d            from Graphic3d,
54     AspectMarker3d          from Graphic3d,
55     AspectText3d            from Graphic3d,
56     CStructure              from Graphic3d,
57     GraphicDriver           from Graphic3d,
58     Group                   from Graphic3d,
59     SequenceOfGroup         from Graphic3d,
60     SequenceOfStructure     from Graphic3d,
61     HSequenceOfStructure    from Graphic3d,
62     MapOfStructure          from Graphic3d,
63     IndexedMapOfAddress     from Graphic3d,
64     StructureManager        from Graphic3d,
65     StructureManagerPtr     from Graphic3d,
66     TypeOfComposition       from Graphic3d,
67     TypeOfConnection        from Graphic3d,
68     TypeOfPrimitive         from Graphic3d,
69     TypeOfStructure         from Graphic3d,
70     Vector                  from Graphic3d,
71     Vertex                  from Graphic3d,
72     TransModeFlags          from Graphic3d,
73     ZLayerId                from Graphic3d,
74     Pnt                     from gp,
75     SequenceOfHClipPlane    from Graphic3d,
76     BndBox4f                from Graphic3d,
77     BndBox4d                from Graphic3d,
78     Box                     from Bnd
79
80 raises
81
82         PriorityDefinitionError         from Graphic3d,
83         StructureDefinitionError        from Graphic3d,
84         TransformError                  from Graphic3d
85
86 is
87
88         ------------------------
89         -- Category: Constructor
90         ------------------------
91
92   Create (theManager : StructureManager from Graphic3d)
93   returns Structure from Graphic3d;
94   ---Level: Public
95   ---Purpose: Creates a graphic object in the manager theManager.
96   -- It will appear in all the views of the visualiser.
97   -- Warning: The default values AspectLine, AspectFillArea, AspectText and AspectMarker are NOT applied to the structure.
98   -- The structure is not displayed when it is created.
99
100   Create (theManager : StructureManager from Graphic3d;
101           thePrs     : Structure        from Graphic3d)
102   returns Structure from Graphic3d;
103   ---Level: Public
104   ---Purpose: Creates a shadow link to existing graphic object.
105
106         ---------------------------------------------------
107         -- Category: Methods to modify the class definition
108         ---------------------------------------------------
109
110         --------------------------------------------------------
111         -- Summary of Display Priorities                      --
112         --                                                    --
113         -- Structure display priorities  control the order in --
114         -- which structures are redrawn.                      --
115         --                                                    --
116         -- When  you  display  a structure, you  specify  its --
117         -- priority.  The  lower  the  value, the  lower  the --
118         -- display priority. When the display is regenerated, --
119         -- the structures  with the lowest priority are drawn --
120         -- first.                                             --
121         -- For  structures  with the  same display  priority, --
122         -- the  order in which they were displayed determines --
123         -- determines the drawing order.                      --
124         --                                                    --
125         -- CAS.CADE supports 11 structure display priorities, --
126         -- 0 to 10.                                           --
127         --------------------------------------------------------
128
129         Clear ( me              : mutable;
130                 WithDestruction : Boolean from Standard = Standard_True )
131                 is virtual;
132         ---Level: Public
133         ---Purpose: if WithDestruction == Standard_True then
134         --              suppress all the groups of primitives in the structure.
135         --              and it is mandatory to create a new group in <me>.
136         --          if WithDestruction == Standard_False then
137         --              clears all the groups of primitives in the structure.
138         --              and all the groups are conserved and empty.
139         --          They will be erased at the next screen update.
140         --          The structure itself is conserved.
141         --          The transformation and the attributes of <me> are conserved.
142         --          The childs of <me> are conserved.
143         ---Category: Methods to modify the class definition
144
145         Destroy ( me    : mutable )
146                 is virtual;
147         ---Level: Public
148         ---Purpose: Suppresses the structure <me>.
149         --          It will be erased at the next screen update.
150         ---Category: Methods to modify the class definition
151         ---C++: alias ~
152
153   Display ( me : mutable )
154   is virtual;
155   ---Level: Public
156   ---Purpose: Displays the structure <me> in all the views of the visualiser.
157
158         DisplayPriority ( me )
159                 returns Integer from Standard
160                 is static;
161         ---Level: Public
162         ---Purpose: Returns the current display priority for the
163         --          structure <me>.
164         ---Category: Methods to modify the class definition
165
166         Erase ( me      : mutable )
167                 is virtual;
168         ---Level: Public
169         ---Purpose: Erases the structure <me> in all the views
170         --          of the visualiser.
171         ---Category: Methods to modify the class definition
172
173   Highlight ( me : mutable;
174               theMethod : TypeOfHighlightMethod from Aspect;
175               theColor  : Color                 from Quantity;
176               theToUpdateMgr : Boolean from Standard = Standard_True)
177                 is static;
178         ---Level: Public
179         ---Purpose: Highlights the structure <me> in all the views of the visualiser, using the following methods:
180         --  TOHM_COLOR    = drawn in the highlight color
181         --  TOHM_BOUNDBOX = enclosed by the boundary box
182
183         Remove ( me     : mutable )
184                 is static;
185         ---Level: Public
186         ---Purpose: Suppress the structure <me>.
187         --          It will be erased at the next screen update.
188         --  Warning: No more graphic operations in <me> after this call.
189         --  Category: Methods to modify the class definition
190
191         CalculateBoundBox ( me  : mutable )
192                 is static;
193         ---Level:   Public
194         ---Purpose: Computes axis-aligned bounding box of a structure.
195         --  Category: Methods to modify the class definition
196
197     SetInfiniteState (me : mutable; theToSet : Boolean from Standard) is static;
198     ---Level: Internal
199     ---Purpose: If <theToSet> is Standard_True then <me> is infinite and
200     --          the MinMaxValues method method return :
201     --          theXMin = theYMin = theZMin = RealFirst().
202     --          theXMax = theYMax = theZMax = RealLast().
203     --          By default, <me> is not infinite but empty.
204     ---Category: Methods to modify the class definition
205
206         SetDisplayPriority ( me         : mutable;
207                              Priority   : Integer from Standard )
208         ---Level: Public
209         ---Purpose: Modifies the order of displaying the structure.
210         --          Values are between 0 and 10.
211         --          Structures are drawn according to their display priorities
212         --          in ascending order.
213         --          A structure of priority 10 is displayed the last and appears over the others.
214         --          The default value is 5.
215         --  Category: Methods to modify the class definition
216         --  Warning: If <me> is displayed then the SetDisplayPriority
217         --          method erase <me> and display <me> with the
218         --          new priority.
219         --          Raises PriorityDefinitionError if <Priority> is
220         --          greater than 10 or a negative value.
221         raises PriorityDefinitionError from Graphic3d is static;
222
223         ResetDisplayPriority ( me               : mutable)
224                 is static;
225         ---Level: Public
226         ---Purpose: Reset the current priority of the structure to the
227         --          previous priority.
228         --  Category: Methods to modify the class definition
229         --  Warning: If <me> is displayed then the SetDisplayPriority
230         --          method erase <me> and display <me> with the
231         --          previous priority.
232         
233         SetZLayer ( me         : mutable;
234                     theLayerId : ZLayerId from Graphic3d )
235            is static;
236         ---Purpose: Set Z layer ID for the structure. The Z layer mechanism
237         -- allows to display structures presented in higher layers in overlay
238         -- of structures in lower layers by switching off z buffer depth
239         -- test between layers
240
241         GetZLayer ( me )
242           returns ZLayerId from Graphic3d is static;
243         ---Purpose: Get Z layer ID of displayed structure. The method
244         -- returns -1 if the structure has no ID (deleted from graphic driver).
245
246     SetClipPlanes (me : mutable; thePlanes : SequenceOfHClipPlane from Graphic3d) is static;
247     ---Purpose: Changes a sequence of clip planes slicing the structure on rendering.
248     -- @param thePlanes [in] the set of clip planes.
249
250     GetClipPlanes (me) returns SequenceOfHClipPlane from Graphic3d;
251     ---C++: return const&
252     ---Purpose: Get clip planes slicing the structure on rendering.
253     -- @return set of clip planes.
254
255         SetPrimitivesAspect ( me        : mutable;
256                               CTX       : AspectLine3d from Graphic3d )
257                 is static;
258         ---Level: Public
259         ---Purpose: Modifies the default attributes for lines
260         --          in the structure <me>.
261         ---Category: Methods to modify the class definition
262
263         SetPrimitivesAspect ( me        : mutable;
264                               CTX       : AspectFillArea3d from Graphic3d )
265                 is static;
266         ---Level: Public
267         ---Purpose: Modifies the default attributes for faces
268         --          in the structure <me>.
269         ---Category: Methods to modify the class definition
270
271         SetPrimitivesAspect ( me        : mutable;
272                               CTX       : AspectText3d from Graphic3d )
273                 is static;
274         ---Level: Public
275         ---Purpose: Modifies the default attributes for text
276         --          in the structure <me>.
277         ---Category: Methods to modify the class definition
278
279         SetPrimitivesAspect ( me        : mutable;
280                               CTX       : AspectMarker3d from Graphic3d )
281                 is static;
282         ---Level: Public
283         ---Purpose: Modifies the default attributes for markers
284         --          in the structure <me>.
285         ---Category: Methods to modify the class definition
286
287         SetVisible ( me         : mutable;
288                      AValue     : Boolean from Standard )
289                 is static;
290         ---Level: Public
291         ---Purpose: Modifies the visibility indicator to Standard_True or
292         --          Standard_False for the structure <me>.
293         --          The default value at the definition of <me> is
294         --          Standard_True.
295         ---Category: Methods to modify the class definition
296
297         SetVisual ( me          : mutable;
298                     AVisual     : TypeOfStructure from Graphic3d )
299                 is virtual;
300         ---Level: Public
301         ---Purpose: Modifies the visualisation mode for the structure <me>.
302         ---Warning: It is not possible to display a structure with
303         --          an incompatible display mode.
304         --          If the display mode is different from the current one,
305         --          the structure is erased.
306         --
307         --          TOS_WIREFRAME for a wireframe visualisation
308         --          TOS_SHADING for a shaded visualisation
309         --          TOS_ALL for all visualisations
310         --          TOS_COMPUTED for a computed visualisation
311         --          The default value is TOS_ALL
312         --
313         ---Category: Methods to modify the class definition
314
315         SetZoomLimit ( me                       : mutable;
316                        LimitInf, LimitSup       : Real from Standard )
317         ---Level: Internal
318         ---Purpose: Modifies the minimum and maximum zoom coefficients
319         --          for the structure <me>.
320         --          The default value at the definition of <me> is unlimited.
321         --  Category: Methods to modify the class definition
322         --  Warning: Raises StructureDefinitionError if <LimitInf> is
323         --          greater than <LimitSup> or if <LimitInf> or
324         --          <LimitSup> is a negative value.
325         raises StructureDefinitionError from Graphic3d is static;
326
327     SetIsForHighlight ( me               : mutable;
328                         isForHighlight   : Boolean from Standard )
329         is static;
330     ---Level: Internal
331     ---Purpose: marks the structure <me> representing wired structure needed for
332     --          highlight only so it won't be added to BVH tree.
333     --  Category: Methods to modify the class definition
334
335         UnHighlight ( me        : mutable )
336                 is static;
337         ---Level: Public
338         ---Purpose: Suppresses the highlight for the structure <me>
339         --           in all the views of the visualiser.
340         ---Category: Methods to modify the class definition
341
342         ----------------------------
343         -- Category: Compute methods
344         ----------------------------
345
346   Compute (me: mutable)
347   is virtual;
348   ---Level: Advanced
349   ---Category: Methods to modify the class definition
350
351         Compute ( me    : mutable;
352                   aProjector    : DataStructureManager from Graphic3d )
353                 returns Structure from Graphic3d is virtual;
354         ---Level: Advanced
355         ---Purpose: Returns the new Structure defined for the new visualization
356         ---Category: Methods to modify the class definition
357
358         Compute ( me    : mutable;
359                   aProjector    : DataStructureManager from Graphic3d;
360                   AMatrix       : Array2OfReal from TColStd )
361                 returns Structure from Graphic3d is virtual;
362         ---Level: Advanced
363         ---Purpose: Returns the new Structure defined for the new visualization
364         ---Category: Methods to modify the class definition
365
366         Compute ( me    : mutable;
367                   aProjector    : DataStructureManager from Graphic3d;
368                   aStructure    : in out Structure from Graphic3d )
369                 is virtual;
370         ---Level: Advanced
371         ---Purpose: Returns the new Structure defined for the new visualization
372         ---Category: Methods to modify the class definition
373
374         Compute ( me    : mutable;
375                   aProjector    : DataStructureManager from Graphic3d;
376                   AMatrix       : Array2OfReal from TColStd;
377                   aStructure    : in out Structure from Graphic3d )
378                 is virtual;
379         ---Level: Advanced
380         ---Purpose: Returns the new Structure defined for the new visualization
381         ---Category: Methods to modify the class definition
382
383         ReCompute ( me  : mutable );
384         ---Level: Advanced
385         ---Purpose: Forces a new construction of the structure <me>
386         --          if <me> is displayed and TOS_COMPUTED.
387         ---Category: Methods to modify the class definition
388
389         ReCompute ( me          : mutable;
390                     aProjector  : DataStructureManager from Graphic3d );
391         ---Level: Advanced
392         ---Purpose: Forces a new construction of the structure <me>
393         --          if <me> is displayed in <aProjetor> and TOS_COMPUTED.
394         ---Category: Methods to modify the class definition
395
396         ----------------------------
397         -- Category: Inquire methods
398         ----------------------------
399
400         ContainsFacet ( me )
401                 returns Boolean from Standard
402                 is static;
403         ---Level: Public
404         ---Purpose: Returns Standard_True if the structure <me> contains
405         --          Polygons, Triangles or Quadrangles.
406         ---Category: Inquire methods
407
408         
409         FillArea3dAspect ( me )
410                 returns AspectFillArea3d from Graphic3d
411                 is static;
412         ---Level: Public
413         ---Purpose: Returns the values of the current default attributes.
414         ---Category: Inquire methods
415
416         Groups ( me )
417                 returns SequenceOfGroup from Graphic3d
418                 is static;
419         ---C++: return const &
420         ---Level: Internal
421         ---Purpose: Returns the groups sequence included in the structure <me> (internal storage).
422         ---Category: Inquire methods
423
424         NumberOfGroups ( me )
425                 returns Integer from Standard
426                 is static;
427         ---Level: Public
428         ---Purpose: Returns the current number of groups in the
429         --          structure <me>.
430         ---Category: Inquire methods
431
432   NewGroup ( me : mutable ) returns Group from Graphic3d
433   is static;
434   ---Level: Public
435   ---Purpose: Append new group to this structure.
436
437   Remove ( me : mutable;
438            theGroup : Group from Graphic3d )
439   is static private;
440   ---Purpose: Suppress in the structure <me>, the group theGroup.
441   -- It will be erased at the next screen update.
442
443         HighlightColor ( me )
444                 returns Color from Quantity
445                 is static;
446         ---C++: return const&
447         ---Level: Public
448         ---Purpose: Returns the highlight color for the Highlight method
449         --          with the highlight method TOHM_COLOR or TOHM_BOUNDBOX.
450         ---Category: Inquire methods
451
452         IsDeleted ( me )
453                 returns Boolean from Standard
454                 is static;
455         ---Level: Public
456         ---Purpose: Returns Standard_True if the structure <me> is deleted.
457         --          <me> is deleted after the call Remove (me).
458         ---Category: Inquire methods
459
460         IsDisplayed ( me )
461                 returns Boolean from Standard
462                 is virtual;
463         ---Level: Public
464         ---Purpose: Returns the display indicator for the structure <me>.
465         ---Category: Inquire methods
466
467         IsEmpty ( me )
468                 returns Boolean from Standard
469                 is static;
470         ---Level: Public
471         ---Purpose: Returns Standard_True if the structure <me> is empty.
472         --  Warning: A structure is empty if :
473         --              it do not have group or all the groups are empties
474         --              and it do not have descendant or all the descendants
475         --              are empties.
476         ---Category: Inquire methods
477
478         IsInfinite ( me )
479                 returns Boolean from Standard
480                 is static;
481         ---Level: Internal
482         ---Purpose: Returns Standard_True if the structure <me> is infinite.
483         ---Category: Inquire methods
484
485         IsHighlighted ( me )
486                 returns Boolean from Standard
487                 is virtual;
488         ---Level: Public
489         ---Purpose: Returns the highlight indicator for the structure <me>.
490         ---Category: Inquire methods
491
492         IsRotated ( me )
493                 returns Boolean from Standard
494                 is static;
495         ---Level: Public
496         ---Purpose: Returns Standard_True if the structure <me> is rotated.
497         --          <=> The transformation != Identity, != Scale, != Translation.
498         ---Category: Inquire methods
499
500         IsTransformed ( me )
501                 returns Boolean from Standard
502                 is static;
503         ---Level: Public
504         ---Purpose: Returns Standard_True if the structure <me> is transformed.
505         --          <=> The transformation != Identity.
506         ---Category: Inquire methods
507
508         IsVisible ( me )
509                 returns Boolean from Standard
510                 is static;
511         ---Level: Public
512         ---Purpose: Returns the visibility indicator for the structure <me>.
513         ---Category: Inquire methods
514
515         Line3dAspect ( me )
516                 returns AspectLine3d from Graphic3d
517                 is static;
518         ---Level: Public
519         ---Purpose: Returns the values of the current default attributes.
520         ---Category: Inquire methods
521
522         Marker3dAspect ( me )
523                 returns AspectMarker3d from Graphic3d
524                 is static;
525         ---Purpose: Returns the current group of graphic attributes used
526         -- for 3d marker primitives.
527
528     MinMaxValues (me; theToIgnoreInfiniteFlag : Boolean from Standard = Standard_False)
529     returns Box from Bnd
530     is static;
531     ---Level: Public
532     ---Purpose: Returns the coordinates of the boundary box of the structure <me>.
533     --          If <theToIgnoreInfiniteFlag> is TRUE, the method returns actual graphical
534     --          boundaries of the Graphic3d_Group components. Otherwise, the
535     --          method returns boundaries taking into account infinite state
536     --          of the structure. This approach generally used for application
537     --          specific fit operation (e.g. fitting the model into screen,
538     --          not taking into accout infinite helper elements).
539     --          Warning: If the structure <me> is empty then the empty box is returned,
540     --          If the structure <me> is infinite then the whole box is returned.
541     ---Category: Inquire methods
542
543         PrimitivesAspect ( me;
544                            CTXL : out AspectLine3d from Graphic3d;
545                            CTXT : out AspectText3d from Graphic3d;
546                            CTXM : out AspectMarker3d from Graphic3d;
547                            CTXF : out AspectFillArea3d from Graphic3d )
548                 is static;
549         ---Level: Public
550         ---Purpose: Returns the current values of the default attributes.
551         ---Category: Inquire methods
552
553         Text3dAspect ( me )
554                 returns AspectText3d from Graphic3d
555                 is static;
556         ---Level: Public
557         ---Purpose: Returns the values of the current default attributes.
558         ---Category: Inquire methods
559
560         Visual ( me )
561                 returns TypeOfStructure from Graphic3d
562                 is static;
563         ---Level: Public
564         ---Purpose: Returns the visualisation mode for the structure <me>.
565         ---Category: Inquire methods
566
567         ----------------------------------------------------
568         -- Category: Methods to manage the structure network
569         ----------------------------------------------------
570
571         -----------------------------------------------------
572         -- Summary of Structure Hierarchies                --
573         --                                                 --
574         -- The root  is the top  of a  structure hierarchy --
575         -- or structure network.                           --
576         --                                                 --
577         -- The attributes of a parent structure are passed --
578         -- passed to its descendants.                      --
579         --                                                 --
580         -- The  attributes  of the  descendant  structures --
581         -- don't affect the parent.                        --
582         --                                                 --
583         -- Recursive structure networks are not supported. --
584         -----------------------------------------------------
585
586         AcceptConnection ( myclass;
587                            AStructure1  : Structure from Graphic3d;
588                            AStructure2  : Structure from Graphic3d;
589                            AType        : TypeOfConnection from Graphic3d )
590                 returns Boolean from Standard;
591         ---Level: Internal
592         ---Purpose: Returns Standard_True if the connection is possible between
593         --          <AStructure1> and <AStructure2> without a creation
594         --          of a cycle.
595         --
596         --          It's not possible to call the method
597         --             AStructure1->Connect (AStructure2, TypeOfConnection)
598         --          if
599         --          - the set of all ancestors of <AStructure1> contains
600         --            <AStructure1> and if the
601         --            TypeOfConnection == TOC_DESCENDANT
602         --          - the set of all descendants of <AStructure1> contains
603         --            <AStructure2> and if the
604         --            TypeOfConnection == TOC_ANCESTOR
605         ---Category: Methods to manage the structure network
606
607         Ancestors ( me; SG: in out MapOfStructure from Graphic3d )
608                 is static;
609         ---Level: Internal
610         ---Purpose: Returns the group of structures to which <me> is connected.
611         ---Category: Methods to manage the structure network
612
613         Connect ( me            : mutable;
614                   AStructure    : Structure from Graphic3d;
615                   AType         : TypeOfConnection from Graphic3d;
616                   WithCheck     : Boolean from Standard = Standard_False );
617         ---Level: Public
618         ---Purpose: If Atype is TOC_DESCENDANT then add <AStructure>
619         --          as a child structure of  <me>.
620         --          If Atype is TOC_ANCESTOR then add <AStructure>
621         --          as a parent structure of <me>.
622         --          The connection propagates Display, Highlight, Erase,
623         --          Remove, and stacks the transformations.
624         --          No connection if the graph of the structures
625         --          contains a cycle and <WithCheck> is Standard_True;
626         ---Category: Methods to manage the structure network
627
628         Descendants ( me; SG : in out MapOfStructure from Graphic3d )
629                 is static;
630         ---Level: Internal
631         ---Purpose: Returns the group of structures connected to <me>.
632         ---Category: Methods to manage the structure network
633
634         Disconnect ( me         : mutable;
635                      AStructure : Structure from Graphic3d )
636                 is static;
637         ---Level: Public
638         ---Purpose: Suppress the connection between <AStructure> and <me>.
639         ---Category: Methods to manage the structure network
640
641         DisconnectAll ( me      : mutable;
642                         AType   : TypeOfConnection from Graphic3d )
643                 is static;
644         ---Level: Public
645         ---Purpose: If Atype is TOC_DESCENDANT then suppress all
646         --          the connections with the child structures of <me>.
647         --          If Atype is TOC_ANCESTOR then suppress all
648         --          the connections with the parent structures of <me>.
649         ---Category: Methods to manage the structure network
650
651         Network ( myclass;
652                   AStructure    : Structure from Graphic3d;
653                   AType         : TypeOfConnection from Graphic3d;
654                   ASet          : in out MapOfStructure from Graphic3d );
655         ---Level: Internal
656         ---Purpose: Returns <ASet> the group of structures :
657         --          - directly or indirectly connected to <AStructure> if the
658         --            TypeOfConnection == TOC_DESCENDANT
659         --          - to which <AStructure> is directly or indirectly connected
660         --            if the TypeOfConnection == TOC_ANCESTOR
661         ---Category: Methods to manage the structure network
662
663         SetOwner ( me   : mutable;
664                    Owner        : Address from Standard )
665                 is static;
666         ---Level: Advanced
667
668         Owner ( me )
669                 returns Address from Standard
670                 is static;
671         ---Level: Advanced
672
673         SetHLRValidation ( me   : mutable;
674                            AFlag        : Boolean from Standard )
675                 is static;
676         ---Level: Advanced
677
678         HLRValidation ( me )
679                 returns Boolean from Standard
680                 is static;
681         ---Level: Advanced
682
683         -----------------------------------------------------------
684         -- Category: Methods to manage the structure transformation
685         -----------------------------------------------------------
686
687         Composition ( me )
688                 returns TypeOfComposition from Graphic3d
689                 is static;
690         ---Level: Public
691         ---Purpose: Returns the type of composition applied to matrices
692         --          of transformation of <me>.
693         ---Category: Methods to manage the structure transformation
694
695         SetTransform ( me       : mutable;
696                        AMatrix  : Array2OfReal from TColStd;
697                        AType    : TypeOfComposition from Graphic3d )
698         ---Level: Public
699         ---Purpose: Modifies the current local modelling transformation
700         --          in the structure <me>.
701         --
702         --          It is defined as a 4*4 real matrix.
703         --
704         --          -------------------
705         --          | a11 a12 a13  t1 |
706         --          | a21 a22 a23  t2 |
707         --          | a31 a32 a33  t3 |
708         --          |  0   0   0   1  |
709         --          -------------------
710         --
711         --          TypeOfComposition : TOC_REPLACE
712         --                              TOC_POSTCONCATENATE
713         --
714         -- Then the modified Local Modelling Transformation is composed
715         -- with the current Global Modelling Transformation to create a
716         -- new Composite Modelling Transformation.
717         --
718         -- The compose type specifies the role of the current local
719         -- modelling transformation (L) in composing the new value for
720         -- the current local modelling transformation (L'), which is
721         -- then combined with the current global modelling transforma-
722         -- tion (G) to calculate the new composite modelling transfor-
723         -- mation (C).
724         --
725         -- TOC_REPLACE
726         -- The transformation matrix (T) replaces the value of
727         -- current local modelling transformation (L).
728         --
729         --      L' <- T
730         --      C <- G x L'
731         --
732         -- TOC_POSTCONCATENATE
733         -- The current local modelling transformation (L) is multiplied
734         -- by the transformation matrix (T):
735         --
736         --      L' <- T x L
737         --      C <- G x L'
738         --
739         --  Category: Methods to manage the structure transformation
740         --  Warning: Raises TransformError if the matrix is not a 4x4 matrix.
741         raises TransformError from Graphic3d is static;
742
743         -- Transform ( me               : mutable;
744         Transform ( me;
745                     AMatrix     : in out Array2OfReal from TColStd )
746                 is static;
747         ---Level: Public
748         ---Purpose: Returns the transformation associated with
749         --          the structure <me>.
750         ---Category: Methods to manage the structure transformation
751
752         SetTransformPersistence( me     : mutable;
753                                  AFlag  : TransModeFlags from Graphic3d;
754                                  APoint : Pnt from gp  )
755         ---Level: Public
756         ---Purpose: Modifies the current modelling transform persistence (pan, zoom or rotate)
757         is static;
758
759         SetTransformPersistence(  me  :  mutable;
760                                   AFlag  :  TransModeFlags  from  Graphic3d  )
761         --  Calls previous   method  with  point  (0,0,0)
762         is  static;
763
764
765         TransformPersistenceMode( me )
766                         returns TransModeFlags from Graphic3d
767         ---Level: Public
768         ---Purpose: Get the current modelling transform persistence (pan, zoom or rotate)
769         is static;
770
771         TransformPersistencePoint( me )
772                         returns Pnt from gp
773         ---Level: Public
774         ---Purpose: Get the current point of relative modelling transform persistence
775         is static;
776
777   SetMutable ( me           : mutable;
778                theIsMutable : Boolean from Standard )
779   is static;
780   ---Purpose: Sets if the structure location has mutable nature (content or location will be changed regularly).
781
782   IsMutable ( me )
783   returns Boolean from Standard
784   is static;
785   ---Purpose: Returns true if structure has mutable nature (content or location are be changed regularly).
786   -- Mutable structure will be managed in different way than static onces.
787
788         ----------------------------
789         -- Category: Private methods
790         ----------------------------
791
792         ComputeVisual ( me )
793                 returns TypeOfStructure from Graphic3d
794                 is static;
795         ---Level: Internal
796         ---Category: Private methods
797
798         GroupsWithFacet ( me    : mutable;
799                         ADelta  : Integer from Standard )
800                 is static private;
801         ---Level: Internal
802         ---Purpose: Manages the number of groups in the structure <me>
803         --          which contains facet.
804         --          Polygons, Triangles or Quadrangles.
805         --          <ADelta> = +1 or -1
806         ---Category: Private methods
807
808         GraphicClear ( me       : mutable;
809                        WithDestruction  : Boolean from Standard )
810                 is static;
811         ---Level: Internal
812         ---Purpose: Clears the structure <me>.
813         ---Category: Private methods
814
815         GraphicConnect ( me     : mutable;
816                          ADaughter      : Structure from Graphic3d )
817                 is static;
818         ---Level: Internal
819         ---Purpose:
820         ---Category: Private methods
821
822         GraphicDisconnect ( me  : mutable;
823                             ADaughter   : Structure from Graphic3d )
824                 is static;
825         ---Level: Internal
826         ---Purpose:
827         ---Category: Private methods
828
829         GraphicHighlight ( me           : mutable;
830                            Method       : TypeOfHighlightMethod from Aspect )
831                 is static;
832         ---Level: Internal
833         ---Purpose: Highlights the structure <me>.
834         ---Category: Private methods
835
836         GraphicTransform ( me           : mutable;
837                            AMatrix      : Array2OfReal from TColStd )
838                 is static;
839         ---Level: Internal
840         ---Purpose:
841         ---Category: Private methods
842
843         GraphicUnHighlight ( me : mutable )
844                 is static;
845         ---Level: Internal
846         ---Purpose: Suppress the highlight for the structure <me>.
847         ---Category: Private methods
848
849         Identification ( me )
850                 returns Integer from Standard
851                 is static;
852         ---Level: Internal
853         ---Purpose: Returns the identification number of the structure <me>.
854         ---Category: Private methods
855
856   minMaxCoord (me)
857     returns BndBox4f from Graphic3d
858   is static private;
859   ---Purpose: Returns the extreme coordinates found in the structure <me> without transformation applied.
860
861   getBox (me;
862           theBox : out BndBox4d from Graphic3d;
863           theToIgnoreInfiniteFlag : Boolean from Standard = Standard_False)
864   is static private;
865   ---Purpose: Gets untransformed bounding box from structure.
866
867   addTransformed (me;
868                   theBox : out BndBox4d from Graphic3d;
869                   theToIgnoreInfiniteFlag : Boolean from Standard = Standard_False)
870   is static private;
871   ---Purpose: Adds transformed (with myCStructure->Transformation) bounding box of structure to theBox.
872
873         PrintNetwork ( myclass;
874                        AStructure       : Structure from Graphic3d;
875                        AType            : TypeOfConnection from Graphic3d );
876         ---Level: Internal
877         ---Purpose: Prints informations about the network associated
878         --          with the structure <AStructure>.
879         ---Category: Private methods
880
881         Remove ( me     : mutable;
882                  APtr   : Address from Standard;
883                  AType  : TypeOfConnection from Graphic3d )
884                 is static;
885         ---Level: Internal
886         ---Purpose: Suppress the adress <APtr> in the list
887         --          of descendants or in the list of ancestors.
888         ---Category: Private methods
889
890         SetComputeVisual ( me           : mutable;
891                            AVisual      : TypeOfStructure from Graphic3d )
892                 is static;
893         ---Level: Internal
894         ---Category: Private methods
895
896         StructureManager ( me )
897                 returns StructureManager from Graphic3d
898                 is static private;
899         ---Level: Internal
900         ---Purpose: Returns the manager to which <me> is associated.
901         ---Category: Private methods
902
903         Transforms ( myclass;
904                      ATrsf              : Array2OfReal from TColStd;
905                      X, Y, Z            : Real from Standard;
906                      NewX, NewY, NewZ   : out Real from Standard );
907         ---Level: Internal
908         ---Purpose: Transforms <X>, <Y>, <Z> with the transformation <ATrsf>.
909         ---Category: Private methods
910
911         Transforms ( myclass;
912                      ATrsf      : Array2OfReal from TColStd;
913                      Coord      : Vector from Graphic3d )
914                 returns Vector from Graphic3d;
915         ---Level: Internal
916         ---Purpose: Transforms <Coord> with the transformation <ATrsf>.
917         ---Category: Private methods
918
919         Transforms ( myclass;
920                      ATrsf      : Array2OfReal from TColStd;
921                      Coord      : Vertex from Graphic3d )
922                 returns Vertex from Graphic3d;
923         ---Level: Internal
924         ---Purpose: Transforms <Coord> with the transformation <ATrsf>.
925         ---Category: Private methods
926
927     TransformBoundaries (myclass;
928                          theTrsf : Array2OfReal from TColStd;
929                          theXMin, theYMin, theZMin : in out Real from Standard;
930                          theXMax, theYMax, theZMax : in out Real from Standard)
931     is protected;
932     ---Level: Internal
933     ---Purpose: Transforms boundaries with <theTrsf> transformation.
934     ---Category: Private methods
935
936         Update ( me )
937                 is static private;
938         ---Level: Internal
939         ---Purpose: Calls the Update method of the StructureManager which
940         --          contains the Structure <me>.
941         ---Category: Private methods
942
943         UpdateStructure ( me    : mutable;
944                           CTXL  : AspectLine3d from Graphic3d;
945                           CTXT  : AspectText3d from Graphic3d;
946                           CTXM  : AspectMarker3d from Graphic3d;
947                           CTXF  : AspectFillArea3d from Graphic3d )
948                 is static private;
949         ---Level: Internal
950         ---Purpose: Updates the c structure associated to <me>.
951         ---Category: Private methods
952
953   CStructure (me)
954   returns CStructure from Graphic3d
955   is static;
956   ---Purpose: Returns the low-level structure
957   ---C++: return const &
958   ---C++: inline
959
960   AppendDescendant (me : mutable;
961                     theDescendant : Address from Standard)
962     returns Boolean from Standard
963     is protected;
964   ---Level: Internal
965   ---Purpose: Appends new descendant structure.
966   ---Category: Private methods
967
968   RemoveDescendant (me : mutable;
969                     theDescendant : Address from Standard)
970     returns Boolean from Standard
971     is protected;
972   ---Level: Internal
973   ---Purpose: Removes the given descendant structure.
974   ---Category: Private methods
975
976   AppendAncestor (me : mutable;
977                   theAncestor : Address from Standard)
978     returns Boolean from Standard
979     is protected;
980   ---Level: Internal
981   ---Purpose: Appends new ancestor structure.
982   ---Category: Private methods
983
984   RemoveAncestor (me : mutable;
985                   theAncestor : Address from Standard)
986     returns Boolean from Standard
987     is protected;
988   ---Level: Internal
989   ---Purpose: Removes the given ancestor structure.
990   ---Category: Private methods
991
992 fields
993
994 --
995 -- Class        :       Graphic3d_Structure
996 --
997 -- Purpose      :       Declaration of variables specific to
998 --                      graphic structures.
999 -- Reminder     :       A structure is defined in a manager.
1000 --                      It is a sequence of groups of primitives.
1001 --
1002
1003     -- the associated low-level structure
1004     myCStructure : CStructure from Graphic3d;
1005
1006     -- the structures to which the structure is attached
1007     myAncestors     :  SequenceOfAddress from TColStd;
1008
1009     -- the structures attached to the structure
1010     myDescendants   :  SequenceOfAddress from TColStd;
1011
1012     -- the map of structures to which the structure is attached
1013     myAncestorMap   :  IndexedMapOfAddress from Graphic3d;
1014
1015     -- the map of structures attached to the structure
1016     myDescendantMap :  IndexedMapOfAddress from Graphic3d;
1017
1018         -- the highlight method of the structure
1019         myHighlightColor        :       Color from Quantity;
1020         myHighlightMethod       :       TypeOfHighlightMethod from Aspect;
1021
1022         -- the manager accepting the structure
1023         myStructureManager              :       StructureManagerPtr from Graphic3d is protected;
1024         myFirstStructureManager :       StructureManagerPtr from Graphic3d is protected;
1025         myOwner                         :       Address from Standard;
1026
1027         -- the type of visualisation accepted by the structure
1028         myVisual                :       TypeOfStructure from Graphic3d;
1029         myComputeVisual         :       TypeOfStructure from Graphic3d is protected;
1030
1031 friends
1032
1033         -- a lot of methods of Group use the methods of Structure
1034         class Group     from Graphic3d
1035
1036 end Structure;