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
196 -- To give the display status of an Interactive Object.
197 -- This will be one of the following:
198 -- - DS_Displayed: the Interactive Object is
199 -- displayed in the main viewer;
200 -- - DS_Erased: the Interactive Object is erased in the collector;
201 -- - DS_FullErased: the Interactive Object is erased
202 -- but not in the collector;
203 -- - DS_Temporary: the Interactive Object is temporarily displayed;
204 -- - DS_None: the Interactive Object is nowhere displayed.
206 enumeration SelectStatus is
212 enumeration StatusOfPick is
220 enumeration StatusOfDetection is
228 end StatusOfDetection;
230 enumeration KindOfDimension is
245 ---Purpose: Declares the kinds of dimensions needed in the
246 -- display of Interactive Objects.
248 enumeration KindOfInteractive is
254 --- Purpose: Declares the type of Interactive Object.
255 -- This is one of the following:
260 -- The Datum is the construction element. These include
261 -- points, lines, axes and planes. The object brings
262 -- together topological shapes. The Relation includes
263 -- dimensions and constraints. When the object is of an
264 -- unknown type, the None type is declared.
266 enumeration ClearMode is
273 ---Purpose: Declares which entities in an opened local context
274 -- are to be cleared of mode settings. Temporary
275 -- graphic presentations such as those for sub-shapes,
276 -- for example, are only created for the selection
277 -- process. By means of these enumerations, they can
278 -- be cleared from local context.
280 enumeration KindOfUnit is
289 ---Purpose: Declares the type of Interactive Object unit.
291 enumeration TypeOfAxis is TOAX_Unknown,TOAX_XAxis,TOAX_YAxis,TOAX_ZAxis;
292 ---Purpose: Declares the type of axis.
294 enumeration TypeOfPlane is TOPL_Unknown,TOPL_XYPlane,TOPL_XZPlane,TOPL_YZPlane;
295 ---Purpose: Declares the type of plane.
296 enumeration TypeOfDist is TOD_Unknown,TOD_Horizontal,TOD_Vertical;
297 ---Purpose: To declare the type of distance.
299 enumeration TypeOfAttribute is
316 enumeration StandardDatum is SD_None,SD_Point,SD_Axis,SD_Trihedron,SD_PlaneTrihedron,SD_Line,SD_Circle,SD_Plane;
317 --- Purpose: Declares the type of standard datum of an Interactive Object.
319 -- New ------------------------------------------------
321 enumeration KindOfSurface is KOS_Plane, KOS_Cylinder, KOS_Cone, KOS_Sphere, KOS_Torus,
322 KOS_Revolution, KOS_Extrusion, KOS_OtherSurface;
323 -------------------------------------------------------
331 class InteractiveContext;
337 private class LocalStatus;
339 private class GlobalStatus;
341 deferred class InteractiveObject;
343 ---Category: VARIOUS STANDARD INTERACTIVE OBJECTS
344 -- each type of Datum has a given signature.
345 -- the other interactive objects don't
346 -- implement this signature.
347 -- Mainly used for selection with Filters...
350 class Point; --signature 1
351 class Axis; --signature 2
352 class Trihedron; --signature 3
353 class PlaneTrihedron; --signature 4
354 class Line; --signature 5
355 class Circle; --signature 6
356 class Plane; --signature 7
359 ---Category: Object of type Shape
360 class Shape; --signature 0
361 class ConnectedShape; --signature 1
362 class MultipleConnectedShape; --signature 2
366 ---Category: General Objects
367 class ConnectedInteractive; --signature 0
368 class MultipleConnectedInteractive; --signature 1
370 ---Category: DIMENSIONS AND RELATIONS
372 class DimensionOwner;
374 deferred class Relation;
375 deferred class EllipseRadiusDimension;
376 class MaxRadiusDimension;
377 class MinRadiusDimension;
378 class LengthDimension;
379 class AngleDimension;
380 class RadiusDimension;
381 class DiameterDimension;
382 class Chamf2dDimension;
383 class Chamf3dDimension;
384 class OffsetDimension;
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;
401 class SignatureFilter;
402 class ExclusionFilter;
403 class AttributeFilter;
404 class C0RegularityFilter;
407 pointer PToContext to InteractiveContext from AIS;
415 ---Category: The Collections
418 class ListOfInteractive instantiates List from TCollection
419 (InteractiveObject from AIS);
421 class SequenceOfInteractive instantiates Sequence from TCollection
422 (InteractiveObject from AIS);
424 class SequenceOfDimension instantiates Sequence from TCollection
427 class MapOfInteractive instantiates Map from TCollection
428 (InteractiveObject from AIS,MapTransientHasher from TColStd);
431 class DataMapofIntegerListOfinteractive instantiates DataMap from
432 TCollection(Integer from Standard, ListOfInteractive from AIS,MapIntegerHasher from TColStd);
433 -- for further management of layers
435 private class DataMapOfIOStatus instantiates DataMap from
436 TCollection(InteractiveObject from AIS,GlobalStatus from AIS,MapTransientHasher from TColStd);
437 -- Management of interactiveObjects Status...
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...
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
450 private class DataMapOfILC instantiates DataMap from TCollection
451 (Integer from Standard, LocalContext from AIS, MapIntegerHasher from TColStd);
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....
457 -- Methods for dimensions
459 Nearest( aShape : Shape from TopoDS;
460 aPoint : Pnt from gp )
463 -- Returns the nearest point in a shape. This is used by
464 -- several classes in calculation of dimensions.
466 Farest( aShape : Shape from TopoDS;
467 aPoint : Pnt from gp )
470 ComputeGeometry(anEdge : Edge from TopoDS;
471 aCurve : out Curve from Geom;
472 FirstPnt : out Pnt from gp;
473 LastPnt : out Pnt from gp)
474 ---Purpose: Used by 2d Relation only
475 -- Computes the 3d geometry of <anEdge> in the current WorkingPlane
476 -- and the extremities if any
478 returns Boolean from Standard;
480 ComputeGeometry(anEdge : Edge from TopoDS;
481 aCurve : out Curve from Geom;
482 FirstPnt : out Pnt from gp;
483 LastPnt : out Pnt from gp;
484 extCurve : out Curve from Geom;
485 isinfinite: out Boolean from Standard;
486 isOnPlane : out Boolean from Standard;
487 aPlane : Plane from Geom)
488 ---Purpose: Used by 2d Relation only
489 -- Computes the 3d geometry of <anEdge> in the current WorkingPlane
490 -- and the extremities if any.
491 -- If <aCurve> is not in the current plane, <extCurve> contains
492 -- the not projected curve associated to <anEdge>.
493 -- If <anEdge> is infinite, <isinfinite> = true and the 2
494 -- parameters <FirstPnt> and <LastPnt> have no signification.
496 returns Boolean from Standard;
498 ComputeGeometry (anEdge1 : Edge from TopoDS;
499 anEdge2 : Edge from TopoDS;
500 aCurve1 : out Curve from Geom;
501 aCurve2 : out Curve from Geom;
502 FirstPnt1 : out Pnt from gp;
503 LastPnt1 : out Pnt from gp;
504 FirstPnt2 : out Pnt from gp;
505 LastPnt2 : out Pnt from gp;
506 aPlane : Plane from Geom)
507 ---Purpose: Used by 2d Relation only
508 -- Computes the 3d geometry of <anEdge> in the current WorkingPlane
509 -- and the extremities if any
511 returns Boolean from Standard;
514 ComputeGeometry (anEdge1 : Edge from TopoDS;
515 anEdge2 : Edge from TopoDS;
516 indexExt : out Integer from Standard;
517 aCurve1 : out Curve from Geom;
518 aCurve2 : out Curve from Geom;
519 FirstPnt1 : out Pnt from gp;
520 LastPnt1 : out Pnt from gp;
521 FirstPnt2 : out Pnt from gp;
522 LastPnt2 : out Pnt from gp;
523 ExtCurve : out Curve from Geom;
524 isinfinite1 : out Boolean from Standard;
525 isinfinite2 : out Boolean from Standard;
526 aPlane : Plane from Geom)
528 ---Purpose: Used by 2d Relation only Computes the 3d geometry
529 -- of<anEdge1> and <anEdge2> in the current Plane and the
530 -- extremities if any. Return in ExtCurve the 3d curve
531 -- (not projected in the plane) of the first edge if
532 -- <indexExt> =1 or of the 2nd edge if <indexExt> = 2. If
533 -- <indexExt> = 0, ExtCurve is Null. if there is an edge
534 -- external to the plane, <isinfinite> is true if this
535 -- edge is infinite. So, the extremities of it are not
536 -- significant. Return TRUE if ok
537 returns Boolean from Standard;
539 ComputeGeomCurve (aCurve : in out Curve from Geom;
540 first1 : Real from Standard;
541 last1 : Real from Standard;
542 FirstPnt1 : out Pnt from gp;
543 LastPnt1 : out Pnt from gp;
544 aPlane : Plane from Geom;
545 isOnPlane: out Boolean from Standard)
547 ---Purpose: Checks if aCurve belongs to aPlane; if not, projects aCurve in aPlane
548 -- and returns aCurve;
550 returns Boolean from Standard;
552 ComputeGeometry(aVertex : Vertex from TopoDS;
553 point : out Pnt from gp;
554 aPlane : Plane from Geom;
555 isOnPlane: out Boolean from Standard)
556 returns Boolean from Standard;
559 GetPlaneFromFace( aFace : Face from TopoDS;
560 aPlane : out Pln from gp;
561 aSurf : out Surface from Geom;
562 aSurfType : out KindOfSurface from AIS;
563 Offset : out Real from Standard )
564 returns Boolean from Standard;
565 ---Purpose: Tryes to get Plane from Face. Returns Surface of Face
566 -- in aSurf. Returns Standard_True and Plane of Face in
567 -- aPlane in following cases:
568 -- Face is Plane, Offset of Plane,
569 -- Extrusion of Line and Offset of Extrusion of Line
570 -- Returns pure type of Surface which can be:
571 -- Plane, Cylinder, Cone, Sphere, Torus,
572 -- SurfaceOfRevolution, SurfaceOfExtrusion
574 InitFaceLength( aFace : Face from TopoDS;
575 aPlane : out Pln from gp;
576 aSurface : out Surface from Geom;
577 aSurfaceType : out KindOfSurface from AIS;
578 anOffset : out Real from Standard );
580 ComputeLengthBetweenPlanarFaces( FirstFace : Face from TopoDS;
581 SecondFace : Face from TopoDS;
582 Plane1 : Pln from gp;
583 Plane2 : Pln from gp;
584 Value : out Real from Standard;
585 FirstAttach : out Pnt from gp ;
586 SecondAttach : out Pnt from gp ;
587 DirAttach : out Dir from gp ;
588 AutomaticPos : Boolean from Standard;
589 Position : in out Pnt from gp);
591 ComputeLengthBetweenCurvilinearFaces( FirstFace : Face from TopoDS;
592 SecondFace : Face from TopoDS;
593 FirstSurf : in out Surface from Geom;
594 SecondSurf : in out Surface from Geom;
595 AutomaticPos : Boolean from Standard;
596 Value : out Real from Standard;
597 Position : out Pnt from gp;
598 FirstAttach : out Pnt from gp;
599 SecondAttach : out Pnt from gp;
600 DirAttach : out Dir from gp );
602 ComputeAngleBetweenPlanarFaces( FirstFace : Face from TopoDS;
603 SecondFace : Face from TopoDS;
604 Surf2 : Surface from Geom;
606 Value : Real from Standard;
607 AutomaticPos : Boolean from Standard;
608 Position : out Pnt from gp;
609 Center : out Pnt from gp;
610 FirstAttach : out Pnt from gp;
611 SecondAttach : out Pnt from gp;
612 FirstDir : out Dir from gp;
613 SecondDir : out Dir from gp);
614 ---Purpose: Computes geometric parameters for planar faces for
615 -- Angular dimensions
617 ComputeAngleBetweenCurvilinearFaces( FirstFace : Face from TopoDS;
618 SecondFace : Face from TopoDS;
619 FirstSurf : Surface from Geom;
620 SecondSurf : Surface from Geom;
621 FirstSurfType : KindOfSurface from AIS;
622 SecondSurfType : KindOfSurface from AIS;
624 Value : Real from Standard;
625 AutomaticPos : Boolean from Standard;
626 Position : out Pnt from gp;
627 Center : out Pnt from gp;
628 FirstAttach : out Pnt from gp;
629 SecondAttach : out Pnt from gp;
630 FirstDir : out Dir from gp;
631 SecondDir : out Dir from gp;
632 Plane : out Plane from Geom );
633 ---Purpose: Computes geometric parameters for curvilinear faces for
634 -- Angular dimensions
636 ProjectPointOnPlane( aPoint : Pnt from gp; aPlane : Pln from gp )
639 ProjectPointOnLine( aPoint : Pnt from gp; aLine : Lin from gp )
642 TranslatePointToBound( aPoint : Pnt from gp; aDir : Dir from gp; aBndBox: Box from Bnd )
645 InDomain( aFirstPar : Real from Standard;
646 aLastPar : Real from Standard;
647 anAttachPar : Real from Standard)
648 returns Boolean from Standard;
649 ---Purpose: returns True if point with anAttachPar is
652 NearestApex(elips : Elips from gp;
655 fpara : Real from Standard ;
656 lpara : Real from Standard ;
657 IsInDomain : out Boolean from Standard)
659 ---Purpose: computes nearest to ellipse arc apex
661 DistanceFromApex(elips : Elips from gp;
663 par : Real from Standard )
664 returns Real from Standard;
665 ---Purpose: computes length of ellipse arc in parametric units
668 ComputeProjEdgePresentation(aPres : mutable Presentation from Prs3d;
669 aDrawer : mutable Drawer from AIS;
670 anEdge : Edge from TopoDS;
671 ProjCurve: Curve from Geom;
672 FirstP : Pnt from gp;
674 aColor : NameOfColor from Quantity = Quantity_NOC_PURPLE;
675 aWidth : Real from Standard = 2;
676 aProjTOL : TypeOfLine from Aspect = Aspect_TOL_DASH;
677 aCallTOL : TypeOfLine from Aspect = Aspect_TOL_DOT);
679 ComputeProjVertexPresentation(aPres : mutable Presentation from Prs3d;
680 aDrawer : mutable Drawer from AIS;
681 aVertex : Vertex from TopoDS;
682 ProjPoint: Pnt from gp;
683 aColor : NameOfColor from Quantity = Quantity_NOC_PURPLE;
684 aWidth : Real from Standard = 2;
685 aProjTOM : TypeOfMarker from Aspect = Aspect_TOM_PLUS;
686 aCallTOL : TypeOfLine from Aspect = Aspect_TOL_DOT);