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 erased in the collector;
200 -- - DS_FullErased: the Interactive Object is erased
201 -- but not in the collector;
202 -- - DS_Temporary: the Interactive Object is temporarily displayed;
203 -- - DS_None: the Interactive Object is nowhere displayed.
205 enumeration SelectStatus is
211 enumeration StatusOfPick is
219 enumeration StatusOfDetection is
227 end StatusOfDetection;
229 enumeration KindOfDimension is
244 ---Purpose: Declares the kinds of dimensions needed in the
245 -- display of Interactive Objects.
247 enumeration KindOfInteractive is
253 --- Purpose: Declares the type of Interactive Object.
254 -- This is one of the following:
259 -- The Datum is the construction element. These include
260 -- points, lines, axes and planes. The object brings
261 -- together topological shapes. The Relation includes
262 -- dimensions and constraints. When the object is of an
263 -- unknown type, the None type is declared.
265 enumeration ClearMode is
272 ---Purpose: Declares which entities in an opened local context
273 -- are to be cleared of mode settings. Temporary
274 -- graphic presentations such as those for sub-shapes,
275 -- for example, are only created for the selection
276 -- process. By means of these enumerations, they can
277 -- be cleared from local context.
279 enumeration KindOfUnit is
288 ---Purpose: Declares the type of Interactive Object unit.
290 enumeration TypeOfAxis is TOAX_Unknown,TOAX_XAxis,TOAX_YAxis,TOAX_ZAxis;
291 ---Purpose: Declares the type of axis.
293 enumeration TypeOfPlane is TOPL_Unknown,TOPL_XYPlane,TOPL_XZPlane,TOPL_YZPlane;
294 ---Purpose: Declares the type of plane.
295 enumeration TypeOfDist is TOD_Unknown,TOD_Horizontal,TOD_Vertical;
296 ---Purpose: To declare the type of distance.
298 enumeration TypeOfAttribute is
315 enumeration StandardDatum is SD_None,SD_Point,SD_Axis,SD_Trihedron,SD_PlaneTrihedron,SD_Line,SD_Circle,SD_Plane;
316 --- Purpose: Declares the type of standard datum of an Interactive Object.
318 -- New ------------------------------------------------
320 enumeration KindOfSurface is KOS_Plane, KOS_Cylinder, KOS_Cone, KOS_Sphere, KOS_Torus,
321 KOS_Revolution, KOS_Extrusion, KOS_OtherSurface;
322 -------------------------------------------------------
330 class InteractiveContext;
336 private class LocalStatus;
338 private class GlobalStatus;
340 deferred class InteractiveObject;
342 ---Category: VARIOUS STANDARD INTERACTIVE OBJECTS
343 -- each type of Datum has a given signature.
344 -- the other interactive objects don't
345 -- implement this signature.
346 -- Mainly used for selection with Filters...
349 class Point; --signature 1
350 class Axis; --signature 2
351 class Trihedron; --signature 3
352 class PlaneTrihedron; --signature 4
353 class Line; --signature 5
354 class Circle; --signature 6
355 class Plane; --signature 7
358 ---Category: Object of type Shape
359 class Shape; --signature 0
360 class ConnectedShape; --signature 1
361 class MultipleConnectedShape; --signature 2
365 ---Category: General Objects
366 class ConnectedInteractive; --signature 0
367 class MultipleConnectedInteractive; --signature 1
369 ---Category: DIMENSIONS AND RELATIONS
371 class DimensionOwner;
373 deferred class Relation;
374 deferred class EllipseRadiusDimension;
375 class MaxRadiusDimension;
376 class MinRadiusDimension;
377 class LengthDimension;
378 class AngleDimension;
379 class RadiusDimension;
380 class DiameterDimension;
381 class Chamf2dDimension;
382 class Chamf3dDimension;
383 class OffsetDimension;
385 class PerpendicularRelation;
386 class ParallelRelation;
387 class TangentRelation;
388 class ConcentricRelation;
389 class IdenticRelation;
390 class SymmetricRelation; -- axial symmetry
391 class MidPointRelation; -- equal distance from point
392 class EqualRadiusRelation;
393 class EqualDistanceRelation;
400 class SignatureFilter;
401 class ExclusionFilter;
402 class AttributeFilter;
403 class C0RegularityFilter;
406 pointer PToContext to InteractiveContext from AIS;
414 ---Category: The Collections
417 class ListOfInteractive instantiates List from TCollection
418 (InteractiveObject from AIS);
420 class SequenceOfInteractive instantiates Sequence from TCollection
421 (InteractiveObject from AIS);
423 class SequenceOfDimension instantiates Sequence from TCollection
426 class MapOfInteractive instantiates Map from TCollection
427 (InteractiveObject from AIS,MapTransientHasher from TColStd);
430 class DataMapofIntegerListOfinteractive instantiates DataMap from
431 TCollection(Integer from Standard, ListOfInteractive from AIS,MapIntegerHasher from TColStd);
432 -- for further management of layers
434 private class DataMapOfIOStatus instantiates DataMap from
435 TCollection(InteractiveObject from AIS,GlobalStatus from AIS,MapTransientHasher from TColStd);
436 -- Management of interactiveObjects Status...
438 class IndexedDataMapOfOwnerPrs instantiates IndexedDataMap from TCollection
439 (EntityOwner from SelectMgr,Presentation from Prs3d ,MapTransientHasher from TColStd);
440 -- for dynamic selection management in local context...
442 -- san: 18/04/2003 AIS_Selection class optimization
443 -- agv: 04/05/2003 Replace NCollection_List for CDL list
444 imported NListTransient;
445 imported NListIteratorOfListTransient;
446 imported NDataMapOfTransientIteratorOfListTransient;
447 -- service map for AIS_Selection class optimized logic
449 private class DataMapOfILC instantiates DataMap from TCollection
450 (Integer from Standard, LocalContext from AIS, MapIntegerHasher from TColStd);
452 private class DataMapOfSelStat instantiates DataMap from TCollection
453 (SelectableObject from SelectMgr,LocalStatus from AIS,MapTransientHasher from TColStd);
454 -- to tell if an object is sensitive to Standard Modes Of Selection....
456 -- Methods for dimensions
458 Nearest( aShape : Shape from TopoDS;
459 aPoint : Pnt from gp )
462 -- Returns the nearest point in a shape. This is used by
463 -- several classes in calculation of dimensions.
465 Farest( aShape : Shape from TopoDS;
466 aPoint : Pnt from gp )
469 ComputeGeometry(anEdge : Edge from TopoDS;
470 aCurve : out Curve from Geom;
471 FirstPnt : out Pnt from gp;
472 LastPnt : out Pnt from gp)
473 ---Purpose: Used by 2d Relation only
474 -- Computes the 3d geometry of <anEdge> in the current WorkingPlane
475 -- and the extremities if any
477 returns Boolean from Standard;
479 ComputeGeometry(anEdge : Edge from TopoDS;
480 aCurve : out Curve from Geom;
481 FirstPnt : out Pnt from gp;
482 LastPnt : out Pnt from gp;
483 extCurve : out Curve from Geom;
484 isinfinite: out Boolean from Standard;
485 isOnPlane : out Boolean from Standard;
486 aPlane : Plane from Geom)
487 ---Purpose: Used by 2d Relation only
488 -- Computes the 3d geometry of <anEdge> in the current WorkingPlane
489 -- and the extremities if any.
490 -- If <aCurve> is not in the current plane, <extCurve> contains
491 -- the not projected curve associated to <anEdge>.
492 -- If <anEdge> is infinite, <isinfinite> = true and the 2
493 -- parameters <FirstPnt> and <LastPnt> have no signification.
495 returns Boolean from Standard;
497 ComputeGeometry (anEdge1 : Edge from TopoDS;
498 anEdge2 : Edge from TopoDS;
499 aCurve1 : out Curve from Geom;
500 aCurve2 : out Curve from Geom;
501 FirstPnt1 : out Pnt from gp;
502 LastPnt1 : out Pnt from gp;
503 FirstPnt2 : out Pnt from gp;
504 LastPnt2 : out Pnt from gp;
505 aPlane : Plane from Geom)
506 ---Purpose: Used by 2d Relation only
507 -- Computes the 3d geometry of <anEdge> in the current WorkingPlane
508 -- and the extremities if any
510 returns Boolean from Standard;
513 ComputeGeometry (anEdge1 : Edge from TopoDS;
514 anEdge2 : Edge from TopoDS;
515 indexExt : out Integer from Standard;
516 aCurve1 : out Curve from Geom;
517 aCurve2 : out Curve from Geom;
518 FirstPnt1 : out Pnt from gp;
519 LastPnt1 : out Pnt from gp;
520 FirstPnt2 : out Pnt from gp;
521 LastPnt2 : out Pnt from gp;
522 ExtCurve : out Curve from Geom;
523 isinfinite1 : out Boolean from Standard;
524 isinfinite2 : out Boolean from Standard;
525 aPlane : Plane from Geom)
527 ---Purpose: Used by 2d Relation only Computes the 3d geometry
528 -- of<anEdge1> and <anEdge2> in the current Plane and the
529 -- extremities if any. Return in ExtCurve the 3d curve
530 -- (not projected in the plane) of the first edge if
531 -- <indexExt> =1 or of the 2nd edge if <indexExt> = 2. If
532 -- <indexExt> = 0, ExtCurve is Null. if there is an edge
533 -- external to the plane, <isinfinite> is true if this
534 -- edge is infinite. So, the extremities of it are not
535 -- significant. Return TRUE if ok
536 returns Boolean from Standard;
538 ComputeGeomCurve (aCurve : in out Curve from Geom;
539 first1 : Real from Standard;
540 last1 : Real from Standard;
541 FirstPnt1 : out Pnt from gp;
542 LastPnt1 : out Pnt from gp;
543 aPlane : Plane from Geom;
544 isOnPlane: out Boolean from Standard)
546 ---Purpose: Checks if aCurve belongs to aPlane; if not, projects aCurve in aPlane
547 -- and returns aCurve;
549 returns Boolean from Standard;
551 ComputeGeometry(aVertex : Vertex from TopoDS;
552 point : out Pnt from gp;
553 aPlane : Plane from Geom;
554 isOnPlane: out Boolean from Standard)
555 returns Boolean from Standard;
558 GetPlaneFromFace( aFace : Face from TopoDS;
559 aPlane : out Pln from gp;
560 aSurf : out Surface from Geom;
561 aSurfType : out KindOfSurface from AIS;
562 Offset : out Real from Standard )
563 returns Boolean from Standard;
564 ---Purpose: Tryes to get Plane from Face. Returns Surface of Face
565 -- in aSurf. Returns Standard_True and Plane of Face in
566 -- aPlane in following cases:
567 -- Face is Plane, Offset of Plane,
568 -- Extrusion of Line and Offset of Extrusion of Line
569 -- Returns pure type of Surface which can be:
570 -- Plane, Cylinder, Cone, Sphere, Torus,
571 -- SurfaceOfRevolution, SurfaceOfExtrusion
573 InitFaceLength( aFace : Face from TopoDS;
574 aPlane : out Pln from gp;
575 aSurface : out Surface from Geom;
576 aSurfaceType : out KindOfSurface from AIS;
577 anOffset : out Real from Standard );
579 ComputeLengthBetweenPlanarFaces( FirstFace : Face from TopoDS;
580 SecondFace : Face from TopoDS;
581 Plane1 : Pln from gp;
582 Plane2 : Pln from gp;
583 Value : out Real from Standard;
584 FirstAttach : out Pnt from gp ;
585 SecondAttach : out Pnt from gp ;
586 DirAttach : out Dir from gp ;
587 AutomaticPos : Boolean from Standard;
588 Position : in out Pnt from gp);
590 ComputeLengthBetweenCurvilinearFaces( FirstFace : Face from TopoDS;
591 SecondFace : Face from TopoDS;
592 FirstSurf : in out Surface from Geom;
593 SecondSurf : in out Surface from Geom;
594 AutomaticPos : Boolean from Standard;
595 Value : out Real from Standard;
596 Position : out Pnt from gp;
597 FirstAttach : out Pnt from gp;
598 SecondAttach : out Pnt from gp;
599 DirAttach : out Dir from gp );
601 ComputeAngleBetweenPlanarFaces( FirstFace : Face from TopoDS;
602 SecondFace : Face from TopoDS;
603 Surf2 : Surface from Geom;
605 Value : Real from Standard;
606 AutomaticPos : Boolean from Standard;
607 Position : out Pnt from gp;
608 Center : out Pnt from gp;
609 FirstAttach : out Pnt from gp;
610 SecondAttach : out Pnt from gp;
611 FirstDir : out Dir from gp;
612 SecondDir : out Dir from gp);
613 ---Purpose: Computes geometric parameters for planar faces for
614 -- Angular dimensions
616 ComputeAngleBetweenCurvilinearFaces( FirstFace : Face from TopoDS;
617 SecondFace : Face from TopoDS;
618 FirstSurf : Surface from Geom;
619 SecondSurf : Surface from Geom;
620 FirstSurfType : KindOfSurface from AIS;
621 SecondSurfType : KindOfSurface from AIS;
623 Value : Real from Standard;
624 AutomaticPos : Boolean from Standard;
625 Position : out Pnt from gp;
626 Center : out Pnt from gp;
627 FirstAttach : out Pnt from gp;
628 SecondAttach : out Pnt from gp;
629 FirstDir : out Dir from gp;
630 SecondDir : out Dir from gp;
631 Plane : out Plane from Geom );
632 ---Purpose: Computes geometric parameters for curvilinear faces for
633 -- Angular dimensions
635 ProjectPointOnPlane( aPoint : Pnt from gp; aPlane : Pln from gp )
638 ProjectPointOnLine( aPoint : Pnt from gp; aLine : Lin from gp )
641 TranslatePointToBound( aPoint : Pnt from gp; aDir : Dir from gp; aBndBox: Box from Bnd )
644 InDomain( aFirstPar : Real from Standard;
645 aLastPar : Real from Standard;
646 anAttachPar : Real from Standard)
647 returns Boolean from Standard;
648 ---Purpose: returns True if point with anAttachPar is
651 NearestApex(elips : Elips from gp;
654 fpara : Real from Standard ;
655 lpara : Real from Standard ;
656 IsInDomain : out Boolean from Standard)
658 ---Purpose: computes nearest to ellipse arc apex
660 DistanceFromApex(elips : Elips from gp;
662 par : Real from Standard )
663 returns Real from Standard;
664 ---Purpose: computes length of ellipse arc in parametric units
667 ComputeProjEdgePresentation(aPres : mutable Presentation from Prs3d;
668 aDrawer : mutable Drawer from AIS;
669 anEdge : Edge from TopoDS;
670 ProjCurve: Curve from Geom;
671 FirstP : Pnt from gp;
673 aColor : NameOfColor from Quantity = Quantity_NOC_PURPLE;
674 aWidth : Real from Standard = 2;
675 aProjTOL : TypeOfLine from Aspect = Aspect_TOL_DASH;
676 aCallTOL : TypeOfLine from Aspect = Aspect_TOL_DOT);
678 ComputeProjVertexPresentation(aPres : mutable Presentation from Prs3d;
679 aDrawer : mutable Drawer from AIS;
680 aVertex : Vertex from TopoDS;
681 ProjPoint: Pnt from gp;
682 aColor : NameOfColor from Quantity = Quantity_NOC_PURPLE;
683 aWidth : Real from Standard = 2;
684 aProjTOM : TypeOfMarker from Aspect = Aspect_TOM_PLUS;
685 aCallTOL : TypeOfLine from Aspect = Aspect_TOL_DOT);