InteractionObserver.cpp
Go to the documentation of this file.
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
20void
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
34 if (interaction.type() == viz::InteractionFeedbackType::Transform &&
35 interaction.isTransformEnd())
36 {
37 if (transformEndAction.has_value())
38 {
39 transformEndAction.value()(interaction.transformation());
40 }
41 }
42}
43
44void
46{
47 layer.clear();
48 observedLayers.erase(layer.data_.name);
49}
50
51void
53{
54 for (auto& [name, observedLayer] : observedLayers)
55 {
56 stage.requestInteraction(observedLayer.layer);
57 }
58}
59
60void
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}
uint8_t index
Observation & onTransformEnd(std::function< void(Eigen::Matrix4f const &)> action)
void process(viz::InteractionFeedback const &interaction)
Observation & onContextMenu(size_t index, std::function< void()> action)
void clearObservedLayer(viz::Layer &layer)
void requestInteractions(viz::StagedCommit &stage)
void process(viz::InteractionFeedbackRange const &interactions)
@ Transform
The element was transformed (translated or rotated).
Definition Interaction.h:24
@ ContextMenuChosen
A context menu entry was chosen.
Definition Interaction.h:21
data::LayerUpdate data_
Definition Layer.h:57
A staged commit prepares multiple layers to be committed.
Definition Client.h:30
void requestInteraction(Layer const &layer)
Request interaction feedback for a particular layer.
Definition Client.h:56