0026936: Drawbacks of inlining in new type system in OCCT 7.0 -- automatic
[occt.git] / src / AIS / AIS_LocalContext.hxx
CommitLineData
42cf5bc1 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>
43class AIS_InteractiveContext;
44class SelectMgr_SelectionManager;
45class SelectMgr_OrFilter;
46class SelectMgr_Filter;
47class TCollection_AsciiString;
48class AIS_InteractiveObject;
49class V3d_View;
c3282ec1 50class V3d_Viewer;
42cf5bc1 51class TopoDS_Shape;
52class SelectMgr_EntityOwner;
53class Standard_Transient;
54class AIS_LocalStatus;
55class SelectMgr_SelectableObject;
56
57
58class AIS_LocalContext;
59DEFINE_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...
74class AIS_LocalContext : public MMgt_TShared
75{
76
77public:
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
42cf5bc1 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.
3bf9a45f 312 Standard_EXPORT void SetPixelTolerance (const Standard_Integer aPrecision = 2);
42cf5bc1 313
314 //! Returns the pixel tolerance.
3bf9a45f 315 Standard_EXPORT Standard_Integer PixelTolerance() const;
8a1170ad 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
42cf5bc1 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.
c3282ec1 336 Standard_EXPORT Standard_Boolean EndImmediateDraw (const Handle(V3d_Viewer)& theViewer);
42cf5bc1 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
360
361
92efcf78 362 DEFINE_STANDARD_RTTIEXT(AIS_LocalContext,MMgt_TShared)
42cf5bc1 363
364protected:
365
366
367
368
369private:
370
371
372 Standard_EXPORT void Process (const Handle(SelectMgr_SelectableObject)& anObject);
373
374 Standard_EXPORT void Process();
375
376 Standard_EXPORT void ActivateStandardModes (const Handle(SelectMgr_SelectableObject)& anObject);
377
378 Standard_EXPORT void manageDetected (const Handle(SelectMgr_EntityOwner)& thePickOwner, const Handle(V3d_View)& theView, const Standard_Boolean theToRedrawImmediate);
379
380 //! returns 0 if the detected entity was Not FilterOK...
381 Standard_Integer DetectedIndex();
382
383 Standard_EXPORT void Hilight (const Handle(SelectMgr_EntityOwner)& Own, const Handle(V3d_View)& aview);
384
385 Standard_EXPORT void Unhilight (const Handle(SelectMgr_EntityOwner)& Ownr, const Handle(V3d_View)& aview);
386
387 Standard_EXPORT void ClearObjects();
388
389 Standard_EXPORT void ClearDetected();
390
391 Standard_EXPORT Standard_Boolean IsDecompositionOn() const;
392
393 Standard_EXPORT Standard_Boolean IsShape (const Standard_Integer anIndex) const;
394
395 Standard_EXPORT Standard_Boolean IsValidForSelection (const Handle(AIS_InteractiveObject)& anIObj) const;
396
397 Standard_Boolean IsValidIndex (const Standard_Integer anIndex) const;
398
399 Standard_EXPORT Standard_Boolean ComesFromDecomposition (const Standard_Integer aPickedIndex) const;
400
401 Standard_EXPORT Standard_Boolean HasFilters (const TopAbs_ShapeEnum aType) const;
402
403 Handle(AIS_InteractiveContext) myCTX;
404 Standard_Boolean myLoadDisplayed;
405 Standard_Boolean myAcceptStdMode;
406 Standard_Boolean myAcceptErase;
407 Handle(SelectMgr_SelectionManager) mySM;
408 Handle(StdSelect_ViewerSelector3d) myMainVS;
409 Handle(PrsMgr_PresentationManager3d) myMainPM;
410 TCollection_AsciiString mySelName;
411 Handle(StdSelect_ViewerSelector3d) myCollVS;
412 AIS_DataMapOfSelStat myActiveObjects;
413 Handle(SelectMgr_OrFilter) myFilters;
414 TColStd_ListOfInteger myListOfStandardMode;
415 Handle(SelectMgr_Filter) myStdFilters[9];
416 Standard_Boolean myAutoHilight;
417 Handle(SelectMgr_IndexedMapOfOwner) myMapOfOwner;
418 Standard_Integer mylastindex;
419 Standard_Integer mylastgood;
420 Standard_Integer myCurrentOwner;
421 TColStd_SequenceOfInteger myDetectedSeq;
422 Standard_Integer myCurDetected;
423 AIS_SequenceOfInteractive myAISDetectedSeq;
424 Standard_Integer myAISCurDetected;
425
426
427};
428
429
430#include <AIS_LocalContext.lxx>
431
432
433
434
435
436#endif // _AIS_LocalContext_HeaderFile