\feff0025129: Visualization - add interactive object for Points Cloud objects
[occt.git] / src / AIS / AIS.cdl
1 -- Created on: 1996-12-11
2 -- Created by: Robert COUBLANC
3 -- Copyright (c) 1996-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 package AIS 
18
19          ---Purpose: Application Interactive Services provide the means to
20          -- create links between an application GUI viewer and
21          -- the packages which are used to manage selection
22          -- and presentation. The tools AIS defined in order to
23          -- do this include different sorts of entities: both the
24          -- selectable viewable objects themselves and the
25          -- context and attribute managers to define their
26          -- selection and display.
27          -- To orient the user as he works in a modeling
28          -- environment, views and selections must be
29          -- comprehensible. There must be several different sorts
30          -- of selectable and viewable object defined. These must
31          -- also be interactive, that is, connecting graphic
32          -- representation and the underlying reference
33          -- geometry. These entities are called Interactive
34          -- Objects, and are divided into four types:
35          -- -   the Datum
36          -- -   the Relation
37          -- -   the Object
38          -- -   None.
39          --   The Datum groups together the construction elements
40          -- such as lines, circles, points, trihedra, plane trihedra,
41          -- planes and axes.
42          -- The Relation is made up of constraints on one or
43          -- more interactive shapes and the corresponding
44          -- reference geometry. For example, you might want to
45          -- constrain two edges in a parallel relation. This
46          -- contraint is considered as an object in its own right,
47          -- and is shown as a sensitive primitive. This takes the
48          -- graphic form of a perpendicular arrow marked with
49          -- the || symbol and lying between the two edges.
50          -- The Object type includes topological shapes, and
51          -- connections between shapes.
52          -- None, in order not to eliminate the object, tells the
53          -- application to look further until it finds an object
54          -- definition in its generation which is accepted.
55          -- Inside these categories, you have the possibility
56          -- of   an additional characterization by means of a
57          -- signature. The signature provides an index to the
58          -- further characterization. By default, the   Interactive
59          -- Object has a None type and a signature of 0
60          -- (equivalent to None.) If you want to give a particular
61          -- type and signature to your interactive object, you must
62          -- redefine the two virtual methods: Type and Signature.
63          -- In the C++ inheritance structure of the package, each
64          -- class representing a specific Interactive Object
65          -- inherits AIS_InteractiveObject. Among these
66          -- inheriting classes, AIS_Relation functions as the
67          -- abstract mother class for tinheriting classes defining
68          -- display of specific relational constraints and types of
69          -- dimension. Some of these include:
70          -- -   display of constraints based on relations of
71          -- symmetry, tangency, parallelism and concentricity
72          -- -   display of dimensions for angles, offsets,
73          -- diameters, radii and chamfers.
74          --  No viewer can show everything at once with any
75          -- coherence or clarity. Views must be managed
76          -- carefully both sequentially and at any given instant.
77          -- Another function of the view is that of a context to
78          -- carry out design in. The design changes are applied
79          -- to the objects in the view and then extended to the
80          -- underlying reference geometry by a solver. To make
81          -- sense of this complicated visual data, several display
82          -- and selection tools are required. To facilitate
83          -- management, each object and each construction
84          -- element has a selection priority. There are also
85          -- means to modify the default priority.
86          -- To define an environment of dynamic detection, you
87          -- can use standard filter classes or create your own. A
88          -- filter questions the owner of the sensitive primitive in
89          -- local context to determine if it has the the desired
90          -- qualities. If it answers positively, it is kept. If not, it is rejected.
91          -- The standard filters supplied in AIS include:
92          -- AIS_AttributeFilter
93          -- AIS_SignatureFilter
94          -- AIS_TypeFilter.
95          -- Only the type filter can be used in the default
96          -- operating mode, the neutral point. The others can
97          -- only be used in open local contexts.
98          -- Neutral point and local context constitute the two
99          -- operating modes of the central entity which pilots
100          -- visualizations and selections, the Interactive Context.
101          -- It is linked to a main viewer and if you like, a trash bin
102          -- viewer as well.
103          -- The neutral point, which is the default mode, allows
104          -- you to easily visualize and select interactive objects
105          -- which have been loaded into the context. Opening
106          -- local contexts allows you to prepare and use a
107          -- temporary selection environment without disturbing
108          -- the neutral point. A set of functions allows you to
109          -- choose the interactive objects which you want to act
110          -- on, the selection modes which you want to activate,
111          -- and the temporary visualizations which you will
112          -- execute. When the operation is finished, you close the
113          -- current local context and return to the state in which
114          -- you were before opening it (neutral point or previous
115          -- local context).
116          -- An interactive object can have a certain number of
117          -- graphic attributes which are specific to it, such as
118          -- visualization mode, color, and material. By the same
119          -- token, the interactive context has a set of graphic
120          -- attributes, the Drawer which is valid by default for the
121          -- objects it controls.   When an interactive object is
122          -- visualized, the required graphic attributes are first
123          -- taken from the object's own Drawer if one exists, or
124          -- from the context drawer for the others.
125
126     
127 uses
128     TCollection,
129     MMgt,
130     Quantity,
131     TColgp,
132     TColStd,
133     TopLoc,
134     gp,
135     Geom,
136     Bnd,
137     Aspect,
138     Graphic3d,
139     V3d,
140     TopAbs,
141     TopoDS,
142     Prs3d,
143     PrsMgr,
144     Select3D,
145     SelectMgr,
146     StdSelect,
147     DsgPrs,
148     TopTools,
149     Poly,
150     Image
151
152 is
153     
154     
155     enumeration DisplayMode is WireFrame, Shaded;
156          ---Purpose:
157          -- Sets display modes other than neutral point ones,
158          -- for interactive objects. The possibilities include:
159          -- -   wireframe,
160          -- -   shaded,
161         
162     enumeration ConnectStatus is 
163     CS_None,
164     CS_Connection,
165     CS_Transform,
166     CS_Both;
167          ---Purpose: Gives the status of connection of an Interactive
168          -- Object. This will be one of the following:
169          -- -   No connection
170          -- -   Connection
171          -- -   Transformation
172          -- -   Both connection and transformation
173          --   This enumeration is used in
174          -- AIS_ConnectedInteractive. Transform indicates
175          -- that the Interactive Object reference geometry has
176          -- changed location relative to the reference geometry.
177         
178     enumeration TypeOfIso is
179     TOI_IsoU,
180     TOI_IsoV,
181     TOI_Both;
182          ---Purpose: Declares the type of isoparameter displayed.           
183     
184     enumeration DisplayStatus is 
185     DS_Displayed,  
186     DS_Erased,     
187     DS_Temporary, 
188     DS_None;     
189          ---Purpose:
190          -- To give the display status of an Interactive Object.
191          -- This will be one of the following:
192          -- -   DS_Displayed: the Interactive Object is
193          --   displayed in the main viewer;
194          -- -   DS_Erased: the Interactive Object is hidden in main viewer;
195          -- -   DS_Temporary: the Interactive Object is temporarily displayed;
196          -- -   DS_None: the Interactive Object is nowhere displayed.
197         
198     enumeration SelectStatus is 
199     SS_Added,
200     SS_Removed,
201     SS_NotDone
202     end SelectStatus;
203
204     enumeration StatusOfPick is
205     SOP_Error,
206     SOP_NothingSelected,
207     SOP_Removed,
208     SOP_OneSelected,
209     SOP_SeveralSelected
210     end StatusOfPick;
211
212     enumeration StatusOfDetection is
213     SOD_Error,
214     SOD_Nothing,
215     SOD_AllBad,
216     SOD_Selected,
217     SOD_OnlyOneDetected,
218     SOD_OnlyOneGood,
219     SOD_SeveralGood
220     end StatusOfDetection;
221
222     enumeration KindOfDimension is 
223     KOD_NONE,
224     KOD_LENGTH,
225     KOD_PLANEANGLE,
226     KOD_SOLIDANGLE,
227     KOD_AREA,
228     KOD_VOLUME,
229     KOD_MASS,
230     KOD_TIME,
231     KOD_RADIUS,
232     KOD_DIAMETER,
233     KOD_CHAMF2D,
234     KOD_CHAMF3D,
235     KOD_OFFSET,
236     KOD_ELLIPSERADIUS;
237          ---Purpose: Declares the kinds of dimensions needed in the
238          -- display of Interactive Objects.
239         
240     enumeration KindOfInteractive is
241     KOI_None,
242     KOI_Datum,
243     KOI_Shape,
244     KOI_Object,
245     KOI_Relation,
246     KOI_Dimension;
247     --- Purpose: Declares the type of Interactive Object. 
248     -- This is one of the following:
249     -- -   the Datum
250     -- -   the Object
251     -- -   the Relation
252     -- -   the Dimension
253     -- -   the None type.
254     -- The Datum is the construction element. These include
255     -- points, lines, axes and planes. The object brings
256     -- together topological shapes. The Relation includes
257     -- dimensions and constraints. The Dimension includes
258     -- length, radius, diameter and angle dimensions.
259     -- When the object is of an unknown type, the None
260     -- type is declared.
261
262     enumeration ClearMode is
263     CM_All,
264     CM_Interactive,
265     CM_Filters,
266     CM_StandardModes,
267     CM_TemporaryShapePrs
268     end ClearMode;
269          ---Purpose: Declares which entities in an opened local context
270          -- are to be cleared of mode settings. Temporary
271          -- graphic presentations such as those for sub-shapes,
272          -- for example, are only created for the selection
273          -- process. By means of these enumerations, they can
274          -- be cleared from local context.
275
276     enumeration KindOfUnit is 
277     TOU_LENGTH,
278     TOU_SURFACE,
279     TOU_VOLUME,
280     TOU_PLANE_ANGLE,
281     TOU_SOLID_ANGLE,
282     TOU_MASS,
283     TOU_FORCE,
284     TOU_TIME;
285     ---Purpose: Declares the type of Interactive Object unit.
286
287     enumeration TypeOfAxis is TOAX_Unknown,TOAX_XAxis,TOAX_YAxis,TOAX_ZAxis;
288     ---Purpose: Declares the type of axis.
289
290     enumeration TypeOfPlane is TOPL_Unknown,TOPL_XYPlane,TOPL_XZPlane,TOPL_YZPlane;
291      ---Purpose: Declares the type of plane.
292     enumeration TypeOfDist is TOD_Unknown,TOD_Horizontal,TOD_Vertical;
293     ---Purpose: To declare the type of distance.
294
295     enumeration TypeOfAttribute is 
296     TOA_Line,
297     TOA_Dimension,
298     TOA_Wire,
299     TOA_Plane,
300     TOA_Vector,
301     TOA_UIso,
302     TOA_VIso,
303     TOA_Free,
304     TOA_UnFree,
305     TOA_Section, 
306     TOA_Hidden,
307     TOA_Seen,
308     TOA_FirstAxis,
309     TOA_SecondAxis,
310     TOA_ThirdAxis;
311
312     enumeration StandardDatum is SD_None,SD_Point,SD_Axis,SD_Trihedron,SD_PlaneTrihedron,SD_Line,SD_Circle,SD_Plane;
313     --- Purpose: Declares the type of standard datum of an Interactive Object. 
314
315     enumeration KindOfSurface is KOS_Plane, KOS_Cylinder, KOS_Cone, KOS_Sphere, KOS_Torus,
316                                  KOS_Revolution, KOS_Extrusion, KOS_OtherSurface;
317
318 -- Enumerations for dimensions management --
319
320     enumeration DisplaySpecialSymbol is DSS_No, DSS_Before, DSS_After;
321     ---Purpose: Specifies dimension special symbol display options
322
323     enumeration DimensionSelectionMode is DSM_All, DSM_Line, DSM_Text;
324     ---Purpose: Specifies dimension selection modes.
325
326     class Triangulation;
327
328     imported ColoredShape;
329     imported TexturedShape;
330
331     class Drawer;
332     
333     class InteractiveContext;
334
335     class GraphicTool;
336                             
337     class LocalContext;    
338
339     private class LocalStatus;
340
341     private class GlobalStatus;
342  
343     deferred class InteractiveObject;
344
345             ---Category: VARIOUS STANDARD INTERACTIVE OBJECTS
346             --           each type of Datum has a given signature.
347             --           the other interactive objects don't
348             --           implement this signature.
349             --           Mainly used for selection with Filters...
350
351     ---Category: Datum
352     class Point;                         --signature 1
353     class Axis;                          --signature 2
354     class Trihedron;                     --signature 3
355     class PlaneTrihedron;                --signature 4
356     class Line;                          --signature 5
357     class Circle;                        --signature 6
358     class Plane;                         --signature 7 
359
360     
361     ---Category: Object of type Shape
362     class Shape;                         --signature 0
363
364
365     ---Category: General Objects
366     class ConnectedInteractive;          --signature 0
367     class MultipleConnectedInteractive;  --signature 1
368     imported PointCloud;
369
370             ---Category:  DIMENSIONS AND RELATIONS
371  
372     class DimensionOwner;
373
374     deferred class Relation; 
375     deferred class EllipseRadiusDimension; 
376     class MaxRadiusDimension; 
377     class MinRadiusDimension; 
378     imported LengthDimension;
379     imported AngleDimension;
380     imported RadiusDimension;
381     imported DiameterDimension;
382     class Chamf2dDimension;
383     class Chamf3dDimension;
384     class OffsetDimension;
385     class FixRelation;
386     class PerpendicularRelation;
387     class ParallelRelation;
388     class TangentRelation;         
389     class ConcentricRelation;     
390     class IdenticRelation;
391     class SymmetricRelation; -- axial symmetry
392     class MidPointRelation; -- equal distance from point
393     class EqualRadiusRelation;
394     class EqualDistanceRelation;
395
396     
397             ---Category: FILTERS
398  
399     
400     class TypeFilter;
401     class SignatureFilter;    
402     class ExclusionFilter;
403     class AttributeFilter;
404     class C0RegularityFilter;
405     class BadEdgeFilter;
406
407     pointer PToContext to InteractiveContext from AIS;
408
409
410
411
412     class Selection;
413
414
415                     ---Category: The Collections
416
417
418     class ListOfInteractive instantiates List from TCollection
419     (InteractiveObject from AIS);
420
421     class SequenceOfInteractive instantiates Sequence from TCollection
422     (InteractiveObject from AIS);
423     
424     class SequenceOfDimension   instantiates Sequence from TCollection
425     (Relation from AIS);
426             
427     class MapOfInteractive instantiates Map from TCollection
428     (InteractiveObject from AIS,MapTransientHasher from TColStd);
429     
430     
431     class DataMapofIntegerListOfinteractive instantiates DataMap from
432     TCollection(Integer from Standard, ListOfInteractive from AIS,MapIntegerHasher  from  TColStd);
433     -- for further management of layers 
434
435     private class DataMapOfIOStatus instantiates DataMap from
436     TCollection(InteractiveObject from AIS,GlobalStatus from AIS,MapTransientHasher  from  TColStd);
437     -- Management of interactiveObjects Status...
438
439     class IndexedDataMapOfOwnerPrs instantiates IndexedDataMap from TCollection 
440     (EntityOwner from SelectMgr,Presentation from Prs3d ,MapTransientHasher from TColStd); 
441     -- for dynamic selection management in local context...
442     
443     -- san: 18/04/2003 AIS_Selection class optimization
444     -- agv: 04/05/2003 Replace NCollection_List for CDL list
445     imported NListTransient;
446     imported NListIteratorOfListTransient;
447     imported NDataMapOfTransientIteratorOfListTransient;
448     -- service map for AIS_Selection class optimized logic
449
450     private class  DataMapOfILC  instantiates  DataMap  from  TCollection 
451     (Integer  from  Standard,  LocalContext  from  AIS,  MapIntegerHasher  from  TColStd);
452
453     private class DataMapOfSelStat instantiates DataMap from TCollection 
454     (SelectableObject from SelectMgr,LocalStatus from AIS,MapTransientHasher  from  TColStd); 
455     -- to tell if an object is sensitive to Standard Modes Of Selection....
456
457 -- Methods for dimensions
458
459     Nearest( aShape : Shape from TopoDS;
460              aPoint : Pnt from gp )
461     returns Pnt from gp;
462          ---Purpose:
463          -- Returns the nearest point in a shape. This is used by
464          -- several classes in calculation of dimensions.
465
466     Nearest (theLine : Lin from gp;
467              thePoint  : Pnt from gp)
468     returns Pnt from gp;
469     ---Purpose:
470     -- @return the nearest point on the line.
471
472     Nearest (theCurve        : Curve from Geom;
473              thePoint        : Pnt from gp;
474              theFirstPoint     : Pnt from gp;
475              theLastPoint      : Pnt from gp;
476              theNearestPoint : out Pnt from gp)
477     returns Boolean from Standard;
478     ---Purpose:
479     -- For the given point finds nearest point on the curve,
480     -- @return TRUE if found point is belongs to the curve
481     -- and FALSE otherwise.
482
483     Farest( aShape : Shape from TopoDS;
484             aPoint : Pnt from gp )
485     returns Pnt from gp;
486
487     ComputeGeometry (theEdge     : Edge from TopoDS;
488                      theCurve    : out Curve from Geom;
489                      theFirstPnt : out Pnt from gp;
490                      theLastPnt  : out Pnt from gp)
491     ---Purpose: Used by 2d Relation only
492     --          Computes the 3d geometry of <anEdge> in the current WorkingPlane
493     --          and the extremities if any
494     --          Return TRUE if ok.
495     returns Boolean  from Standard;
496
497     ComputeGeometry (theEdge       : Edge from TopoDS;
498                      theCurve      : out Curve from Geom;
499                      theFirstPnt   : out Pnt from gp;
500                      theLastPnt    : out Pnt from gp;
501                      theIsInfinite : out Boolean from Standard)
502     ---Purpose: Used by dimensions only.
503     --          Computes the 3d geometry of <anEdge>.
504     --          Return TRUE if ok.
505     returns Boolean  from Standard;
506
507     ComputeGeometry (theEdge       : Edge from TopoDS;
508                      theCurve      : out Curve from Geom;
509                      theFirstPnt   : out Pnt from gp;
510                      theLastPnt    : out Pnt from gp;
511                      theExtCurve   : out Curve from Geom;
512                      theIsInfinite : out Boolean from Standard;
513                      theIsOnPlane  : out Boolean from Standard;
514                      thePlane      : Plane from Geom)
515     ---Purpose: Used by 2d Relation only
516     --          Computes the 3d geometry of <anEdge> in the current WorkingPlane
517     --          and the extremities if any.
518     --          If <aCurve> is not in the current plane, <extCurve> contains
519     --          the not projected curve associated to <anEdge>.
520     --          If <anEdge> is infinite, <isinfinite> = true and the 2
521     --          parameters <FirstPnt> and <LastPnt> have no signification.
522     --          Return TRUE if ok.
523     returns Boolean from Standard;
524
525     ComputeGeometry (theFirstEdge   : Edge from TopoDS;
526                      theSecondEdge  : Edge from TopoDS;
527                      theFirstCurve  : out Curve from Geom;
528                      theSecondCurve : out Curve from Geom;
529                      theFirstPnt1   : out Pnt from gp;
530                      theLastPnt1    : out Pnt from gp;
531                      theFirstPnt2   : out Pnt from gp;
532                      theLastPnt2    : out Pnt from gp;
533                      thePlane       : Plane from Geom)
534     ---Purpose: Used by 2d Relation only
535     --          Computes the 3d geometry of <anEdge> in the current WorkingPlane
536     --          and the extremities if any
537     --          Return TRUE if ok.
538     returns Boolean from Standard;
539
540     ComputeGeometry (theFirstEdge   : Edge from TopoDS;
541                      theSecondEdge  : Edge from TopoDS;
542                      theFirstCurve  : out Curve from Geom;
543                      theSecondCurve : out Curve from Geom;
544                      theFirstPnt1   : out Pnt from gp;
545                      theLastPnt1    : out Pnt from gp;
546                      theFirstPnt2   : out Pnt from gp;
547                      theLastPnt2    : out Pnt from gp;
548                      theIsinfinite1 : out Boolean from Standard;
549                      theIsinfinite2 : out Boolean from Standard)
550     ---Purpose: Used  by  dimensions  only.Computes  the  3d geometry
551     --          of<anEdge1> and <anEdge2> and checks if they are infinite.
552     returns Boolean from Standard;
553
554     ComputeGeometry (theFirstEdge   : Edge from TopoDS;
555                      theSecondEdge  : Edge from TopoDS;
556                      theExtIndex    : out Integer from Standard;
557                      theFirstCurve  : out Curve from Geom;
558                      theSecondCurve : out Curve from Geom;
559                      theFirstPnt1   : out Pnt from gp;
560                      theLastPnt1    : out Pnt from gp;
561                      theFirstPnt2   : out Pnt from gp;
562                      theLastPnt2    : out Pnt from gp;
563                      theExtCurve    : out Curve from Geom;
564                      theIsinfinite1 : out Boolean from Standard;
565                      theIsinfinite2 : out Boolean from Standard;
566                      thePlane       : Plane from Geom)
567     ---Purpose: Used  by  2d Relation  only Computes  the  3d geometry
568     --          of<anEdge1> and <anEdge2> in the current Plane and the
569     --          extremities if any.   Return in ExtCurve  the 3d curve
570     --          (not projected  in the  plane)  of the  first edge  if
571     --          <indexExt> =1 or of the 2nd edge if <indexExt> = 2. If
572     --          <indexExt> = 0, ExtCurve is Null.  if there is an edge
573     --          external to the  plane,  <isinfinite> is true if  this
574     --          edge is infinite.  So, the extremities of it are not
575     --          significant.  Return TRUE if ok
576     returns Boolean from Standard;
577
578     ComputeGeomCurve (aCurve    : in out Curve from Geom;
579                       first1    : Real from Standard;
580                       last1     : Real from Standard;
581                       FirstPnt1 : out Pnt from gp;
582                       LastPnt1  : out Pnt from gp;
583                       aPlane    : Plane from Geom;
584                       isOnPlane: out Boolean from Standard)
585     ---Purpose: Checks if aCurve belongs to aPlane; if not, projects aCurve in aPlane 
586     --          and returns aCurve;
587     --          Return TRUE if ok
588     returns Boolean from Standard;
589
590     ComputeGeometry (aVertex  : Vertex      from TopoDS;
591                      point    : out Pnt     from gp;
592                      aPlane   : Plane       from Geom;
593                      isOnPlane: out Boolean from Standard)
594     returns Boolean from Standard;
595
596     GetPlaneFromFace (aFace     : Face from TopoDS;
597                       aPlane    : out Pln         from gp;
598                       aSurf     : out Surface     from Geom;
599                       aSurfType : out KindOfSurface from AIS;
600                       Offset    : out Real from Standard)
601     returns Boolean from Standard;
602     ---Purpose: Tryes to get Plane from Face.  Returns Surface of Face
603     --          in aSurf.  Returns Standard_True  and Plane of Face in
604     --           aPlane in following  cases:
605     --          Face is Plane, Offset of Plane,
606     --                  Extrusion of Line  and Offset of  Extrusion of Line
607     --          Returns pure type of Surface which can be:
608     --          Plane, Cylinder, Cone, Sphere, Torus, 
609     --          SurfaceOfRevolution, SurfaceOfExtrusion
610
611    InitFaceLength (aFace        : Face from TopoDS;
612                    aPlane       : out Pln from gp;
613                    aSurface     : out Surface from Geom;
614                    aSurfaceType : out KindOfSurface from AIS;
615                    anOffset     : out Real from Standard );
616
617      InitLengthBetweenCurvilinearFaces (theFirstFace    : Face from TopoDS;
618                                         theSecondFace   : Face from TopoDS;
619                                         theFirstSurf    : in out Surface from Geom;
620                                         theSecondSurf   : in out Surface from Geom;
621                                         theFirstAttach  : out Pnt from gp;
622                                         theSecondAttach : out Pnt from gp;
623                                         theDirOnPlane   : out Dir from gp);
624      ---Purpose: Finds attachment points on two curvilinear faces for length dimension.
625      -- @param thePlaneDir [in] the direction on the dimension plane to
626      -- compute the plane automatically. It will not be taken into account if
627      -- plane is defined by user.
628
629     InitAngleBetweenPlanarFaces (theFirstFace      : Face from TopoDS;
630                                  theSecondFace     : Face from TopoDS;
631                                  theCenter          : out Pnt from gp;
632                                  theFirstAttach     : out Pnt from gp;
633                                  theSecondAttach    : out Pnt from gp;
634                                  theIsFirstPointSet : Boolean from Standard = Standard_False)
635     returns Boolean from Standard;
636     ---Purpose: Finds three points for the angle dimension between
637     -- two planes.
638
639     InitAngleBetweenCurvilinearFaces (theFirstFace      : Face from TopoDS;
640                                       theSecondFace     : Face from TopoDS;
641                                       theFirstSurfType   : KindOfSurface from AIS;
642                                       theSecondSurfType  : KindOfSurface from AIS;
643                                       theCenter          : out Pnt from gp;
644                                       theFirstAttach     : out Pnt from gp;
645                                       theSecondAttach    : out Pnt from gp;
646                                       theIsFirstPointSet : Boolean from Standard = Standard_False)
647     returns Boolean from Standard;
648     ---Purpose: Finds three points for the angle dimension between
649     -- two curvilinear surfaces.
650
651     ProjectPointOnPlane( aPoint : Pnt from gp; aPlane : Pln from gp )
652     returns Pnt from gp;
653                     
654     ProjectPointOnLine( aPoint : Pnt from gp; aLine : Lin from gp )
655     returns Pnt from gp; 
656      
657     TranslatePointToBound( aPoint : Pnt from gp; aDir : Dir from gp; aBndBox: Box from Bnd )
658     returns Pnt from gp;
659          
660     InDomain( aFirstPar    :  Real  from  Standard; 
661               aLastPar     :  Real  from  Standard;  
662               anAttachPar  :  Real  from  Standard)  
663     returns  Boolean  from  Standard;      
664     ---Purpose: returns  True  if  point  with anAttachPar  is 
665     --          in  domain  of  arc   
666   
667     NearestApex(elips  :  Elips from  gp;
668                 pApex  :  Pnt   from  gp; 
669                 nApex  :  Pnt   from  gp;
670                 fpara  :  Real  from  Standard ;
671                 lpara  :  Real  from  Standard ; 
672                 IsInDomain  :  out  Boolean  from  Standard) 
673     returns  Pnt  from  gp;
674     ---Purpose:  computes  nearest  to  ellipse  arc  apex 
675  
676     DistanceFromApex(elips  :  Elips  from  gp;
677                      Apex   :  Pnt    from  gp;
678                      par    :  Real   from  Standard )        
679     returns  Real  from  Standard;                   
680     ---Purpose:  computes  length  of  ellipse  arc  in  parametric  units   
681      
682     
683     ComputeProjEdgePresentation(aPres    : Presentation from Prs3d; 
684                                 aDrawer  : Drawer       from AIS;        
685                                 anEdge   : Edge                 from TopoDS;
686                                 ProjCurve: Curve                from Geom;
687                                 FirstP   : Pnt                  from gp;
688                                 LastP    : Pnt                  from gp;
689                                 aColor   : NameOfColor          from Quantity = Quantity_NOC_PURPLE;
690                                 aWidth   : Real                 from Standard = 2;
691                                 aProjTOL : TypeOfLine           from Aspect   = Aspect_TOL_DASH;
692                                 aCallTOL : TypeOfLine           from Aspect   = Aspect_TOL_DOT);
693     
694     ComputeProjVertexPresentation(aPres    : Presentation from Prs3d; 
695                                   aDrawer  : Drawer       from AIS;        
696                                   aVertex  : Vertex               from TopoDS;
697                                   ProjPoint: Pnt                  from gp;
698                                   aColor   : NameOfColor          from Quantity = Quantity_NOC_PURPLE;
699                                   aWidth   : Real                 from Standard = 2;
700                                   aProjTOM : TypeOfMarker         from Aspect   = Aspect_TOM_PLUS;
701                                   aCallTOL : TypeOfLine           from Aspect   = Aspect_TOL_DOT);
702
703 end AIS;