0023709: Redesign of hlrtest command: vhlr and vhlrtype commands were added; hlr...
[occt.git] / src / AIS / AIS_InteractiveObject.cdl
1 -- Created on: 1996-12-11
2 -- Created by: Robert COUBLANC
3 -- Copyright (c) 1996-1999 Matra Datavision
4 -- Copyright (c) 1999-2012 OPEN CASCADE SAS
5 --
6 -- The content of this file is subject to the Open CASCADE Technology Public
7 -- License Version 6.5 (the "License"). You may not use the content of this file
8 -- except in compliance with the License. Please obtain a copy of the License
9 -- at http://www.opencascade.org and read it completely before using this file.
10 --
11 -- The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
12 -- main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
13 --
14 -- The Original Code and all software distributed under the License is
15 -- distributed on an "AS IS" basis, without warranty of any kind, and the
16 -- Initial Developer hereby disclaims all such warranties, including without
17 -- limitation, any warranties of merchantability, fitness for a particular
18 -- purpose or non-infringement. Please see the License for the specific terms
19 -- and conditions governing the rights and limitations under the License.
20
21 --   GG  :  GER61351 17/11/1999 Change SetColor() with a compatible 
22 --              Quantity_Color instead the restricted NameOfColor.
23 --          Add SetCurrentFacingModel() methods
24 --   GG :   IMP140100 Add HasPresentation() and Presentation() methods
25 --                    Add SetAspect() method
26 --   SAN :  OCC4895 22/03/04 High-level interface for controlling polygon offsets
27
28
29 deferred class InteractiveObject from AIS inherits SelectableObject from SelectMgr
30
31         ---Purpose: 
32         -- Defines a class of objects with display and selection services.
33         -- Entities which are visualized and selected are
34         -- Interactive Objects. You can make use of classes of
35         -- standard Interactive Objects for which all necessary
36         -- methods have already been programmed, or you can
37         -- implement your own classes of Interactive Objects.
38         -- Specific attributes of entities such as arrow aspect for
39         -- dimensions must be loaded in a Drawer. This Drawer
40         -- is then applied to the Interactive Object in view.
41         -- There are four types of Interactive Object in AIS: the
42         -- construction element or Datum, the Relation, which
43         -- includes both dimensions and constraints, the Object,
44         -- and finally, when the object is of an unknown type, the None type.
45         -- Inside these categories, a signature, or index,
46         -- provides the possibility of additional characterization.
47         -- By default, the Interactive Object has a None type
48         -- and a signature of 0. If you want to give a particular
49         -- type and signature to your interactive object, you must
50         -- redefine the methods, Signature and Type.
51         -- Warning
52         -- In the case of attribute methods, methods for
53         -- standard attributes are virtual. They must be
54         -- redefined   by the inheriting classes. Setcolor for a
55         -- point and Setcolor for a plane, for example, do not
56         -- affect the same attributes in the Drawer.
57
58 uses
59     Trsf                 from gp,
60     NameOfColor          from Quantity,
61     Color                from Quantity,
62     Ratio                from Quantity,
63     ListOfTransient      from TColStd,
64     ListOfInteger        from TColStd,
65     Box                  from Bnd,
66     NameOfMaterial       from Graphic3d,
67     MaterialAspect       from Graphic3d,
68     Drawer               from AIS,
69     PToContext           from AIS,
70     TypeOfPresentation3d from PrsMgr,
71     InteractiveContext   from AIS,
72     KindOfInteractive    from AIS,
73     TypeOfFacingModel    from Aspect,
74     Transformation       from Geom,
75     Presentation         from Prs3d,
76     BasicAspect          from Prs3d,
77     -- 22-03-04 OCC4895 SAN High-level interface for controlling polygon offsets
78     PresentationManager  from PrsMgr,
79     Presentation         from PrsMgr
80     -- 22-03-04 OCC4895 SAN High-level interface for controlling polygon offsets
81
82 is
83     Initialize (aTypeOfPresentation3d: TypeOfPresentation3d from PrsMgr = PrsMgr_TOP_AllView) ;
84         ---Purpose: The TypeOfPresention3d means that the interactive object
85         --          may have a presentation dependant of the view of Display
86     
87
88     
89             ---Category: Virtual methods to be redefined...
90         
91     Type     (me) returns KindOfInteractive from AIS is virtual;
92         ---Purpose:
93         -- Returns the kind of Interactive Object:
94         -- -   None
95         -- -   Datum
96         -- -   Relation
97         -- -   Object
98         --   By default, the   interactive object has a None type.
99         -- Because specific shapes entail different behavior
100         -- according to their sub-shapes, you may need to
101         -- create a Local Context. This will allow you to
102         -- specify the additional characteristics which you
103         -- need to handle these shapes.
104     
105     Signature(me) returns Integer from Standard is virtual;
106         ---Purpose: Specifies additional characteristics of Interactive
107         -- Objects. A signature is, in fact, an index with integer
108         -- values assigned different properties.
109         -- This method is frequently used in conjuction with
110         -- Type to give a particular type and signature to an
111         -- Interactive Object. By default, the Interactive Object
112         -- has a None type and a signature of 0. Among the
113         -- datums, this signature is attributed to the shape
114         -- The remaining datums have the following default signatures:
115         -- -   Point                   signature 1
116         -- -   Axis                     signature 2
117         -- -   Trihedron                signature 3
118         -- -   PlaneTrihedron            signature 4
119         -- -   Line                     signature 5
120         -- -   Circle                  signature 6
121         -- -   Plane                   signature 7.
122     
123         
124     AcceptShapeDecomposition(me) returns Boolean from Standard is virtual;
125         ---C++: inline
126         ---Purpose:  Informs the graphic context that the interactive Object
127         -- may be decomposed into sub-shapes for dynamic selection.
128         -- The most used Interactive Object is AIS_Shape.
129         -- Activation methods for standard selection modes are
130         -- proposed in the Interactive Context. These include
131         -- selection by vertex or by edges. For datums with the
132         -- same behavior as AIS_Shape, such as vetices and
133         -- edges, we must redefine the virtual method so that
134         -- AcceptShapeDecomposition returns false.
135             --      Rule for selection : 
136             --        Mode 0 :  Selection of  the interactive Object itself
137             --        Mode 1 :  Selection of vertices
138             --        Mode 2 :  Selection Of Edges
139             --        Mode 3 :  Selection Of Wires
140             --        Mode 4 :  Selection Of Faces ... 
141     
142
143     SetCurrentFacingModel(me: mutable;
144                aModel: TypeOfFacingModel from Aspect = Aspect_TOFM_BOTH_SIDE);
145         ---Purpose: change the current facing model apply on polygons for
146         -- SetColor(), SetTransparency(), SetMaterial() methods
147         -- default facing model is Aspect_TOFM_TWO_SIDE. This mean that attributes is
148         -- applying both on the front and back face.
149
150     CurrentFacingModel(me) returns TypeOfFacingModel from Aspect;
151         ---Purpose: Returns the current facing model which is in effect.
152
153     SetColor(me:mutable;aColor:Color from Quantity) is virtual;
154
155     SetColor(me:mutable;aColor:NameOfColor from Quantity) is virtual;
156         ---Purpose: only the interactive obj knowns which Drawer attribute
157         --          is  affected by the color  (ex:  for a  wire, it's the
158         --          wireaspect field of the drawer, but  for a vertex, only
159         --          the point aspect field is affected by the color)
160         --          WARNING : Do not forget to set the corresponding fields
161         --          here (hasOwnColor and myOwnColor)
162     
163     UnsetColor(me:mutable) is virtual;
164         ---Purpose: Removes color settings. Only the Interactive Object
165         -- knows which Drawer attribute is   affected by the color
166         -- setting. For a wire, for example, wire aspect is the
167         -- attribute affected. For a vertex, however, only point
168         -- aspect is affected by the color setting.
169  
170     SetWidth(me:mutable; aValue:Real from Standard) is virtual;
171         ---Purpose: Allows you to provide the setting aValue for width.
172         -- Only the Interactive Object knows which Drawer
173         -- attribute is affected by the width setting.
174
175     UnsetWidth(me:mutable) is virtual;
176     
177     AcceptDisplayMode(me;aMode:Integer from Standard) returns Boolean from  Standard is virtual;
178         ---Purpose: Returns true if the class of objects accepts the display mode aMode.
179         -- The interactive context can have a default mode of
180         -- representation for the set of Interactive Objects. This
181         -- mode may not be accepted by a given class of
182         -- objects. Consequently, this virtual method allowing us
183         -- to get information about the class in question must be implemented.
184     DefaultDisplayMode(me) returns Integer from Standard is virtual;
185         ---Purpose: Returns the default display mode. This method is to
186         -- be implemented when the main mode is not mode 0.
187
188
189     Redisplay (me:mutable; AllModes:Boolean from Standard =Standard_False); 
190         ---Purpose: Updates the active presentation; if <AllModes> = Standard_True
191         --          all the presentations inside are recomputed. 
192     
193
194     SetInfiniteState(me:mutable;aFlag:Boolean from Standard = Standard_True);
195         ---Purpose: Sets the infinite state flag aFlage.
196         -- if   <aFlag>   = True  ,  the   interactiveObject  is
197         --          considered as infinite, i.e. its graphic presentations
198         --          are not taken in account for View FitAll...
199     
200     IsInfinite(me) returns Boolean from Standard;
201         ---C++: inline
202         ---Purpose:
203         -- Returns true if the interactive object is infinite. In this
204         -- case, its graphic presentations are not taken into
205         -- account in the fit-all view.
206
207    
208                     ---Category: Link To InteractiveContext
209
210     HasInteractiveContext(me) returns Boolean from Standard;
211         ---Purpose: Indicates whether the Interactive Object has a pointer
212         -- to an interactive context.
213         
214     GetContext(me) returns InteractiveContext from AIS;
215         ---Purpose: Returns the context pointer to the interactive context.
216         
217     SetContext(me:mutable; aCtx : InteractiveContext from AIS) is virtual;
218         ---Purpose:  Sets the interactive context aCtx and provides a link
219         -- to the default drawing tool or "Drawer" if there is none.
220     
221     HasOwner (me) returns Boolean from Standard;
222         ---Purpose: Returns true if the object has an owner attributed to it.
223         -- The owner can be a shape for a set of sub-shapes or
224         -- a sub-shape for sub-shapes which it is composed of,
225         -- and takes the form of a transient.
226         
227     GetOwner (me) returns any Transient from Standard;
228         ---Purpose: Returns the owner of the Interactive Object.
229         -- The owner can be a shape for a set of sub-shapes or
230         -- a sub-shape for sub-shapes which it is composed of,
231         -- and takes the form of a transient.
232         -- There are two types of owners:
233         -- -   Direct owners, decomposition shapes such as
234         --   edges, wires, and faces.
235         -- -   Users, presentable objects connecting to sensitive
236         --   primitives, or a shape which has been decomposed.
237         ---C++: inline
238         ---C++: return const&
239     
240     
241     
242     SetOwner (me                : mutable; 
243               ApplicativeEntity : Transient from  Standard);
244         ---Purpose: Allows you to attribute the owner ApplicativeEntity to
245         -- an Interactive Object. This can be a shape for a set of
246         -- sub-shapes or a sub-shape for sub-shapes which it
247         -- is composed of. The owner takes the form of a transient.
248         ---C++: inline
249          
250     ClearOwner(me:mutable);    
251         ---Purpose: Each Interactive Object has methods which allow us
252         -- to attribute an Owner to it in the form of a Transient.
253         -- This method removes the owner from the graphic entity.    
254     
255     
256     HasUsers(me) returns Boolean from Standard;
257     
258     Users(me) returns ListOfTransient from TColStd;
259         ---C++: inline
260         ---C++: return const&
261     
262     
263     AddUser(me:mutable; aUser : Transient from Standard);
264     
265     ClearUsers(me:mutable);
266     
267     
268     
269                 ---Category: "STANDARD" LOCAL ATTRIBUTES :
270                 --           
271                 --           -Local DisplayMode
272                 --           -Color
273                 --           -width of lines or points
274                 --           -typeOfLine or Marker Aspect
275                 --           -material name (if needed)
276                 --           -transparency (if needed)
277                 --           
278                 --           Specific attributes of entities (such  as
279                 --           arrow  aspect   for dimensions)   must be
280                 --           loaded in a  Drawer; this drawer  is then
281                 --           applied to InteractiveObject   WARNING  :
282                 --           Here the  Methods for standard attributes
283                 --           are virtual and  do nothing  they must be
284                 --           redefined  by the  inheriting     classes
285                 --           (setcolor for a  point and setcolor for a plane
286                 --           don't affect the same attributes in the Drawer)
287     
288
289     HasDisplayMode (me)
290     returns Boolean from Standard;
291         ---Purpose:
292         -- Returns true if the Interactive Object has a display
293         -- mode setting. Otherwise, it is displayed in Neutral Point.
294         ---C++: inline
295
296     SetDisplayMode(me : mutable; aMode : Integer from Standard);
297         ---Purpose: Sets the display mode aMode for the interactive object.
298         -- An object can have its own temporary display mode,
299         -- which is different from that proposed by the interactive context.
300         -- The range of possibilities currently proposed is the following:
301         -- -   AIS_WireFrame
302         -- -   AIS_Shaded
303         --   This range can, however, be extended through the creation of new display modes.
304     
305     UnsetDisplayMode(me : mutable);
306         ---Purpose: Removes display mode settings from the interactive object.
307         ---C++: inline
308
309     DisplayMode(me)
310     returns Integer;
311         ---C++: inline
312         ---Purpose: Returns the display mode setting of the Interactive Object.
313         -- The range of possibilities is the following:
314         -- -   AIS_WireFrame
315         -- -   AIS_Shaded
316         --   This range can, however, be extended through the
317         -- creation of new display modes.
318
319
320     HasSelectionMode(me) returns Boolean from Standard;
321         ---Purpose: Allows you to change the selection mode of an
322         -- Interactive Object.
323         -- The default selection mode setting is 0.
324         -- For shapes, for example, the selection modes are as follows:
325         -- -   mode 0 - selection of the shape itself
326         -- -   mode 1 - selection of vertices
327         -- -   mode 2 - selection of edges
328         -- -   mode 3 - selection of wires
329         -- -   mode 4 - selection of faces
330         -- -   mode 5 - selection of shells
331         -- -   mode 6 - selection of solids
332         -- -   mode 7 - selection of compounds
333         --   For trihedra, on the other hand, the selection modes are the following four:
334         -- -   mode 0 - selection of a trihedron
335         -- -   mode 1 - selection of its origin
336         -- -   mode 2 - selection of its axes
337         -- -   mode 3 - selection of its planes    
338     
339     SelectionMode(me) returns Integer from Standard;
340         ---Purpose: Returns the selection mode of the interactive object.    
341     
342     SetSelectionMode(me:mutable; aMode: Integer from Standard);
343         ---Purpose: You can change the default selection mode index
344         -- aMode of an Interactive Object.
345         -- This is only of interest if you decide that mode 0
346         -- adopted by convention will not do.    
347     
348     UnsetSelectionMode(me:mutable);
349         ---Purpose: You can change the default selection mode index of
350         -- an Interactive Object.
351         -- This is only of interest if you decide that the 0 mode
352         -- adopted by convention will not do.
353         ---C++: inline
354
355     
356     SelectionPriority(me) returns Integer from Standard;
357         ---C++: inline
358         ---Purpose: Returns the selection priority setting. -1 indicates that there is none.
359         -- You can modify the selection priority of an owner to
360         -- make one entity more selectionable than another one.
361         -- The default selection priority for an owner is 5, for
362         -- example. To increase selection priority, choose a
363         -- setting between 5 and 10. An entity with priority 7 will
364         -- take priority over one with a setting of 6 if both
365         -- objects are selected at the same time.
366         -- You could give vertices priority 8, edges priority 7,
367         -- faces priority 6, and shapes priority 5. If a vertex, an
368         -- edge and a face are simultaneously detected during
369         -- selection, only the vertex will then be highlighted.
370         -- For trihedra, for example, the default priorities are the following four:
371         -- -   priority 1 - a trihedron
372         -- -   priority 5 - its origin
373         -- -   priority 3 - its axes
374         -- -   priority 2 - its planes
375         
376     SetSelectionPriority(me:mutable; aPriority : Integer from Standard); 
377         ---C++: inline
378         ---Purpose: Allows you to provide a setting aPriority for selection priority.
379         -- You can modify selection priority of an owner to make
380         -- one entity more selectionable than another one. The
381         -- default selection priority for an owner is 5, for
382         -- example. To increase selection priority, choose a
383         -- setting between 5 and 10. An entity with priority 7 will
384         -- take priority over one with a setting of 6.
385         
386     UnsetSelectionPriority(me:mutable);
387         ---C++: inline
388         ---Purpose: Removes the setting for selection priority. SelectionPriority then returns -1.
389         
390     HasSelectionPriority(me) returns Boolean from Standard;
391         ---C++: inline
392         ---Purpose: Returns true if there is a setting for selection priority.
393         -- You can modify selection priority of an owner to make
394         -- one entity more selectionable than another one. The
395         -- default selection priority for an owner is 5, for
396         -- example. To increase selection priority, choose a
397         -- setting between 5 and 10. An entity with priority 7 will
398         -- take priority over one with a setting of 6.
399
400     HasHilightMode(me) returns Boolean from Standard;
401         ---C++: inline
402         ---Purpose: Returns true if the Interactive Object is in highlight mode.
403  
404    HilightMode(me) returns Integer from Standard ;
405         ---C++: inline
406         ---Purpose: Returns the setting for highlight mode.
407         -- At dynamic detection, the presentation echoed by the
408         -- Interactive Context, is by default the presentation
409         -- already on the screen. You can specify a Highlight
410         -- presentation mode which is valid no matter what the
411         -- active representation of the object. It makes no
412         -- difference whether this choice is temporary or
413         -- definitive.   To do this, we use the following functions:
414         -- -   SetHilightMode
415         -- -   UnSetHilightMode
416         --   In the case of a shape, whether it is visualized in
417         -- wireframe presentation or with shading, we want to
418         -- systematically highlight the wireframe presentation.
419         -- Consequently, we set the highlight mode to 0.
420         
421     SetHilightMode(me:mutable;anIndex : Integer from Standard);
422         ---C++: inline
423         ---Purpose: Sets the highlight mode anIndex for the interactive object.
424         -- If, for example, you want to systematically highlight
425         -- the wireframe presentation of a shape - whether
426         -- visualized in wireframe presentation or with shading -
427         -- you set the highlight mode to 0.
428     
429     UnsetHilightMode(me:mutable);
430         ---C++: inline
431         ---Purpose: Allows the user to take a given Prs for hilight
432         --          ex : for a shape which would be displayed in shading mode
433         --          the hilight Prs is the wireframe mode.
434         --          if No specific hilight mode is defined, the displayed Prs
435         --          will be the hilighted one.    
436     
437     HasColor (me) returns Boolean from Standard;
438         ---C++: inline
439         ---Purpose: Returns true if the Interactive Object has color.
440             
441     Color(me) returns NameOfColor from Quantity is virtual;
442         ---C++: inline
443         ---Purpose: Returns the color setting of the Interactive Object.
444
445     Color(me; aColor: out Color from Quantity) is virtual;
446         ---C++: inline
447    
448     HasWidth(me) returns Boolean from Standard;
449         ---C++: inline
450         ---Purpose: Returns true if the Interactive Object has width.
451     
452     Width(me) returns Real from Standard ;
453         --- Purpose: Returns the width setting of the Interactive Object.   
454     
455     HasMaterial(me) returns Boolean from Standard ;
456         ---Purpose: Returns true if the Interactive Object has a setting for material.    
457     Material(me) returns NameOfMaterial from Graphic3d is virtual;
458         ---Purpose: Returns the current material setting.
459         -- This will be on of the following materials:
460         -- -   Brass
461         -- -   Bronze
462         -- -   Gold
463         -- -   Pewter
464         -- -   Silver
465         -- -   Stone.
466     
467     SetMaterial(me:mutable;aName:NameOfMaterial from Graphic3d) is virtual; 
468         ---Purpose: Sets the name aName for material defining this
469         -- display attribute for the interactive object.
470         -- Material aspect determines shading aspect, color and
471         -- transparency of visible entities.
472
473  
474     SetMaterial(me:mutable;aName:MaterialAspect from Graphic3d) is virtual; 
475         --- Purpose: Sets the material aMat defining this display attribute
476         -- for the interactive object.
477         -- Material aspect determines shading aspect, color and
478         -- transparency of visible entities.
479     
480     UnsetMaterial(me:mutable) is virtual;
481         ---Purpose: Removes the setting for material.
482
483     SetTransparency(me:mutable;aValue : Real from Standard=0.6) is virtual;
484         ---Purpose: Attributes a setting aValue for transparency.
485         -- The transparency value should be between 0.0 and 1.0.
486         -- At 0.0 an object will be totally opaque, and at 1.0, fully transparent.
487         -- Warning At a value of 1.0, there may be nothing visible.
488     
489     IsTransparent(me) returns Boolean from Standard;
490         ---C++: inline
491         ---Purpose: Returns true if there is a transparency setting.
492           
493     Transparency(me) returns Real from Standard is virtual;      
494         ---Purpose: Returns the transparency setting.
495         -- This will be between 0.0 and 1.0.
496         -- At 0.0 an object will be totally opaque, and at 1.0, fully transparent.
497         
498     UnsetTransparency(me:mutable) is virtual;   
499         ---Purpose: Removes the transparency setting. The object is opaque by default.
500     
501     SetAttributes(me:mutable; aDrawer: Drawer from AIS) is virtual; 
502         ---Purpose: Initializes the drawing tool aDrawer.
503     
504     Attributes(me) returns any Drawer from AIS;
505         ---C++: return const&
506         ---C++:  inline
507         ---Purpose: Returns the attributes settings.
508         
509     UnsetAttributes(me:mutable) is virtual;
510         ---Purpose: Clears settings provided by the drawing tool aDrawer.
511
512             ---Category: information about Prs to be recomputed
513             --           after local attributes change... to be removed...
514
515     RecomputeEveryPrs(me) returns Boolean is virtual private;
516
517     MustRecomputePrs(me;aMode : Integer from Standard) is  private;
518         
519     ListOfRecomputeModes(me)returns ListOfInteger from TColStd is private;
520         ---C++: return const&
521     SetRecomputeOk(me:mutable) is private;
522
523     State(me:mutable;theState: Integer from Standard) ;
524         ---C++: inline
525     State(me) returns Integer from Standard ;
526         ---C++: inline
527
528     SetTransformation ( me : mutable;
529                 aTranformation: Transformation from Geom;
530                 postConcatenate: Boolean from Standard = Standard_False;
531                 updateSelection: Boolean from Standard = Standard_True)
532         is static;
533         ---Level: Public
534         ---Purpose: Transforms all presentations of the object
535         --  and replace the actual transformation matrix if <postConcatenate> is FALSE.
536         -- Note that the selection  must be updated only at the end of 
537         -- object animation when <updateSelection> is TRUE
538         ---Category: Transformation method
539
540     UnsetTransformation ( me : mutable )   
541         is static;
542         ---Level: Public
543         ---Purpose: Deactivate the current transformation
544         ---Category: Transformation method
545
546     Transformation ( me : mutable ) returns Transformation from Geom 
547         is static;
548         ---Level: Public
549         ---Purpose: Returns the current transformation associated
550         -- to the first available presentation of this object.
551         ---Category: Inquire transformation method
552
553     HasTransformation ( me ) returns Boolean from Standard
554         is static;
555         ---Level: Public
556         ---Purpose: Returns TRUE when this object is transformed
557         ---Category: Inquire transformation method
558
559     HasPresentation ( me ) returns Boolean from Standard
560         is static;
561         ---Level: Public
562         ---Purpose: Returns TRUE when this object has a presentation 
563         --          in the current DisplayMode()
564         ---Category: Inquire transformation method
565
566     Presentation ( me ) returns Presentation from Prs3d 
567         is static;
568         ---Level: Public
569         ---Purpose: Returns the current presentation of this object
570         --          according to the current DisplayMode()
571         ---Category: Inquire transformation method
572
573     SetAspect ( me : mutable; anAspect: any BasicAspect from Prs3d;
574                      globalChange: Boolean from Standard = Standard_True)
575         is static;
576         ---Level: Public
577         ---Purpose: Sets the graphic basic aspect to the current presentation.
578         --          When <globalChange> is TRUE , the full object presentation
579         --          is changed.
580         --          When <globalChange> is FALSE , only the current group
581         --          of the object presentation is changed.
582         ---Category: Graphic attributes management 
583
584     -- 22-03-04 OCC4895 SAN High-level interface for controlling polygon offsets
585     SetPolygonOffsets ( me : mutable;
586                 aMode   : Integer from Standard;
587                 aFactor : ShortReal from Standard = 1.0;
588                 aUnits  : ShortReal from Standard = 0.0 ) is virtual;
589         ---Level: Public
590         ---Purpose: Sets up polygon offsets for this object.
591         --          It modifies all existing presentations of <anObj> (if any),
592         --          so it is reasonable to call this method after <anObj> has been displayed.
593         --          Otherwise, Compute() method should pass Graphic3d_AspectFillArea3d 
594         --          aspect from <myDrawer> to Graphic3d_Group to make polygon offsets work.
595         --
596         --          <aMode> parameter can contain various combinations of 
597         --          Aspect_PolygonOffsetMode enumeration elements (Aspect_POM_None means
598         --          that polygon offsets are not changed).
599         --          If <aMode> is different from Aspect_POM_Off and Aspect_POM_None, then <aFactor> and <aUnits> 
600         --          arguments are used by graphic renderer to calculate a depth offset value:
601         --          
602         --          offset = <aFactor> * m + <aUnits> * r, where
603         --          m - maximum depth slope for the polygon currently being displayed,
604         --          r - minimum window coordinates depth resolution (implementation-specific).
605         -- 
606         --          Deafult settings for OCC 3D viewer: mode = Aspect_POM_Fill, factor = 1., units = 0.
607         --
608         --          Negative offset values move polygons closer to the viewport,
609         --          while positive values shift polygons away.
610         --          Consult OpenGL reference for details (glPolygonOffset function description).
611         --
612         --          NOTE: This method has a side effect - it creates own shading aspect
613         --          if not yet created, so it is better to set up object material, 
614         --          color, etc. first.
615         ---Category: Graphic attributes management
616
617     HasPolygonOffsets ( me ) 
618                 returns Boolean from Standard 
619                 is virtual;
620         ---Level: Public
621         ---Purpose: Returns Standard_True if <myDrawer> has non-null shading aspect
622         ---Category: Inquire methods
623
624     PolygonOffsets ( me;
625                 aMode   : out Integer from Standard;
626                 aFactor : out ShortReal from Standard;
627                 aUnits  : out ShortReal from Standard ) is virtual;
628         ---Level: Public
629         ---Purpose: Retrieves current polygon offsets settings from <myDrawer>.
630         ---Category: Inquire methods
631
632 fields
633
634     myCTXPtr : PToContext from AIS;
635
636     -- The reference to applicative World...
637
638     myOwner  : Transient from Standard;
639     myUsers  : ListOfTransient  from TColStd;
640
641     -- The Information Fields
642
643     myDrawer            : Drawer  from AIS is protected ;
644     myTransparency      : Real    from Standard is protected;
645  -- GER61351   myOwnColor          : NameOfColor from Quantity is protected;
646     myOwnColor          : Color from Quantity is protected;
647     myOwnMaterial       : NameOfMaterial from Graphic3d is protected;
648     ---myOwnMaterial       : NameOfPhysicalMaterial from Graphic3d is protected;
649     mySelPriority       : Integer from Standard;
650     myDisplayMode       : Integer from Standard ;
651     mySelectionMode     : Integer from Standard;
652     myHilightMode       : Integer from Standard is protected;
653     myOwnWidth          : Real    from Standard is protected;
654     myInfiniteState     : Boolean from Standard is protected;
655     hasOwnColor         : Boolean from Standard is protected;
656     hasOwnMaterial      : Boolean from Standard is protected ;
657     myCurrentFacingModel: TypeOfFacingModel from Aspect is protected;
658     
659     -- the management field (to be removed)... 
660     myRecomputeEveryPrs : Boolean from Standard is protected;
661     
662     myToRecomputeModes  : ListOfInteger from TColStd is protected;
663     mystate             : Integer from Standard;
664     myHasTransformation : Boolean from Standard;
665
666
667 friends
668     class InteractiveContext from AIS
669
670 end InteractiveObject;
671