1 -- Created on: 1996-09-04
2 -- Created by: Robert COUBLANC
3 -- Copyright (c) 1996-1999 Matra Datavision
4 -- Copyright (c) 1999-2014 OPEN CASCADE SAS
6 -- This file is part of Open CASCADE Technology software library.
8 -- This library is free software; you can redistribute it and / or modify it
9 -- under the terms of the GNU Lesser General Public 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.
14 -- Alternatively, this file may be used under the terms of Open CASCADE
15 -- commercial license or contractual agreement.
17 -- Modified May 20th 98 :
18 -- Modification in Management of selected entities
19 -- Now we store the selected entity Owner in AIS_Selection.
20 -- (no more links with Session...)
21 -- Modifications in Management of hilight of detected entities
22 -- VTN 23/11/99 BUC60614 Avoid to crash because
23 -- myStdFilters array is too short.
24 -- GG : BUC60688 25/05/00 Add SetSensitivity() methods
25 -- GG : IMP150501 Remove oboslete method DragTo
26 -- (See AIS_InteractiveContext)
27 -- ZSV : IMP160701 Add InitDetected(),MoreDetected(),NextDetected(),
28 -- DetectedCurrentShape(),DetectedCurrentObject()
32 class LocalContext from AIS inherits TShared from MMgt
34 ---Purpose: Defines a specific context for selection.
35 -- It becomes possible to:
36 -- + Load InteractiveObjects with a mode to be
37 -- activated + associate InteractiveObjects with a
38 -- set of temporary selectable Objects.... + +
39 -- activate StandardMode of selection for Entities
40 -- inheriting BasicShape from AIS (Selection Of
41 -- vertices, edges, wires,faces... + Add Filters
42 -- acting on detected owners of sensitive primitives
45 -- - automatically highlight shapes and
46 -- InteractiveObjects (highlight of detected shape +
47 -- highlight of detected selectable...
51 AsciiString from TCollection,
52 ListOfInteger from TColStd,
53 SequenceOfInteger from TColStd,
54 MapOfTransient from TColStd,
55 Array1OfPnt2d from TColgp,
56 NameOfColor from Quantity,
57 ShapeEnum from TopAbs,
60 PresentationManager3d from PrsMgr,
61 Projector from Select3D,
62 IndexedMapOfOwner from SelectMgr,
63 EntityOwner from SelectMgr,
64 OrFilter from SelectMgr,
65 Filter from SelectMgr,
66 SelectionManager from SelectMgr,
67 SelectableObject from SelectMgr ,
68 ListOfFilter from SelectMgr,
69 BRepOwner from StdSelect,
70 ViewerSelector3d from StdSelect,
71 SensitivityMode from StdSelect,
72 InteractiveContext from AIS,
74 InteractiveObject from AIS,
76 DataMapOfSelStat from AIS,
78 StatusOfPick from AIS,
79 StatusOfDetection from AIS,
80 SequenceOfInteractive from AIS
84 Create returns mutable LocalContext from AIS;
87 Create (aCtx : InteractiveContext from AIS;
88 anIndex : Integer from Standard;
89 LoadDisplayed : Boolean from Standard=Standard_True;
90 AcceptStandardModes : Boolean from Standard=Standard_True;
91 AcceptErase : Boolean from Standard= Standard_False;
92 UseBothViewers : Boolean from Standard= Standard_False)
93 returns mutable LocalContext from AIS;
94 ---Purpose: Constructor By Default, the displayed objects are
95 -- automatically loaded.
98 AcceptErase(me:mutable;aStatus : Boolean from Standard);
100 ---Purpose: authorize or not others contexts to erase
101 -- temporary displayed objects here;
103 AcceptErase(me) returns Boolean from Standard;
106 SetContext(me:mutable;aCtx:InteractiveContext from AIS);
108 SelectionName(me) returns AsciiString from TCollection;
110 ---C++: return const&
113 Terminate(me: mutable; updateviewer : Boolean from Standard = Standard_True);
115 HasSameProjector(me;aPrj:Projector from Select3D)
116 returns Boolean from Standard;
117 ---Purpose: compares the current projector of the localContext
119 -- returns True if the projectors are identical.
120 -- (no need to update projection of selection primitives
121 -- when closing the local context)....
123 Reactivate(me:mutable);
124 ---Purpose: to be called when a upper local context was closed...
125 -- useful to put pack the right projector...
127 ---Category: LOAD AND PREPARE
128 -- - INTERACTIVE OBJECTS...
130 -- - STANDARD MODES OF ACTIVATION
135 Display(me : mutable;
136 anInteractive : InteractiveObject from AIS;
137 DisplayMode : Integer from Standard = 0;
138 AllowShapeDecomposition: Boolean from Standard = Standard_True;
139 ActivationMode : Integer from Standard = 0)
140 returns Boolean from Standard;
141 ---Purpose: returns true if done...
144 anInteractive : InteractiveObject from AIS;
145 AllowShapeDecomposition: Boolean from Standard = Standard_True;
146 ActivationMode : Integer from Standard = 0)
147 returns Boolean from Standard;
148 ---Purpose: loads <anInteractive> with nodisplay...
149 -- returns true if done
152 anInteractive : InteractiveObject from AIS)
153 returns Boolean from Standard;
154 ---Purpose: returns true if done...
158 aSelectable : InteractiveObject from AIS)
159 returns Boolean from Standard;
162 ClearPrs (me : mutable;
163 anInteractive : InteractiveObject from AIS;
164 aMode : Integer from Standard)
165 returns Boolean from Standard;
167 SetShapeDecomposition(me : mutable;
168 aStoredObject : InteractiveObject from AIS;
169 aStatus : Boolean from Standard);
170 ---Purpose: allows or forbids the shape decomposition into
171 -- Activated Standard Mode for <aStoredObject>
172 -- does nothing if the object doesn't inherits
173 -- BasicShape from AIS
176 Clear(me:mutable;atype: ClearMode from AIS = AIS_CM_All);
177 ---Purpose: according to <atype> , clears the different parts of
178 -- the selector (filters, modeof activation, objects...)
183 ActivateMode (me : mutable;
184 aSelectable: InteractiveObject from AIS;
185 aMode : Integer from Standard );
186 ---Purpose: optional : activation of a mode which is not 0 for a selectable...
188 DeactivateMode(me : mutable;
189 aSelectable: InteractiveObject from AIS;
190 aMode : Integer from Standard );
191 Deactivate(me : mutable;
192 aSelectable: InteractiveObject from AIS);
194 ActivateStandardMode(me:mutable;aType:ShapeEnum from TopAbs);
195 ---Purpose: decomposition of shapes into <aType>
198 DeactivateStandardMode(me:mutable;aType:ShapeEnum from TopAbs);
200 StandardModes(me) returns ListOfInteger from TColStd;
201 ---C++: return const &
206 AddFilter(me:mutable;aFilter:Filter from SelectMgr);
208 RemoveFilter(me:mutable;aFilter: Filter from SelectMgr);
211 ListOfFilter(me) returns ListOfFilter from SelectMgr;
212 ---C++: return const &
215 Filter(me) returns any OrFilter from SelectMgr;
216 ---C++: return const &
220 SetAutomaticHilight(me:mutable ; aStatus:Boolean) ;
221 ---Purpose: if <aStatus> = True , the shapes or subshapes detected
222 -- by the selector will be automatically hilighted in the
224 -- Else the user has to manage the detected shape outside the
225 -- Shape Selector....
230 AutomaticHilight(me) returns Boolean;
235 ---Category: THE SELECTION PROCESS
238 MoveTo(me:mutable;Xpix,Ypix : Integer from Standard;
239 aview : View from V3d)
240 returns StatusOfDetection from AIS;
243 HasNextDetected(me) returns Boolean from Standard;
245 ---Purpose: returns True if more than one entity
246 -- was detected at the last Mouse position.
248 HilightNextDetected(me:mutable;aView:View from V3d)
249 returns Integer from Standard;
250 ---Purpose: returns True if last detected. the next detected will
251 -- be first one (endless loop)
253 HilightPreviousDetected(me:mutable;aView:View from V3d)
254 returns Integer from Standard;
257 UnhilightLastDetected(me:mutable;aView:View from V3d) returns Boolean from Standard;
258 ---Purpose: returns True if something was done...
260 Select(me: mutable;updateviewer : Boolean from Standard = Standard_True)
261 returns StatusOfPick from AIS;
262 ---Purpose: returns the number of selected
264 ShiftSelect(me: mutable;updateviewer : Boolean from Standard = Standard_True)
265 returns StatusOfPick from AIS;
268 XPMin,YPMin,XPMax,YPMax : Integer from Standard;
269 aView : View from V3d;
270 updateviewer : Boolean from Standard = Standard_True)
271 returns StatusOfPick from AIS;
274 ShiftSelect(me : mutable;
275 XPMin,YPMin,XPMax,YPMax : Integer from Standard;
276 aView : View from V3d;
277 updateviewer : Boolean from Standard = Standard_True)
278 returns StatusOfPick from AIS;
281 Polyline : Array1OfPnt2d from TColgp;
282 aView : View from V3d;
283 updateviewer : Boolean from Standard = Standard_True)
284 returns StatusOfPick from AIS;
286 ShiftSelect(me : mutable;
287 Polyline : Array1OfPnt2d from TColgp;
288 aView : View from V3d;
289 updateviewer : Boolean from Standard = Standard_True)
290 returns StatusOfPick from AIS;
292 HilightPicked(me:mutable;updateviewer:Boolean from Standard =Standard_True) ;
294 UnhilightPicked(me:mutable;updateviewer:Boolean from Standard = Standard_True) ;
297 UpdateSelected (me : mutable;
298 updateviewer : Boolean from Standard = Standard_True);
300 UpdateSelected (me : mutable;
301 anobj : InteractiveObject from AIS;
302 updateviewer : Boolean from Standard = Standard_True);
303 ---Purpose: Part of advanced selection highlighting mechanism.
304 -- If no owners belonging to anobj are selected, calls anobj->ClearSelected(),
305 -- otherwise calls anobj->HilightSelected(). This method can be used to avoid
306 -- redrawing the whole selection belonging to several Selectable Objects.
309 SetSelected(me : mutable;
310 anobj : InteractiveObject from AIS;
311 updateviewer : Boolean from Standard=Standard_True);
312 ---Purpose: useful to update selection with objects coming from
313 -- Collector or stack
315 AddOrRemoveSelected(me : mutable;
316 anobj : InteractiveObject from AIS;
317 updateviewer : Boolean from Standard=Standard_True);
318 ---Purpose: useful to update selection with objects coming from
319 -- Collector or stack
320 AddOrRemoveSelected(me : mutable;
321 aShape : Shape from TopoDS;
322 updateviewer : Boolean from Standard=Standard_True);
324 AddOrRemoveSelected(me : mutable;
325 Ownr : EntityOwner from SelectMgr;
326 updateviewer : Boolean from Standard=Standard_True);
330 ClearSelected(me:mutable;updateviewer : Boolean from Standard=Standard_True);
334 ---Category: GET THE DETECTED
337 HasDetected (me) returns Boolean from Standard;
340 InitDetected(me: mutable);
341 MoreDetected(me) returns Boolean from Standard;
342 NextDetected(me: mutable);
343 DetectedCurrentShape(me) returns Shape from TopoDS;
344 ---C++: return const &
345 DetectedCurrentObject(me) returns InteractiveObject from AIS;
347 HasDetectedShape(me) returns Boolean from Standard;
348 DetectedShape (me) returns Shape from TopoDS;
349 ---C++: return const &
350 DetectedInteractive(me) returns InteractiveObject from AIS;
351 DetectedOwner (me) returns EntityOwner from SelectMgr;
354 ---Category: GET THE SELECTED
356 InitSelected (me: mutable);
357 MoreSelected(me) returns Boolean from Standard;
358 NextSelected(me:mutable);
359 HasShape(me) returns Boolean from Standard;
360 ---Purpose: returns TRUE if the detected entity is a shape
361 -- coming from a Decomposition of an element.
362 SelectedShape(me) returns Shape from TopoDS;
363 ---C++: return const &
365 SelectedOwner(me) returns EntityOwner from SelectMgr;
366 IsSelected(me;aniobj: InteractiveObject from AIS) returns Boolean from Standard;
367 IsSelected(me;anOwner: EntityOwner from SelectMgr) returns Boolean from Standard;
368 SelectedInteractive(me) returns InteractiveObject from AIS;
369 HasApplicative (me) returns Boolean from Standard;
370 ---Purpose: returns TRUE if an interactive element
371 -- was associated with the current picked entity.
372 SelectedApplicative(me) returns any Transient from Standard;
373 ---C++: return const &
380 ---Category: Management Of Temporary Attributes
382 SetDisplayPriority(me : mutable;
383 anObject: InteractiveObject from AIS;
384 Prior : Integer from Standard);
386 SetZLayer( me : mutable;
387 theIObj : InteractiveObject from AIS;
388 theLayerId : Integer from Standard );
389 ---Purpose: Set Z layer id for interactive object. The layer can be
390 -- specified for displayed object only. The Z layers can be used to display
391 -- temporarily presentations of some object in front of the other objects
392 -- in the scene. The ids for Z layers are generated by V3d_Viewer.
393 -- Note that Z layers differ from under-/overlayer in V3d_View:
394 -- under-/overlayer are intended for specific 2D drawings that appear
395 -- behind/in front of all 3D presentations, while SetZLayer() method
396 -- applies to regular 3D presentations and does not imply any specific
400 theIObj : InteractiveObject from AIS )
401 returns Integer from Standard;
402 ---Purpose: Get Z layer id set for displayed interactive object.
403 -- If the object doesn't exists in context or has no computed presentations,
404 -- the method returns -1.
406 DisplayedObjects(me;theMapToFill : in out MapOfTransient from TColStd)
407 returns Integer from Standard;
409 IsIn(me;anObject : InteractiveObject from AIS)
410 returns Boolean from Standard;
413 IsDisplayed(me;anObject : InteractiveObject from AIS)
414 returns Boolean from Standard;
416 IsDisplayed(me;anObject : InteractiveObject from AIS;
417 aMode : Integer from Standard)
418 returns Boolean from Standard;
420 SelectionModes(me;anObject:InteractiveObject from AIS)
421 returns ListOfInteger from TColStd;
422 ---C++: return const &
424 SubIntensityOn(me:mutable; anObject : InteractiveObject from AIS );
426 SubIntensityOff(me:mutable; anObject : InteractiveObject from AIS );
428 Hilight(me: mutable; anObject : InteractiveObject from AIS);
430 Hilight(me:mutable; anObject : InteractiveObject from AIS;aCol:NameOfColor from Quantity);
432 Unhilight(me:mutable; anObject : InteractiveObject from AIS);
434 IsHilighted(me;anObject : InteractiveObject from AIS)
435 returns Boolean from Standard;
438 anObject : InteractiveObject from AIS;
439 WithColor : out Boolean from Standard;
440 HiCol : out NameOfColor from Quantity)
441 returns Boolean from Standard;
443 SetSensitivityMode(me : mutable;
444 aMode : SensitivityMode from StdSelect) is static;
446 ---Purpose: Sets the selection sensitivity mode. SM_WINDOW mode
447 -- uses the specified pixel tolerance to compute the sensitivity
448 -- value, SM_VIEW mode allows to define the sensitivity manually.
450 SensitivityMode(me) returns SensitivityMode from StdSelect;
452 ---Purpose: Returns the selection sensitivity mode.
454 SetSensitivity(me:mutable;
455 aPrecision: Real from Standard);
457 ---Purpose: Define the current selection sensitivity for
458 -- this local context according to the view size.
460 Sensitivity (me) returns Real from Standard;
462 ---Purpose: Returns the selection sensitivity value.
464 SetPixelTolerance(me:mutable;
465 aPrecision: Integer from Standard = 2);
467 ---Purpose: Define the current selection sensitivity for
468 -- this local context according to the view size.
470 PixelTolerance(me) returns Integer from Standard;
472 ---Purpose: Returns the pixel tolerance.
474 ---Category: IMMEDIATE MODE
477 BeginImmediateDraw (me:mutable) returns Boolean from Standard;
478 ---Purpose: initializes the list of presentations to be displayed
479 -- returns False if No Local COnte
481 ImmediateAdd (me:mutable;anIObj:InteractiveObject from AIS;aMode:Integer from Standard=0)
482 returns Boolean from Standard;
483 ---Purpose: returns True if <anIObj> has been stored in the list.
485 ImmediateRemove (me:mutable;anIObj:InteractiveObject from AIS;aMode:Integer from Standard=0)
486 returns Boolean from Standard;
487 ---Purpose: returns True if <anIObj> has been removed from the list.
489 EndImmediateDraw(me:mutable;aView : View from V3d;DoubleBuf:Boolean from Standard=Standard_False)
490 returns Boolean from Standard;
491 ---Purpose: returns True if the immediate display has been done.
493 IsImmediateModeOn(me) returns Boolean from Standard;
495 ---Category: INTERNAL METHODS;
497 UpdateConversion(me:mutable);
499 UpdateSort(me:mutable);
503 Status(me) returns AsciiString from TCollection is private;
505 Status(me;anObject : InteractiveObject from AIS)
506 returns any LocalStatus from AIS is private;
507 ---C++: return const&
511 LoadContextObjects(me:mutable);
513 UnloadContextObjects(me:mutable);
515 Process(me : mutable;
516 anObject : SelectableObject from SelectMgr;
517 WithProj: Boolean from Standard = Standard_True) is static private;
520 WithProj: Boolean from Standard = Standard_True) is static private;
523 ActivateStandardModes(me:mutable;anObject: SelectableObject from SelectMgr;
524 WithProj: Boolean from Standard = Standard_True) is static private;
526 ManageDetected(me:mutable;
527 aPickOwner : EntityOwner from SelectMgr;
528 aview : View from V3d) is static private;
530 DetectedIndex(me:mutable) returns Integer from Standard is static private;
532 ---Purpose: returns 0 if the detected entity was Not FilterOK...
534 Hilight(me:mutable;Own:EntityOwner from SelectMgr;aview: View from V3d) is static private;
537 Unhilight(me:mutable;Ownr:EntityOwner from SelectMgr;aview: View from V3d) is static private;
540 ClearObjects(me:mutable) is static private;
542 ClearDetected(me:mutable) is static private;
544 IsDecompositionOn(me) returns Boolean from Standard is static private;
546 IsShape(me;anIndex:Integer from Standard) returns Boolean from Standard is static private;
548 IsValidForSelection(me;anIObj:InteractiveObject from AIS) returns Boolean from Standard is static private;
550 IsValidIndex(me;anIndex:Integer from Standard)
551 returns Boolean from Standard is static private;
554 ComesFromDecomposition(me; aPickedIndex : Integer from Standard)
555 returns Boolean from Standard is static private;
558 DisplayAreas(me:mutable;aviou:View from V3d);
560 ClearAreas (me:mutable;
561 aView: View from V3d) is static;
564 HasFilters(me;aType:ShapeEnum from TopAbs)
565 returns Boolean from Standard is private;
567 DisplaySensitive(me:mutable;aView : View from V3d) is static;
569 ClearSensitive(me:mutable;aView:View from V3d) is static;
573 MainSelector(me) returns any ViewerSelector3d from StdSelect;
575 ---C++: return const&
578 HilightTriangle(me:mutable;Rank:Integer from Standard;aViou:View from V3d) is static private;
582 FindSelectedOwnerFromIO(me;anIObj:InteractiveObject from AIS)
583 returns EntityOwner from SelectMgr;
585 FindSelectedOwnerFromShape(me;aShape : Shape from TopoDS)
586 returns EntityOwner from SelectMgr;
592 myCTX : InteractiveContext from AIS;
593 myLoadDisplayed,myAcceptStdMode : Boolean from Standard;
594 myAcceptErase : Boolean from Standard;
596 mySM : SelectionManager from SelectMgr;
597 myMainVS : ViewerSelector3d from StdSelect;
598 myMainPM : PresentationManager3d from PrsMgr;
599 mySelName : AsciiString from TCollection;
600 myCollVS : ViewerSelector3d from StdSelect;
602 -- The Objects and their attributes...
604 myActiveObjects : DataMapOfSelStat from AIS;
609 myFilters : OrFilter from SelectMgr;
610 myListOfStandardMode : ListOfInteger from TColStd;
612 -- VTN myStdFilters : Filter from SelectMgr [7]; --internal mgt
613 myStdFilters : Filter from SelectMgr [9]; --internal mgt
617 myAutoHilight : Boolean from Standard;
618 myMapOfOwner : IndexedMapOfOwner from SelectMgr;
619 mylastindex : Integer from Standard;
620 mylastgood : Integer from Standard;
621 myCurrentOwner : Integer from Standard;
624 myDetectedSeq : SequenceOfInteger from TColStd;
625 myCurDetected : Integer from Standard;
627 -- the detected objects.
628 myAISDetectedSeq : SequenceOfInteractive from AIS;
629 myAISCurDetected : Integer from Standard;
630 -- This variables is used by following functions:
631 -- InitDetected(), MoreDetected(), NextDetected(), DetectedCurrentShape(), DetectedCurrentObject().
635 KeepTemporary from InteractiveContext from AIS(me:mutable;anIObj:InteractiveObject from AIS;WhichMode : Integer from Standard = -1)