ce075af47b594972bb52f421b98cd8c2e2c31cc4
[occt.git] / src / AIS / AIS_LocalContext.hxx
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
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 #ifndef _AIS_LocalContext_HeaderFile
18 #define _AIS_LocalContext_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_Type.hxx>
22
23 #include <Standard_Boolean.hxx>
24 #include <StdSelect_ViewerSelector3d.hxx>
25 #include <PrsMgr_PresentationManager3d.hxx>
26 #include <TCollection_AsciiString.hxx>
27 #include <AIS_DataMapOfSelStat.hxx>
28 #include <TColStd_ListOfInteger.hxx>
29 #include <SelectMgr_IndexedMapOfOwner.hxx>
30 #include <Standard_Integer.hxx>
31 #include <TColStd_SequenceOfInteger.hxx>
32 #include <AIS_SequenceOfInteractive.hxx>
33 #include <MMgt_TShared.hxx>
34 #include <AIS_ClearMode.hxx>
35 #include <TopAbs_ShapeEnum.hxx>
36 #include <SelectMgr_ListOfFilter.hxx>
37 #include <AIS_StatusOfDetection.hxx>
38 #include <AIS_StatusOfPick.hxx>
39 #include <TColgp_Array1OfPnt2d.hxx>
40 #include <TColStd_MapOfTransient.hxx>
41 #include <Quantity_NameOfColor.hxx>
42 #include <Standard_Real.hxx>
43 class AIS_InteractiveContext;
44 class SelectMgr_SelectionManager;
45 class SelectMgr_OrFilter;
46 class SelectMgr_Filter;
47 class TCollection_AsciiString;
48 class AIS_InteractiveObject;
49 class V3d_View;
50 class V3d_Viewer;
51 class TopoDS_Shape;
52 class SelectMgr_EntityOwner;
53 class Standard_Transient;
54 class AIS_LocalStatus;
55 class SelectMgr_SelectableObject;
56
57
58 class AIS_LocalContext;
59 DEFINE_STANDARD_HANDLE(AIS_LocalContext, MMgt_TShared)
60
61 //! Defines a specific context  for selection.
62 //! It becomes possible to:
63 //! +  Load  InteractiveObjects  with   a mode   to be
64 //! activated +  associate InteractiveObjects   with a
65 //! set of  temporary   selectable Objects....   +   +
66 //! activate StandardMode  of selection  for  Entities
67 //! inheriting  BasicShape  from  AIS (Selection    Of
68 //! vertices, edges,   wires,faces...  + Add   Filters
69 //! acting on detected owners of sensitive primitives
70 //!
71 //! -     automatically    highlight   shapes   and
72 //! InteractiveObjects  (highlight of  detected shape +
73 //! highlight of detected selectable...
74 class AIS_LocalContext : public MMgt_TShared
75 {
76
77 public:
78
79   
80   Standard_EXPORT AIS_LocalContext();
81   
82   //! Constructor By Default, the  displayed objects are
83   //! automatically loaded.
84   Standard_EXPORT AIS_LocalContext(const Handle(AIS_InteractiveContext)& aCtx, const Standard_Integer anIndex, const Standard_Boolean LoadDisplayed = Standard_True, const Standard_Boolean AcceptStandardModes = Standard_True, const Standard_Boolean AcceptErase = Standard_False, const Standard_Boolean UseBothViewers = Standard_False);
85   
86   //! authorize or not others contexts to erase
87   //! temporary displayed objects here;
88     void AcceptErase (const Standard_Boolean aStatus);
89   
90     Standard_Boolean AcceptErase() const;
91   
92   Standard_EXPORT void SetContext (const Handle(AIS_InteractiveContext)& aCtx);
93   
94     const TCollection_AsciiString& SelectionName() const;
95   
96   Standard_EXPORT void Terminate (const Standard_Boolean updateviewer = Standard_True);
97   
98   //! returns true if done...
99   Standard_EXPORT Standard_Boolean Display (const Handle(AIS_InteractiveObject)& anInteractive, const Standard_Integer DisplayMode = 0, const Standard_Boolean AllowShapeDecomposition = Standard_True, const Standard_Integer ActivationMode = 0);
100   
101   //! loads <anInteractive> with nodisplay...
102   //! returns true if done
103   Standard_EXPORT Standard_Boolean Load (const Handle(AIS_InteractiveObject)& anInteractive, const Standard_Boolean AllowShapeDecomposition = Standard_True, const Standard_Integer ActivationMode = 0);
104   
105   //! returns true if done...
106   Standard_EXPORT Standard_Boolean Erase (const Handle(AIS_InteractiveObject)& anInteractive);
107   
108   Standard_EXPORT Standard_Boolean Remove (const Handle(AIS_InteractiveObject)& aSelectable);
109   
110   Standard_EXPORT Standard_Boolean ClearPrs (const Handle(AIS_InteractiveObject)& anInteractive, const Standard_Integer aMode);
111   
112   //! allows  or  forbids   the   shape  decomposition  into
113   //! Activated Standard   Mode  for   <aStoredObject>
114   //! does nothing if the object doesn't inherits
115   //! BasicShape from AIS
116   Standard_EXPORT void SetShapeDecomposition (const Handle(AIS_InteractiveObject)& aStoredObject, const Standard_Boolean aStatus);
117   
118   //! according to <atype>  , clears the  different parts of
119   //! the selector (filters, modeof activation, objects...)
120   Standard_EXPORT void Clear (const AIS_ClearMode atype = AIS_CM_All);
121   
122   //! optional : activation of a mode which is not 0 for a selectable...
123   Standard_EXPORT void ActivateMode (const Handle(AIS_InteractiveObject)& aSelectable, const Standard_Integer aMode);
124   
125   Standard_EXPORT void DeactivateMode (const Handle(AIS_InteractiveObject)& aSelectable, const Standard_Integer aMode);
126   
127   Standard_EXPORT void Deactivate (const Handle(AIS_InteractiveObject)& aSelectable);
128   
129   //! decomposition of shapes into <aType>
130   Standard_EXPORT void ActivateStandardMode (const TopAbs_ShapeEnum aType);
131   
132   Standard_EXPORT void DeactivateStandardMode (const TopAbs_ShapeEnum aType);
133   
134     const TColStd_ListOfInteger& StandardModes() const;
135   
136   Standard_EXPORT void AddFilter (const Handle(SelectMgr_Filter)& aFilter);
137   
138   Standard_EXPORT void RemoveFilter (const Handle(SelectMgr_Filter)& aFilter);
139   
140     const SelectMgr_ListOfFilter& ListOfFilter() const;
141   
142     const Handle(SelectMgr_OrFilter)& Filter() const;
143   
144   //! if <aStatus> = True , the shapes or subshapes detected
145   //! by the selector will be automatically hilighted in the
146   //! main viewer.
147   //! Else the user has to manage the detected shape outside the
148   //! Shape Selector....
149     void SetAutomaticHilight (const Standard_Boolean aStatus);
150   
151     Standard_Boolean AutomaticHilight() const;
152   
153   Standard_EXPORT AIS_StatusOfDetection MoveTo (const Standard_Integer theXpix, const Standard_Integer theYpix, const Handle(V3d_View)& theView, const Standard_Boolean theToRedrawImmediate);
154   
155   //! returns True if more than one entity
156   //! was detected at the last Mouse position.
157     Standard_Boolean HasNextDetected() const;
158   
159   //! returns True if  last detected. the next detected will
160   //! be first one (endless loop)
161   Standard_EXPORT Standard_Integer HilightNextDetected (const Handle(V3d_View)& theView, const Standard_Boolean theToRedrawImmediate);
162   
163   Standard_EXPORT Standard_Integer HilightPreviousDetected (const Handle(V3d_View)& theView, const Standard_Boolean theToRedrawImmediate);
164   
165   //! returns True if something was done...
166   Standard_EXPORT Standard_Boolean UnhilightLastDetected (const Handle(V3d_View)& aView);
167   
168   //! returns the number of selected
169   Standard_EXPORT AIS_StatusOfPick Select (const Standard_Boolean updateviewer = Standard_True);
170   
171   Standard_EXPORT AIS_StatusOfPick ShiftSelect (const Standard_Boolean updateviewer = Standard_True);
172   
173   Standard_EXPORT AIS_StatusOfPick Select (const Standard_Integer XPMin, const Standard_Integer YPMin, const Standard_Integer XPMax, const Standard_Integer YPMax, const Handle(V3d_View)& aView, const Standard_Boolean updateviewer = Standard_True);
174   
175   Standard_EXPORT AIS_StatusOfPick ShiftSelect (const Standard_Integer XPMin, const Standard_Integer YPMin, const Standard_Integer XPMax, const Standard_Integer YPMax, const Handle(V3d_View)& aView, const Standard_Boolean updateviewer = Standard_True);
176   
177   Standard_EXPORT AIS_StatusOfPick Select (const TColgp_Array1OfPnt2d& Polyline, const Handle(V3d_View)& aView, const Standard_Boolean updateviewer = Standard_True);
178   
179   Standard_EXPORT AIS_StatusOfPick ShiftSelect (const TColgp_Array1OfPnt2d& Polyline, const Handle(V3d_View)& aView, const Standard_Boolean updateviewer = Standard_True);
180   
181   Standard_EXPORT void HilightPicked (const Standard_Boolean updateviewer = Standard_True);
182   
183   Standard_EXPORT void UnhilightPicked (const Standard_Boolean updateviewer = Standard_True);
184   
185   Standard_EXPORT void UpdateSelected (const Standard_Boolean updateviewer = Standard_True);
186   
187   //! Part of advanced selection highlighting mechanism.
188   //! If no owners belonging to anobj are selected, calls anobj->ClearSelected(),
189   //! otherwise calls anobj->HilightSelected(). This method can be used to avoid
190   //! redrawing the whole selection belonging to several Selectable Objects.
191   Standard_EXPORT void UpdateSelected (const Handle(AIS_InteractiveObject)& anobj, const Standard_Boolean updateviewer = Standard_True);
192   
193   //! useful  to  update selection with objects  coming from
194   //! Collector or stack
195   Standard_EXPORT void SetSelected (const Handle(AIS_InteractiveObject)& anobj, const Standard_Boolean updateviewer = Standard_True);
196   
197   //! useful  to  update selection with objects  coming from
198   //! Collector or stack
199   Standard_EXPORT void AddOrRemoveSelected (const Handle(AIS_InteractiveObject)& anobj, const Standard_Boolean updateviewer = Standard_True);
200   
201   Standard_EXPORT void AddOrRemoveSelected (const TopoDS_Shape& aShape, const Standard_Boolean updateviewer = Standard_True);
202   
203   Standard_EXPORT void AddOrRemoveSelected (const Handle(SelectMgr_EntityOwner)& theOwner, const Standard_Boolean toUpdateViewer = Standard_True);
204   
205   //! Clears local context selection.
206   //! @param toUpdateViewer [in] if TRUE the viewer will be updated.
207   Standard_EXPORT void ClearSelected (const Standard_Boolean toUpdateViewer = Standard_True);
208   
209   //! Clears outdated selection and detection of owners for the
210   //! interactive object. Use this method if selection structures
211   //! of the interactive object have changed. The method unhilights
212   //! and removes outdated entity owners from lists of selected
213   //! and detected owners.
214   //! @param theIO [in] the interactive object.
215   //! @param toClearDeactivated [in] pass TRUE to treat deactivated
216   //! entity owners as 'outdated' when clearing the selection.
217   Standard_EXPORT void ClearOutdatedSelection (const Handle(AIS_InteractiveObject)& theIO, const Standard_Boolean toClearDeactivated);
218   
219     Standard_Boolean HasDetected() const;
220   
221
222   //! Initialization for iteration through mouse-detected objects in local context.
223   Standard_EXPORT void InitDetected();
224   
225
226   //! @return true if there is more mouse-detected objects after the current one
227   //! during iteration through mouse-detected interactive objects.
228   Standard_EXPORT Standard_Boolean MoreDetected() const;
229   
230
231   //! Gets next current object during iteration through mouse-detected
232   //! interactive objects.
233   Standard_EXPORT void NextDetected();
234   
235
236   //! @return current mouse-detected shape or empty (null) shape, if current interactive object
237   //! is not a shape (AIS_Shape) or there is no current mouse-detected interactive object at all.
238   Standard_EXPORT const TopoDS_Shape& DetectedCurrentShape() const;
239   
240
241   //! @return current mouse-detected interactive object or null object if there is no current detected.
242   Standard_EXPORT Handle(AIS_InteractiveObject) DetectedCurrentObject() const;
243   
244   Standard_EXPORT Standard_Boolean HasDetectedShape() const;
245   
246   Standard_EXPORT const TopoDS_Shape& DetectedShape() const;
247   
248   Standard_EXPORT Handle(AIS_InteractiveObject) DetectedInteractive() const;
249   
250   Standard_EXPORT Handle(SelectMgr_EntityOwner) DetectedOwner() const;
251   
252   Standard_EXPORT void InitSelected();
253   
254   Standard_EXPORT Standard_Boolean MoreSelected() const;
255   
256   Standard_EXPORT void NextSelected();
257   
258   //! returns TRUE if the detected entity is a shape
259   //! coming from a Decomposition of an element.
260   Standard_EXPORT Standard_Boolean HasShape() const;
261   
262   //! returns true if current selection is not empty
263   //! and the owner of selected object contains a shape.
264   //! This method does not take into account decomposition
265   //! status of detected shape.
266   Standard_EXPORT Standard_Boolean HasSelectedShape() const;
267   
268   Standard_EXPORT TopoDS_Shape SelectedShape() const;
269   
270   Standard_EXPORT Handle(SelectMgr_EntityOwner) SelectedOwner() const;
271   
272   Standard_EXPORT Standard_Boolean IsSelected (const Handle(AIS_InteractiveObject)& aniobj) const;
273   
274   Standard_EXPORT Standard_Boolean IsSelected (const Handle(SelectMgr_EntityOwner)& anOwner) const;
275   
276   Standard_EXPORT Handle(AIS_InteractiveObject) SelectedInteractive() const;
277   
278   //! returns TRUE if an interactive element
279   //! was associated with the current picked entity.
280   Standard_EXPORT Standard_Boolean HasApplicative() const;
281   
282   Standard_EXPORT const Handle(Standard_Transient)& SelectedApplicative() const;
283   
284   Standard_EXPORT void SetDisplayPriority (const Handle(AIS_InteractiveObject)& anObject, const Standard_Integer Prior);
285   
286   Standard_EXPORT Standard_Integer DisplayedObjects (TColStd_MapOfTransient& theMapToFill) const;
287   
288   Standard_EXPORT Standard_Boolean IsIn (const Handle(AIS_InteractiveObject)& anObject) const;
289   
290   Standard_EXPORT Standard_Boolean IsDisplayed (const Handle(AIS_InteractiveObject)& anObject) const;
291   
292   Standard_EXPORT Standard_Boolean IsDisplayed (const Handle(AIS_InteractiveObject)& anObject, const Standard_Integer aMode) const;
293   
294   Standard_EXPORT const TColStd_ListOfInteger& SelectionModes (const Handle(AIS_InteractiveObject)& anObject) const;
295   
296   Standard_EXPORT void SubIntensityOn (const Handle(AIS_InteractiveObject)& anObject);
297   
298   Standard_EXPORT void SubIntensityOff (const Handle(AIS_InteractiveObject)& anObject);
299   
300   Standard_EXPORT void Hilight (const Handle(AIS_InteractiveObject)& anObject);
301   
302   Standard_EXPORT void Hilight (const Handle(AIS_InteractiveObject)& anObject, const Quantity_NameOfColor aCol);
303   
304   Standard_EXPORT void Unhilight (const Handle(AIS_InteractiveObject)& anObject);
305   
306   Standard_EXPORT Standard_Boolean IsHilighted (const Handle(AIS_InteractiveObject)& anObject) const;
307   
308   Standard_EXPORT Standard_Boolean IsHilighted (const Handle(AIS_InteractiveObject)& anObject, Standard_Boolean& WithColor, Quantity_NameOfColor& HiCol) const;
309   
310   //! Define the current selection sensitivity for
311   //! this local context according to the view size.
312   Standard_EXPORT void SetPixelTolerance (const Standard_Integer aPrecision = 2);
313   
314   //! Returns the pixel tolerance.
315   Standard_EXPORT Standard_Integer PixelTolerance() const;
316
317   //! Allows to manage sensitivity of a particular selection of interactive object theObject
318   //! and changes previous sensitivity value of all sensitive entities in selection with theMode
319   //! to the given theNewSensitivity.
320   Standard_EXPORT void SetSelectionSensitivity (const Handle(AIS_InteractiveObject)& theObject,
321                                                 const Standard_Integer theMode,
322                                                 const Standard_Integer theNewSensitivity);
323
324   //! Resets the transient list of presentations previously displayed in immediate mode
325   //! and begins accumulation of new list by following AddToImmediateList()/Color()/Highlight() calls.
326   Standard_EXPORT Standard_Boolean BeginImmediateDraw();
327   
328   //! Resets the transient list of presentations previously displayed in immediate mode.
329   Standard_EXPORT virtual void ClearImmediateDraw();
330   
331   //! Stores presentation theMode of object theObj in the transient list of presentations to be displayed in immediate mode.
332   //! Will be taken in account in EndImmediateDraw method.
333   Standard_EXPORT Standard_Boolean ImmediateAdd (const Handle(AIS_InteractiveObject)& theObj, const Standard_Integer theMode = 0);
334   
335   //! Allows rapid drawing of the view theView by avoiding an update of the whole background.
336   Standard_EXPORT Standard_Boolean EndImmediateDraw (const Handle(V3d_Viewer)& theViewer);
337   
338   //! Returns true if Presentation Manager is accumulating transient list of presentations to be displayed in immediate mode.
339   Standard_EXPORT Standard_Boolean IsImmediateModeOn() const;
340   
341   Standard_EXPORT TCollection_AsciiString Status() const;
342   
343   Standard_EXPORT const Handle(AIS_LocalStatus)& Status (const Handle(AIS_InteractiveObject)& anObject) const;
344   
345   Standard_EXPORT void LoadContextObjects();
346   
347   Standard_EXPORT void UnloadContextObjects();
348   
349   Standard_EXPORT void DisplaySensitive (const Handle(V3d_View)& aView);
350   
351   Standard_EXPORT void ClearSensitive (const Handle(V3d_View)& aView);
352   
353     const Handle(StdSelect_ViewerSelector3d)& MainSelector() const;
354   
355   Standard_EXPORT Handle(SelectMgr_EntityOwner) FindSelectedOwnerFromIO (const Handle(AIS_InteractiveObject)& anIObj) const;
356   
357   Standard_EXPORT Handle(SelectMgr_EntityOwner) FindSelectedOwnerFromShape (const TopoDS_Shape& aShape) const;
358
359   //! Iterates through all interactive objects of local context and activates selection modes
360   //! stored in local status
361   Standard_EXPORT void RestoreActivatedModes() const;
362
363
364
365
366   DEFINE_STANDARD_RTTIEXT(AIS_LocalContext,MMgt_TShared)
367
368 protected:
369
370
371
372
373 private:
374
375   
376   Standard_EXPORT void Process (const Handle(SelectMgr_SelectableObject)& anObject);
377   
378   Standard_EXPORT void Process();
379   
380   Standard_EXPORT void ActivateStandardModes (const Handle(SelectMgr_SelectableObject)& anObject);
381   
382   Standard_EXPORT void manageDetected (const Handle(SelectMgr_EntityOwner)& thePickOwner, const Handle(V3d_View)& theView, const Standard_Boolean theToRedrawImmediate);
383   
384   //! returns 0  if the detected entity was Not FilterOK...
385     Standard_Integer DetectedIndex();
386   
387   Standard_EXPORT void Hilight (const Handle(SelectMgr_EntityOwner)& Own, const Handle(V3d_View)& aview);
388   
389   Standard_EXPORT void Unhilight (const Handle(SelectMgr_EntityOwner)& Ownr, const Handle(V3d_View)& aview);
390   
391   Standard_EXPORT void ClearObjects();
392   
393   Standard_EXPORT void ClearDetected();
394   
395   Standard_EXPORT Standard_Boolean IsDecompositionOn() const;
396   
397   Standard_EXPORT Standard_Boolean IsShape (const Standard_Integer anIndex) const;
398   
399   Standard_EXPORT Standard_Boolean IsValidForSelection (const Handle(AIS_InteractiveObject)& anIObj) const;
400   
401     Standard_Boolean IsValidIndex (const Standard_Integer anIndex) const;
402   
403   Standard_EXPORT Standard_Boolean ComesFromDecomposition (const Standard_Integer aPickedIndex) const;
404   
405   Standard_EXPORT Standard_Boolean HasFilters (const TopAbs_ShapeEnum aType) const;
406
407   Handle(AIS_InteractiveContext) myCTX;
408   Standard_Boolean myLoadDisplayed;
409   Standard_Boolean myAcceptStdMode;
410   Standard_Boolean myAcceptErase;
411   Handle(SelectMgr_SelectionManager) mySM;
412   Handle(StdSelect_ViewerSelector3d) myMainVS;
413   Handle(PrsMgr_PresentationManager3d) myMainPM;
414   TCollection_AsciiString mySelName;
415   Handle(StdSelect_ViewerSelector3d) myCollVS;
416   AIS_DataMapOfSelStat myActiveObjects;
417   Handle(SelectMgr_OrFilter) myFilters;
418   TColStd_ListOfInteger myListOfStandardMode;
419   Handle(SelectMgr_Filter) myStdFilters[9];
420   Standard_Boolean myAutoHilight;
421   Handle(SelectMgr_IndexedMapOfOwner) myMapOfOwner;
422   Standard_Integer mylastindex;
423   Standard_Integer mylastgood;
424   Standard_Integer myCurrentOwner;
425   TColStd_SequenceOfInteger myDetectedSeq;
426   Standard_Integer myCurDetected;
427   AIS_SequenceOfInteractive myAISDetectedSeq;
428   Standard_Integer myAISCurDetected;
429
430
431 };
432
433
434 #include <AIS_LocalContext.lxx>
435
436
437
438
439
440 #endif // _AIS_LocalContext_HeaderFile