InteractionObserver.h
Go to the documentation of this file.
1 #pragma once
2 
4 
5 namespace armarx
6 {
8  {
9  public:
11  {
12  public:
13  Observation& onContextMenu(size_t index, std::function<void()> action);
14  Observation& onTransformEnd(std::function<void(Eigen::Matrix4f const&)> action);
15 
17 
18  private:
19  std::map<size_t, std::function<void()>> contextMenuActions;
20  std::optional<std::function<void(Eigen::Matrix4f const&)>> transformEndAction;
21  };
22 
23  template <typename ElementT>
25  addObserved(viz::Layer& layer, ElementT const& element)
26  {
27  layer.add(element);
28 
29  auto iterator = observedLayers.find(layer.data_.name);
30 
31  if (iterator == observedLayers.end())
32  {
33  std::tie(iterator, std::ignore) = observedLayers.emplace(layer.data_.name, layer);
34  }
35 
36  auto& [name, observedLayer] = *iterator;
37  return observedLayer.observations[element.data_->id];
38  }
39 
40  void clearObservedLayer(viz::Layer& layer);
41 
43  void process(viz::InteractionFeedbackRange const& interactions);
44 
45  private:
46  struct ObservedLayer
47  {
48  explicit ObservedLayer(viz::Layer& layer) : layer(layer)
49  {
50  }
51 
52  std::reference_wrapper<viz::Layer> layer;
53  std::map<std::string, Observation> observations;
54  };
55 
56  std::map<std::string, ObservedLayer> observedLayers;
57  };
58 } // namespace armarx
armarx::InteractionObserver::Observation::onTransformEnd
Observation & onTransformEnd(std::function< void(Eigen::Matrix4f const &)> action)
Definition: InteractionObserver.cpp:13
ArVizComponentPlugin.h
armarx::InteractionObserver::addObserved
Observation & addObserved(viz::Layer &layer, ElementT const &element)
Definition: InteractionObserver.h:25
armarx::InteractionObserver::Observation::onContextMenu
Observation & onContextMenu(size_t index, std::function< void()> action)
Definition: InteractionObserver.cpp:6
armarx::viz::interaction
InteractionDescription interaction()
Definition: ElementOps.h:109
index
uint8_t index
Definition: EtherCATFrame.h:59
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:650
armarx::InteractionObserver::process
void process(viz::InteractionFeedbackRange const &interactions)
Definition: InteractionObserver.cpp:61
armarx::viz::Layer::add
void add(ElementT const &element)
Definition: Layer.h:31
armarx::viz::StagedCommit
A staged commit prepares multiple layers to be committed.
Definition: Client.h:30
armarx::InteractionObserver::Observation
Definition: InteractionObserver.h:10
armarx::viz::Layer::data_
data::LayerUpdate data_
Definition: Layer.h:57
armarx::viz::InteractionFeedbackRange
Definition: Interaction.h:147
armarx::viz::InteractionFeedback
Definition: Interaction.h:59
armarx::InteractionObserver::requestInteractions
void requestInteractions(viz::StagedCommit &stage)
Definition: InteractionObserver.cpp:52
armarx::InteractionObserver
Definition: InteractionObserver.h:7
armarx::InteractionObserver::clearObservedLayer
void clearObservedLayer(viz::Layer &layer)
Definition: InteractionObserver.cpp:45
armarx::viz::Layer
Definition: Layer.h:12
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::InteractionObserver::Observation::process
void process(viz::InteractionFeedback const &interaction)
Definition: InteractionObserver.cpp:21