InteractionObserver.cpp
Go to the documentation of this file.
1 #include "InteractionObserver.h"
2 
3 #include <utility>
4 
7 {
8  contextMenuActions[index] = std::move(action);
9  return *this;
10 }
11 
14  std::function<void(Eigen::Matrix4f const&)> action)
15 {
16  transformEndAction = std::make_optional(std::move(action));
17  return *this;
18 }
19 
20 void
22 {
24  {
25  auto iterator = contextMenuActions.find(interaction.chosenContextMenuEntry());
26 
27  if (iterator != contextMenuActions.end())
28  {
29  auto [index, action] = *iterator;
30  action();
31  }
32  }
33 
35  interaction.isTransformEnd())
36  {
37  if (transformEndAction.has_value())
38  {
39  transformEndAction.value()(interaction.transformation());
40  }
41  }
42 }
43 
44 void
46 {
47  layer.clear();
48  observedLayers.erase(layer.data_.name);
49 }
50 
51 void
53 {
54  for (auto& [name, observedLayer] : observedLayers)
55  {
56  stage.requestInteraction(observedLayer.layer);
57  }
58 }
59 
60 void
62 {
63  for (viz::InteractionFeedback const& interaction : interactions)
64  {
65  auto layerIterator = observedLayers.find(interaction.layer());
66 
67  if (layerIterator != observedLayers.end())
68  {
69  auto& [name, layer] = *layerIterator;
70 
71  auto observationIterator = layer.observations.find(interaction.element());
72 
73  if (observationIterator != layer.observations.end())
74  {
75  auto& [element, observation] = *observationIterator;
76  observation.process(interaction);
77  }
78  }
79  }
80 }
armarx::InteractionObserver::Observation::onTransformEnd
Observation & onTransformEnd(std::function< void(Eigen::Matrix4f const &)> action)
Definition: InteractionObserver.cpp:13
armarx::viz::InteractionFeedbackType::ContextMenuChosen
@ ContextMenuChosen
A context menu entry was chosen.
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
armarx::viz::Layer::clear
void clear()
Definition: Layer.h:24
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::StagedCommit
A staged commit prepares multiple layers to be committed.
Definition: Client.h:30
armarx::InteractionObserver::Observation
Definition: InteractionObserver.h:10
InteractionObserver.h
armarx::viz::Layer::data_
data::LayerUpdate data_
Definition: Layer.h:57
armarx::viz::InteractionFeedbackType::Transform
@ Transform
The element was transformed (translated or rotated).
armarx::viz::StagedCommit::requestInteraction
void requestInteraction(Layer const &layer)
Request interaction feedback for a particular layer.
Definition: Client.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::clearObservedLayer
void clearObservedLayer(viz::Layer &layer)
Definition: InteractionObserver.cpp:45
armarx::viz::Layer
Definition: Layer.h:12
armarx::InteractionObserver::Observation::process
void process(viz::InteractionFeedback const &interaction)
Definition: InteractionObserver.cpp:21