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
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.
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.
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.
25 ---Purpose: Application Interactive Services provide the means to
26 -- create links between an application GUI viewer and
27 -- the packages which are used to manage selection
28 -- and presentation. The tools AIS defined in order to
29 -- do this include different sorts of entities: both the
30 -- selectable viewable objects themselves and the
31 -- context and attribute managers to define their
32 -- selection and display.
33 -- To orient the user as he works in a modeling
34 -- environment, views and selections must be
35 -- comprehensible. There must be several different sorts
36 -- of selectable and viewable object defined. These must
37 -- also be interactive, that is, connecting graphic
38 -- representation and the underlying reference
39 -- geometry. These entities are called Interactive
40 -- Objects, and are divided into four types:
45 -- The Datum groups together the construction elements
46 -- such as lines, circles, points, trihedra, plane trihedra,
48 -- The Relation is made up of constraints on one or
49 -- more interactive shapes and the corresponding
50 -- reference geometry. For example, you might want to
51 -- constrain two edges in a parallel relation. This
52 -- contraint is considered as an object in its own right,
53 -- and is shown as a sensitive primitive. This takes the
54 -- graphic form of a perpendicular arrow marked with
55 -- the || symbol and lying between the two edges.
56 -- The Object type includes topological shapes, and
57 -- connections between shapes.
58 -- None, in order not to eliminate the object, tells the
59 -- application to look further until it finds an object
60 -- definition in its generation which is accepted.
61 -- Inside these categories, you have the possibility
62 -- of an additional characterization by means of a
63 -- signature. The signature provides an index to the
64 -- further characterization. By default, the Interactive
65 -- Object has a None type and a signature of 0
66 -- (equivalent to None.) If you want to give a particular
67 -- type and signature to your interactive object, you must
68 -- redefine the two virtual methods: Type and Signature.
69 -- In the C++ inheritance structure of the package, each
70 -- class representing a specific Interactive Object
71 -- inherits AIS_InteractiveObject. Among these
72 -- inheriting classes, AIS_Relation functions as the
73 -- abstract mother class for tinheriting classes defining
74 -- display of specific relational constraints and types of
75 -- dimension. Some of these include:
76 -- - display of constraints based on relations of
77 -- symmetry, tangency, parallelism and concentricity
78 -- - display of dimensions for angles, offsets,
79 -- diameters, radii and chamfers.
80 -- No viewer can show everything at once with any
81 -- coherence or clarity. Views must be managed
82 -- carefully both sequentially and at any given instant.
83 -- Another function of the view is that of a context to
84 -- carry out design in. The design changes are applied
85 -- to the objects in the view and then extended to the
86 -- underlying reference geometry by a solver. To make
87 -- sense of this complicated visual data, several display
88 -- and selection tools are required. To facilitate
89 -- management, each object and each construction
90 -- element has a selection priority. There are also
91 -- means to modify the default priority.
92 -- To define an environment of dynamic detection, you
93 -- can use standard filter classes or create your own. A
94 -- filter questions the owner of the sensitive primitive in
95 -- local context to determine if it has the the desired
96 -- qualities. If it answers positively, it is kept. If not, it is rejected.
97 -- The standard filters supplied in AIS include:
98 -- AIS_AttributeFilter
99 -- AIS_SignatureFilter
101 -- Only the type filter can be used in the default
102 -- operating mode, the neutral point. The others can
103 -- only be used in open local contexts.
104 -- Neutral point and local context constitute the two
105 -- operating modes of the central entity which pilots
106 -- visualizations and selections, the Interactive Context.
107 -- It is linked to a main viewer and if you like, a trash bin
109 -- The neutral point, which is the default mode, allows
110 -- you to easily visualize and select interactive objects
111 -- which have been loaded into the context. Opening
112 -- local contexts allows you to prepare and use a
113 -- temporary selection environment without disturbing
114 -- the neutral point. A set of functions allows you to
115 -- choose the interactive objects which you want to act
116 -- on, the selection modes which you want to activate,
117 -- and the temporary visualizations which you will
118 -- execute. When the operation is finished, you close the
119 -- current local context and return to the state in which
120 -- you were before opening it (neutral point or previous
122 -- An interactive object can have a certain number of
123 -- graphic attributes which are specific to it, such as
124 -- visualization mode, color, and material. By the same
125 -- token, the interactive context has a set of graphic
126 -- attributes, the Drawer which is valid by default for the
127 -- objects it controls. When an interactive object is
128 -- visualized, the required graphic attributes are first
129 -- taken from the object's own Drawer if one exists, or
130 -- from the context drawer for the others.
160 enumeration DisplayMode is WireFrame, Shaded;
162 -- Sets display modes other than neutral point ones,
163 -- for interactive objects. The possibilities include:
167 enumeration ConnectStatus is
172 ---Purpose: Gives the status of connection of an Interactive
173 -- Object. This will be one of the following:
177 -- - Both connection and transformation
178 -- This enumeration is used in
179 -- AIS_ConnectedInteractive. Transform indicates
180 -- that the Interactive Object reference geometry has
181 -- changed location relative to the reference geometry.
183 enumeration TypeOfIso is
187 ---Purpose: Declares the type of isoparameter displayed.
189 enumeration DisplayStatus is
195 -- To give the display status of an Interactive Object.
196 -- This will be one of the following:
197 -- - DS_Displayed: the Interactive Object is
198 -- displayed in the main viewer;
199 -- - DS_Erased: the Interactive Object is hidden in main viewer;
200 -- - DS_Temporary: the Interactive Object is temporarily displayed;
201 -- - DS_None: the Interactive Object is nowhere displayed.
203 enumeration SelectStatus is
209 enumeration StatusOfPick is
217 enumeration StatusOfDetection is
225 end StatusOfDetection;
227 enumeration KindOfDimension is
242 ---Purpose: Declares the kinds of dimensions needed in the
243 -- display of Interactive Objects.
245 enumeration KindOfInteractive is
251 --- Purpose: Declares the type of Interactive Object.
252 -- This is one of the following:
257 -- The Datum is the construction element. These include
258 -- points, lines, axes and planes. The object brings
259 -- together topological shapes. The Relation includes
260 -- dimensions and constraints. When the object is of an
261 -- unknown type, the None type is declared.
263 enumeration ClearMode is
270 ---Purpose: Declares which entities in an opened local context
271 -- are to be cleared of mode settings. Temporary
272 -- graphic presentations such as those for sub-shapes,
273 -- for example, are only created for the selection
274 -- process. By means of these enumerations, they can
275 -- be cleared from local context.
277 enumeration KindOfUnit is
286 ---Purpose: Declares the type of Interactive Object unit.
288 enumeration TypeOfAxis is TOAX_Unknown,TOAX_XAxis,TOAX_YAxis,TOAX_ZAxis;
289 ---Purpose: Declares the type of axis.
291 enumeration TypeOfPlane is TOPL_Unknown,TOPL_XYPlane,TOPL_XZPlane,TOPL_YZPlane;
292 ---Purpose: Declares the type of plane.
293 enumeration TypeOfDist is TOD_Unknown,TOD_Horizontal,TOD_Vertical;
294 ---Purpose: To declare the type of distance.
296 enumeration TypeOfAttribute is
313 enumeration StandardDatum is SD_None,SD_Point,SD_Axis,SD_Trihedron,SD_PlaneTrihedron,SD_Line,SD_Circle,SD_Plane;
314 --- Purpose: Declares the type of standard datum of an Interactive Object.
316 enumeration KindOfSurface is KOS_Plane, KOS_Cylinder, KOS_Cone, KOS_Sphere, KOS_Torus,
317 KOS_Revolution, KOS_Extrusion, KOS_OtherSurface;
319 -- Enumerations for dimensions management --
321 enumeration DisplaySpecialSymbol is DSS_No, DSS_Before, DSS_After;
322 ---Purpose: Specifies dimension special symbol display options
324 enumeration DimensionSelectionMode is DSM_All, DSM_Line, DSM_Text;
325 ---Purpose: Specifies dimension selection modes.
333 class InteractiveContext;
339 private class LocalStatus;
341 private class GlobalStatus;
343 deferred class InteractiveObject;
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...
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
361 ---Category: Object of type Shape
362 class Shape; --signature 0
363 class ConnectedShape; --signature 1
364 class MultipleConnectedShape; --signature 2
368 ---Category: General Objects
369 class ConnectedInteractive; --signature 0
370 class MultipleConnectedInteractive; --signature 1
372 ---Category: DIMENSIONS AND RELATIONS
374 class DimensionOwner;
376 deferred class Relation;
377 deferred class EllipseRadiusDimension;
378 class MaxRadiusDimension;
379 class MinRadiusDimension;
380 imported LengthDimension;
381 imported AngleDimension;
382 imported RadiusDimension;
383 imported DiameterDimension;
384 class Chamf2dDimension;
385 class Chamf3dDimension;
386 class OffsetDimension;
388 class PerpendicularRelation;
389 class ParallelRelation;
390 class TangentRelation;
391 class ConcentricRelation;
392 class IdenticRelation;
393 class SymmetricRelation; -- axial symmetry
394 class MidPointRelation; -- equal distance from point
395 class EqualRadiusRelation;
396 class EqualDistanceRelation;
403 class SignatureFilter;
404 class ExclusionFilter;
405 class AttributeFilter;
406 class C0RegularityFilter;
409 pointer PToContext to InteractiveContext from AIS;
417 ---Category: The Collections
420 class ListOfInteractive instantiates List from TCollection
421 (InteractiveObject from AIS);
423 class SequenceOfInteractive instantiates Sequence from TCollection
424 (InteractiveObject from AIS);
426 class SequenceOfDimension instantiates Sequence from TCollection
429 class MapOfInteractive instantiates Map from TCollection
430 (InteractiveObject from AIS,MapTransientHasher from TColStd);
433 class DataMapofIntegerListOfinteractive instantiates DataMap from
434 TCollection(Integer from Standard, ListOfInteractive from AIS,MapIntegerHasher from TColStd);
435 -- for further management of layers
437 private class DataMapOfIOStatus instantiates DataMap from
438 TCollection(InteractiveObject from AIS,GlobalStatus from AIS,MapTransientHasher from TColStd);
439 -- Management of interactiveObjects Status...
441 class IndexedDataMapOfOwnerPrs instantiates IndexedDataMap from TCollection
442 (EntityOwner from SelectMgr,Presentation from Prs3d ,MapTransientHasher from TColStd);
443 -- for dynamic selection management in local context...
445 -- san: 18/04/2003 AIS_Selection class optimization
446 -- agv: 04/05/2003 Replace NCollection_List for CDL list
447 imported NListTransient;
448 imported NListIteratorOfListTransient;
449 imported NDataMapOfTransientIteratorOfListTransient;
450 -- service map for AIS_Selection class optimized logic
452 private class DataMapOfILC instantiates DataMap from TCollection
453 (Integer from Standard, LocalContext from AIS, MapIntegerHasher from TColStd);
455 private class DataMapOfSelStat instantiates DataMap from TCollection
456 (SelectableObject from SelectMgr,LocalStatus from AIS,MapTransientHasher from TColStd);
457 -- to tell if an object is sensitive to Standard Modes Of Selection....
459 -- Methods for dimensions
461 Nearest( aShape : Shape from TopoDS;
462 aPoint : Pnt from gp )
465 -- Returns the nearest point in a shape. This is used by
466 -- several classes in calculation of dimensions.
468 Farest( aShape : Shape from TopoDS;
469 aPoint : Pnt from gp )
472 ComputeGeometry(anEdge : Edge from TopoDS;
473 aCurve : out Curve from Geom;
474 FirstPnt : out Pnt from gp;
475 LastPnt : out Pnt from gp)
476 ---Purpose: Used by 2d Relation only
477 -- Computes the 3d geometry of <anEdge> in the current WorkingPlane
478 -- and the extremities if any
480 returns Boolean from Standard;
482 ComputeGeometry(anEdge : Edge from TopoDS;
483 aCurve : out Curve from Geom;
484 FirstPnt : out Pnt from gp;
485 LastPnt : out Pnt from gp;
486 extCurve : out Curve from Geom;
487 isinfinite: out Boolean from Standard;
488 isOnPlane : out Boolean from Standard;
489 aPlane : Plane from Geom)
490 ---Purpose: Used by 2d Relation only
491 -- Computes the 3d geometry of <anEdge> in the current WorkingPlane
492 -- and the extremities if any.
493 -- If <aCurve> is not in the current plane, <extCurve> contains
494 -- the not projected curve associated to <anEdge>.
495 -- If <anEdge> is infinite, <isinfinite> = true and the 2
496 -- parameters <FirstPnt> and <LastPnt> have no signification.
498 returns Boolean from Standard;
500 ComputeGeometry (anEdge1 : Edge from TopoDS;
501 anEdge2 : Edge from TopoDS;
502 aCurve1 : out Curve from Geom;
503 aCurve2 : out Curve from Geom;
504 FirstPnt1 : out Pnt from gp;
505 LastPnt1 : out Pnt from gp;
506 FirstPnt2 : out Pnt from gp;
507 LastPnt2 : out Pnt from gp;
508 aPlane : Plane from Geom)
509 ---Purpose: Used by 2d Relation only
510 -- Computes the 3d geometry of <anEdge> in the current WorkingPlane
511 -- and the extremities if any
513 returns Boolean from Standard;
516 ComputeGeometry (anEdge1 : Edge from TopoDS;
517 anEdge2 : Edge from TopoDS;
518 indexExt : out Integer from Standard;
519 aCurve1 : out Curve from Geom;
520 aCurve2 : out Curve from Geom;
521 FirstPnt1 : out Pnt from gp;
522 LastPnt1 : out Pnt from gp;
523 FirstPnt2 : out Pnt from gp;
524 LastPnt2 : out Pnt from gp;
525 ExtCurve : out Curve from Geom;
526 isinfinite1 : out Boolean from Standard;
527 isinfinite2 : out Boolean from Standard;
528 aPlane : Plane from Geom)
530 ---Purpose: Used by 2d Relation only Computes the 3d geometry
531 -- of<anEdge1> and <anEdge2> in the current Plane and the
532 -- extremities if any. Return in ExtCurve the 3d curve
533 -- (not projected in the plane) of the first edge if
534 -- <indexExt> =1 or of the 2nd edge if <indexExt> = 2. If
535 -- <indexExt> = 0, ExtCurve is Null. if there is an edge
536 -- external to the plane, <isinfinite> is true if this
537 -- edge is infinite. So, the extremities of it are not
538 -- significant. Return TRUE if ok
539 returns Boolean from Standard;
541 ComputeGeomCurve (aCurve : in out Curve from Geom;
542 first1 : Real from Standard;
543 last1 : Real from Standard;
544 FirstPnt1 : out Pnt from gp;
545 LastPnt1 : out Pnt from gp;
546 aPlane : Plane from Geom;
547 isOnPlane: out Boolean from Standard)
549 ---Purpose: Checks if aCurve belongs to aPlane; if not, projects aCurve in aPlane
550 -- and returns aCurve;
552 returns Boolean from Standard;
554 ComputeGeometry(aVertex : Vertex from TopoDS;
555 point : out Pnt from gp;
556 aPlane : Plane from Geom;
557 isOnPlane: out Boolean from Standard)
558 returns Boolean from Standard;
561 GetPlaneFromFace( aFace : Face from TopoDS;
562 aPlane : out Pln from gp;
563 aSurf : out Surface from Geom;
564 aSurfType : out KindOfSurface from AIS;
565 Offset : out Real from Standard )
566 returns Boolean from Standard;
567 ---Purpose: Tryes to get Plane from Face. Returns Surface of Face
568 -- in aSurf. Returns Standard_True and Plane of Face in
569 -- aPlane in following cases:
570 -- Face is Plane, Offset of Plane,
571 -- Extrusion of Line and Offset of Extrusion of Line
572 -- Returns pure type of Surface which can be:
573 -- Plane, Cylinder, Cone, Sphere, Torus,
574 -- SurfaceOfRevolution, SurfaceOfExtrusion
576 InitFaceLength( aFace : Face from TopoDS;
577 aPlane : out Pln from gp;
578 aSurface : out Surface from Geom;
579 aSurfaceType : out KindOfSurface from AIS;
580 anOffset : out Real from Standard );
582 ComputeLengthBetweenPlanarFaces( FirstFace : Face from TopoDS;
583 SecondFace : Face from TopoDS;
584 Plane1 : Pln from gp;
585 Plane2 : Pln from gp;
586 Value : out Real from Standard;
587 FirstAttach : out Pnt from gp ;
588 SecondAttach : out Pnt from gp ;
589 DirAttach : out Dir from gp ;
590 AutomaticPos : Boolean from Standard;
591 Position : in out Pnt from gp);
593 ComputeLengthBetweenCurvilinearFaces( FirstFace : Face from TopoDS;
594 SecondFace : Face from TopoDS;
595 FirstSurf : in out Surface from Geom;
596 SecondSurf : in out Surface from Geom;
597 AutomaticPos : Boolean from Standard;
598 Value : out Real from Standard;
599 Position : out Pnt from gp;
600 FirstAttach : out Pnt from gp;
601 SecondAttach : out Pnt from gp;
602 DirAttach : out Dir from gp );
604 ComputeAngleBetweenPlanarFaces( FirstFace : Face from TopoDS;
605 SecondFace : Face from TopoDS;
606 Surf2 : Surface from Geom;
608 Value : Real from Standard;
609 AutomaticPos : Boolean from Standard;
610 Position : out Pnt from gp;
611 Center : out Pnt from gp;
612 FirstAttach : out Pnt from gp;
613 SecondAttach : out Pnt from gp;
614 FirstDir : out Dir from gp;
615 SecondDir : out Dir from gp);
616 ---Purpose: Computes geometric parameters for planar faces for
617 -- Angular dimensions
619 ComputeAngleBetweenCurvilinearFaces( FirstFace : Face from TopoDS;
620 SecondFace : Face from TopoDS;
621 FirstSurf : Surface from Geom;
622 SecondSurf : Surface from Geom;
623 FirstSurfType : KindOfSurface from AIS;
624 SecondSurfType : KindOfSurface from AIS;
626 Value : Real from Standard;
627 AutomaticPos : Boolean from Standard;
628 Position : out Pnt from gp;
629 Center : out Pnt from gp;
630 FirstAttach : out Pnt from gp;
631 SecondAttach : out Pnt from gp;
632 FirstDir : out Dir from gp;
633 SecondDir : out Dir from gp;
634 Plane : out Plane from Geom );
635 ---Purpose: Computes geometric parameters for curvilinear faces for
636 -- Angular dimensions
638 ProjectPointOnPlane( aPoint : Pnt from gp; aPlane : Pln from gp )
641 ProjectPointOnLine( aPoint : Pnt from gp; aLine : Lin from gp )
644 TranslatePointToBound( aPoint : Pnt from gp; aDir : Dir from gp; aBndBox: Box from Bnd )
647 InDomain( aFirstPar : Real from Standard;
648 aLastPar : Real from Standard;
649 anAttachPar : Real from Standard)
650 returns Boolean from Standard;
651 ---Purpose: returns True if point with anAttachPar is
654 NearestApex(elips : Elips from gp;
657 fpara : Real from Standard ;
658 lpara : Real from Standard ;
659 IsInDomain : out Boolean from Standard)
661 ---Purpose: computes nearest to ellipse arc apex
663 DistanceFromApex(elips : Elips from gp;
665 par : Real from Standard )
666 returns Real from Standard;
667 ---Purpose: computes length of ellipse arc in parametric units
670 ComputeProjEdgePresentation(aPres : mutable Presentation from Prs3d;
671 aDrawer : mutable Drawer from AIS;
672 anEdge : Edge from TopoDS;
673 ProjCurve: Curve from Geom;
674 FirstP : Pnt from gp;
676 aColor : NameOfColor from Quantity = Quantity_NOC_PURPLE;
677 aWidth : Real from Standard = 2;
678 aProjTOL : TypeOfLine from Aspect = Aspect_TOL_DASH;
679 aCallTOL : TypeOfLine from Aspect = Aspect_TOL_DOT);
681 ComputeProjVertexPresentation(aPres : mutable Presentation from Prs3d;
682 aDrawer : mutable Drawer from AIS;
683 aVertex : Vertex from TopoDS;
684 ProjPoint: Pnt from gp;
685 aColor : NameOfColor from Quantity = Quantity_NOC_PURPLE;
686 aWidth : Real from Standard = 2;
687 aProjTOM : TypeOfMarker from Aspect = Aspect_TOM_PLUS;
688 aCallTOL : TypeOfLine from Aspect = Aspect_TOL_DOT);