MT Showcase SDK
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Pages
MarkerDetectorWidget.hpp
1 #pragma once
2 
3 #include "Export.hpp"
4 #include "services/CodiceServiceAPI.hpp"
5 
6 #include <MultiWidgets/Widget.hpp>
7 
8 namespace Showcase
9 {
10 
16  class SHOWCASE_API MarkerDetectorWidget : public MultiWidgets::Widget
17  {
18  public:
19  MarkerDetectorWidget(MultiWidgets::WidgetPtr parent = nullptr);
20  virtual ~MarkerDetectorWidget();
21 
22  virtual void markerDown(MultiTouch::Marker m, MultiWidgets::GrabManager &) override;
23 
24  virtual void processInput(MultiWidgets::GrabManager &gm, float dt) override;
25 
26  void notifyTaskComplete(MultiTouch::TrackedObject::Id id);
27 
28  virtual bool shouldGrab(MultiWidgets::GrabManager &gm, MultiTouch::TrackedObject obj) const override;
29 
30  private:
31  void cacheReadyObjects(MultiWidgets::GrabManager& gm);
32  void invalidateCacheForAbsentObjects(const MultiTouch::Sample& sample);
33 
34  CodiceServiceAPI::MarkerProperties removePendingTask(MultiTouch::TrackedObject::Id id, bool cancelTask);
35  void removeMarkers(int32_t frame);
36 
37  // Contains currently executing tasks by tracked object id
38  QMap<MultiTouch::TrackedObject::Id, Radiant::TaskPtr> m_pendingTasks;
39 
40  // Ids for tracked objects ready to be cached
41  QVector<MultiTouch::TrackedObject::Id> m_objectsToCache;
42 
43  // Multi-map of marker codes to tracked object ids
44  QMap<uint64_t, MultiTouch::TrackedObject::Id> m_objectsInCache;
45  };
46 
47  INTRUSIVE_PTR_TYPEDEF(MarkerDetectorWidget);
48 
49 }