VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtWidgetPicker.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2024 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
13 
16 
17 #include <unordered_map>
18 
19 namespace makVrv
20 {
21  class DtDecalProjectorComponentInterface;
22  class DtFrameBufferObject;
23  class DtLineRenderer;
24  class DtLineSegment;
25  class DtOverlayResourceProvider;
26  class DtPickableTriangle;
27  class DtPickableWidget;
28  class DtPixelBufferObject;
29  class DtQuadProxy;
30  class DtQuadRenderer;
31  class DtTextureObject;
32  class DtTriangleProxy;
33  class DtTriangleRenderer;
34  class DtPickableWidget;
35  class DtPickableQuad;
36  class DtPickableLine;
37  class DtPickableTriangle;
38  class DtPickableDecalProjector;
39  class DtDe;
40  struct DtObserverRenderData;
41 
44 
46 
48  template <>
49  inline const char* creatorTypeName<DtWidgetPicker>(void) { return "DtWidgetPickerCreator"; }
50 
54  {
56 
57  public:
58 
60  {
61  NO_EVENT = 0,
72  MOUSE_WHEEL
73  };
74 
76  {
78  int x;
79  int y;
80  int wheel;
81 
82  // Additional hit information for a scene pick.
83  // sceneHit - true if a valid scene hit
84  // (sceneX, sceneY, sceneZ) - scene hit location
85  bool sceneHit = false;
86  // The mouse event is passed to all pickers, but there
87  // is no need to pick the scene more than once
88  bool scenePicked = false;
89  double sceneX = 0;
90  double sceneY = 0;
91  double sceneZ = 0;
92  };
93 
94 
95  friend class DtPickableWidget;
96  friend class DtPickableQuad;
97  friend class DtPickableLine;
98  friend class DtPickableTriangle;
99 
100  public:
101 
103  virtual ~DtWidgetPicker();
104 
106  DtWidgetPicker() = delete;
108  DtWidgetPicker(const DtWidgetPicker& rhs) = delete;
110  DtWidgetPicker& operator=(const DtWidgetPicker& rhs) = delete;
111  public:
113  virtual unsigned int numberOfWidgets() const;
114 
117  virtual void releaseResources(bool renderer);
118 
119  virtual DtFrameBufferObject* frameBufferObject(void);
120 
122  virtual DtPickableQuad* allocatePickableQuad();
123 
125  virtual DtPickableTriangle* allocatePickableTriangle();
126 
128  virtual DtPickableLine* allocatePickableLine();
129 
131  virtual DtPickableDecalProjector* allocatePickableDecalProjector(
133 
137  virtual void registerPickableDecalProjector(DtPickableDecalProjector* widget);
138 
142  virtual void unregisterPickableDecalProjector(DtPickableDecalProjector* widget);
143 
147  virtual bool requiresScenePick() const;
148 
152  virtual void pick(const MousePickRecord& rec, bool geocentric
153  , double cameraPosition[3], const DtObserverRenderData& observerRenderData, double cameraMatrix[16]
154  , const int viewport[4]);
155 
157  virtual const DtPickableWidget* findWidgetFromLastPick() const;
158 
160  virtual bool signalEvents();
161 
163  virtual void clearEvents();
164 
166  boost::signalslib::signal<void ()> signal_destroyed;
167 
168  protected:
169 
173 
176  virtual DtPickableWidget* calculateWidgetFromLastPick();
177 
178  virtual void debugRender();
179 
181  virtual DtQuadProxy* allocateQuad();
182 
184  virtual DtLineSegment* allocateLine();
185 
187  virtual DtTriangleProxy* allocateTriangle();
188 
190  virtual unsigned int widgetCreated(DtPickableWidget*);
191 
193  virtual void widgetToBeDeleted(DtPickableWidget*);
194 
195  virtual bool allocateResources();
196 
197  protected:
198 
206  std::unordered_map<DtPickableDecalProjector*, unsigned int> myPickableDecalProjectors;
207 
210 
213 
215 
216  using WidgetIdMap = std::unordered_map<unsigned int, DtPickableWidget*>;
218 
219  unsigned int myFreeId;
221 
222  std::vector<unsigned int> myColorBuffer;
223  };
224 
225 }
226 
unsigned int myFreeId
Definition: DtWidgetPicker.h:219
An object which wraps an OpenGL pixel buffer object and allows for asynchronous downloads of texture ...
Definition: DtPixelBufferObject.h:16
bool myPendingEventFlag
Definition: DtWidgetPicker.h:211
MousePickType type
Definition: DtWidgetPicker.h:77
The DtPickableQuad is a pickable widget that matches the Quad interface.
Definition: DtPickableWidget.h:125
int wheel
Definition: DtWidgetPicker.h:80
DtPickableWidget * myMouseFocusWidget
Definition: DtWidgetPicker.h:214
Definition: DtWidgetPicker.h:63
int x
Definition: DtWidgetPicker.h:78
Definition: DtWidgetPicker.h:66
The DtPickableLine is a pickable widget that matches the TriangleProxy interface. ...
Definition: DtPickableWidget.h:302
A class which allocates and draws quads.
Definition: DtQuadRenderer.h:44
A non-visible interactive widget.
Definition: DtPickableWidget.h:40
DtDe & myDe
Definition: DtWidgetPicker.h:220
DtTextureObject * mySampleTexture
Definition: DtWidgetPicker.h:202
DtOverlayResourceProvider & myProvider
Definition: DtWidgetPicker.h:199
The DtPickableDecalProjector is a pickable widget used to pick a decal projector interface.
Definition: DtPickableWidget.h:362
Definition: DtWidgetPicker.h:64
DtLineRenderer * myLineRenderer
Definition: DtWidgetPicker.h:204
DtPixelBufferObject * myPixelBuffer
Definition: DtWidgetPicker.h:201
An object which wraps a OpenGL texture object.
Definition: DtTextureObject.h:15
std::vector< unsigned int > myColorBuffer
Definition: DtWidgetPicker.h:222
A class which represents a component for a decal projector.
Definition: DtDecalProjectorComponentInterface.h:43
Variadic templated creator class for defining a DtVirtualBaseClass creator that is automatically regi...
Definition: DtVirtualBaseClassCreator.h:23
The triangle renderer.
Definition: DtTriangleRenderer.h:47
The overlay resource provider class provides resources for overlay drawing classes.
Definition: DtOverlayResourceProvider.h:28
Contains makVrv::DtVirtualBaseClass class.
#define DT_DLL_VRVGRAPHICS
Contains DLL export macros.
Definition: vrvGraphics.h:19
A class which represents a single line segment.
Definition: DtLineSegment.h:23
A flyweight class for controlling a triangle owned by the triangle renderer.
Definition: DtTriangleRenderer.h:115
Definition: DtWidgetPicker.h:71
std::unordered_map< unsigned int, DtPickableWidget * > WidgetIdMap
Definition: DtWidgetPicker.h:216
The DtPickableLine is a pickable widget that matches the LineSegment interface.
Definition: DtPickableWidget.h:233
An object which wraps an OpenGL frame buffer object and allows rendering To a texture.
Definition: DtFrameBufferObject.h:17
const char * creatorTypeName< DtWidgetPicker >(void)
template specialization for the creator (pass the class being created to the creatorTypeName template...
Definition: DtWidgetPicker.h:49
WidgetIdMap myWidgetIds
Definition: DtWidgetPicker.h:217
std::unordered_map< DtPickableDecalProjector *, unsigned int > myPickableDecalProjectors
Definition: DtWidgetPicker.h:206
DtTriangleRenderer * myTriangleRenderer
Definition: DtWidgetPicker.h:205
Definition: DtWidgetPicker.h:65
Definition: DtWidgetPicker.h:75
friend DtWidgetPickerCreator
Definition: DtWidgetPicker.h:55
A flyweight class for controlling a single quad owned by the DtQuadRenderer.
Definition: DtQuadProxy.h:26
DtVirtualBaseClassCreator< DtWidgetPicker, DtOverlayResourceProvider & > DtWidgetPickerCreator
Definition: DtWidgetPicker.h:43
Definition: DtWidgetPicker.h:68
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:76
MousePickRecord myPendingEvent
Definition: DtWidgetPicker.h:212
boost::signalslib::signal< void()> signal_destroyed
Boost signal sent during widget picker destruction. Called from destructor.
Definition: DtWidgetPicker.h:166
Definition: DtCommonRenderData.h:33
int y
Definition: DtWidgetPicker.h:79
Definition: DtWidgetPicker.h:62
A class responsible for rendering lines.
Definition: DtLineRenderer.h:49
Definition: DtWidgetPicker.h:69
int myDesiredWidth
Definition: DtWidgetPicker.h:208
DtFrameBufferObject * myFrameBuffer
Definition: DtWidgetPicker.h:200
DtQuadRenderer * myQuadRenderer
Definition: DtWidgetPicker.h:203
int myDesiredHeight
Definition: DtWidgetPicker.h:209
The picker class which allocates and does picking operations on widgets.
Definition: DtWidgetPicker.h:53
MousePickType
Definition: DtWidgetPicker.h:59

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)