Editor.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <list>
4 #include <queue>
5 
11 
12 namespace armarx
13 {
14 
15  class Editor;
16 
18  {
20  bool allowTransforming = true;
21 
22  std::vector<std::string> options{};
23  std::optional<float> alpha{};
24  std::optional<simox::Color> color{};
25 
26  // Context menu indices.
34  };
35 
37  {
38  public:
39  explicit ChangeState(Editor* editor) : editor(editor){};
40 
41  void clear();
43  bool applyTo(objpose::ObjectPose& pose);
44  void visualizeNewObjects();
47 
48  void cloneObject(objpose::ObjectPose const& object);
49  void createObject(std::string const& objectID, Eigen::Matrix4f const& pose);
50  void deleteObject(objpose::ObjectPose const& object);
51  void resetObject(objpose::ObjectPose const& object);
52  void moveObject(objpose::ObjectPose const& object, Eigen::Matrix4f const& transform);
53 
54  private:
55  enum ChangeKind
56  {
57  MOVE,
58  CREATE,
59  DELETE
60  };
61 
62  using ObjectPoseList = std::list<objpose::ObjectPose>;
63 
64  struct Change
65  {
66  ChangeKind kind = MOVE;
68  ObjectPoseList::iterator iterator{};
69  };
70 
71  Editor* editor;
72 
73  ObjectPoseList newPoses;
74  std::map<std::string, Change> changed;
75  };
76 
78  {
79  public:
80  explicit PlaceholderState(Editor* editor) : editor(editor){};
81 
82  struct Placeholder
83  {
84  simox::OrientedBoxf box;
86  };
87 
88  void addPlaceholder(simox::OrientedBoxf box);
89  void visualizePlaceholders();
90  void movePlaceholder(size_t id, Eigen::Matrix4f const& transform);
91  void removePlaceholder(size_t id);
92  void specifyObject(size_t id, std::string const& objectID, ChangeState& changeState);
93 
94  private:
95  size_t getID();
96 
97  Editor* editor;
98 
99  std::priority_queue<size_t, std::vector<size_t>, std::greater<>> unusedIDs;
100 
101  struct PlaceholderEntry
102  {
103  Placeholder placeholder;
104  bool isActive;
105  };
106 
107  std::vector<PlaceholderEntry> placeholders;
108  };
109 
110  class Editor
111  {
112  public:
113  struct Properties
114  {
115  std::string providerName;
116 
117  float const& objectScaling;
118  float const& confidenceThreshold;
119 
120  std::vector<data::ObjectID> const& availableObjects;
121  };
122 
123 
124  public:
125  explicit Editor(viz::Client& client,
126  Properties properties,
127  std::function<void(objpose::ProvidedObjectPoseSeq&)> pushToMemory,
128  std::function<objpose::ObjectPoseSeq(void)> pullFromMemory);
129  void step();
130 
131  private:
132  void visualizeMemory();
133  void visualizeMeta();
134 
135  void commit();
136  objpose::ObjectPoseSeq update();
137  void reset();
138 
139  void visualizeObject(objpose::ObjectPose& objectPose);
140  void visualizePlaceholder(PlaceholderState::Placeholder const& placeholder, size_t id);
141 
142  private:
143  static constexpr const char* memoryLayerName = "Memory";
144  static constexpr const char* metaLayerName = "Meta";
145  static constexpr const char* lineString = "---------------------------";
146 
147  std::vector<std::string> placeholderOptions;
148 
149  Properties properties;
150  ObjectFinder objectFinder;
151 
152  viz::Client& client;
153  const std::function<void(objpose::ProvidedObjectPoseSeq&)> pushToMemory;
154  const std::function<objpose::ObjectPoseSeq(void)> pullFromMemory;
155 
156  viz::Layer memoryLayer{client.layer(memoryLayerName)};
157  viz::Layer metaLayer{client.layer(metaLayerName)};
158 
159  InteractionObserver observer;
160 
161  objpose::ObjectPoseSeq storedPoses;
162 
163  ChangeState changes{this};
164  PlaceholderState placeholders{this};
165 
166  bool isCommitRequired;
167  bool isUpdateRequired;
168  bool isResetRequired;
169  bool isMemoryVizRequired;
170  bool isMetaVizRequired;
171 
172  friend ChangeState;
173  friend PlaceholderState;
174  };
175 } // namespace armarx
ArVizComponentPlugin.h
armarx::PlaceholderState::Placeholder
Definition: Editor.h:82
armarx::ChangeState::ChangeState
ChangeState(Editor *editor)
Definition: Editor.h:39
ObjectPoseProviderPlugin.h
armarx::Editor::Editor
Editor(viz::Client &client, Properties properties, std::function< void(objpose::ProvidedObjectPoseSeq &)> pushToMemory, std::function< objpose::ObjectPoseSeq(void)> pullFromMemory)
Definition: Editor.cpp:10
armarx::objpose::ObjectPoseSeq
std::vector< ObjectPose > ObjectPoseSeq
Definition: forward_declarations.h:20
armarx::VisualizationDescription::transform
Eigen::Matrix4f transform
Definition: Editor.h:19
armarx::ChangeState::applyTo
bool applyTo(objpose::ObjectPose &pose)
Definition: Editor.cpp:292
ObjectPoseClientPlugin.h
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:650
armarx::VisualizationDescription
Definition: Editor.h:17
armarx::VisualizationDescription::options
std::vector< std::string > options
Definition: Editor.h:22
armarx::PlaceholderState::movePlaceholder
void movePlaceholder(size_t id, Eigen::Matrix4f const &transform)
Definition: Editor.cpp:538
armarx::VisualizationDescription::prototypeIndex
size_t prototypeIndex
Definition: Editor.h:30
armarx::ChangeState
Definition: Editor.h:36
armarx::PlaceholderState::addPlaceholder
void addPlaceholder(simox::OrientedBoxf box)
Definition: Editor.cpp:514
armarx::ObjectFinder
Used to find objects in the ArmarX objects repository [1] (formerly [2]).
Definition: ObjectFinder.h:22
GfxTL::Identity
void Identity(MatrixXX< N, N, T > *a)
Definition: MatrixXX.h:570
InteractionObserver.h
armarx::Editor::Properties::providerName
std::string providerName
Definition: Editor.h:115
armarx::ChangeState::clear
void clear()
Definition: Editor.cpp:278
armarx::Editor
Definition: Editor.h:110
armarx::PlaceholderState::Placeholder::transform
Eigen::Matrix4f transform
Definition: Editor.h:85
armarx::ChangeState::resetObject
void resetObject(objpose::ObjectPose const &object)
Definition: Editor.cpp:475
armarx::ChangeState::moveObject
void moveObject(objpose::ObjectPose const &object, Eigen::Matrix4f const &transform)
Definition: Editor.cpp:492
armarx::VisualizationDescription::cloneIndex
size_t cloneIndex
Definition: Editor.h:27
armarx::ChangeState::createObject
void createObject(std::string const &objectID, Eigen::Matrix4f const &pose)
Definition: Editor.cpp:431
armarx::PlaceholderState::PlaceholderState
PlaceholderState(Editor *editor)
Definition: Editor.h:80
max
T max(T t1, T t2)
Definition: gdiam.h:51
armarx::VisualizationDescription::updateIndex
size_t updateIndex
Definition: Editor.h:32
armarx::VisualizationDescription::resetAllIndex
size_t resetAllIndex
Definition: Editor.h:33
armarx::objpose::ProvidedObjectPoseSeq
std::vector< ProvidedObjectPose > ProvidedObjectPoseSeq
Definition: forward_declarations.h:25
armarx::Editor::Properties::confidenceThreshold
float const & confidenceThreshold
Definition: Editor.h:118
armarx::transform
auto transform(const Container< InputT, Alloc > &in, OutputT(*func)(InputT const &)) -> Container< OutputT, typename std::allocator_traits< Alloc >::template rebind_alloc< OutputT >>
Convenience function (with less typing) to transform a container of type InputT into the same contain...
Definition: algorithm.h:351
armarx::ChangeState::deleteObject
void deleteObject(objpose::ObjectPose const &object)
Definition: Editor.cpp:469
armarx::Editor::Properties::objectScaling
float const & objectScaling
Definition: Editor.h:117
armarx::VisualizationDescription::resetIndex
size_t resetIndex
Definition: Editor.h:29
armarx::ChangeState::getTransform
Eigen::Matrix4f getTransform(objpose::ObjectPose const &object)
Definition: Editor.cpp:499
armarx::ChangeState::moveNewObjectsTo
void moveNewObjectsTo(objpose::ObjectPoseSeq &seq)
Definition: Editor.cpp:285
armarx::VisualizationDescription::color
std::optional< simox::Color > color
Definition: Editor.h:24
armarx::PlaceholderState::specifyObject
void specifyObject(size_t id, std::string const &objectID, ChangeState &changeState)
Definition: Editor.cpp:568
armarx::VisualizationDescription::deleteIndex
size_t deleteIndex
Definition: Editor.h:28
armarx::Editor::Properties::availableObjects
std::vector< data::ObjectID > const & availableObjects
Definition: Editor.h:120
armarx::PlaceholderState
Definition: Editor.h:77
armarx::PlaceholderState::removePlaceholder
void removePlaceholder(size_t id)
Definition: Editor.cpp:545
armarx::VisualizationDescription::allowTransforming
bool allowTransforming
Definition: Editor.h:20
armarx::viz::Client::layer
Layer layer(std::string const &name) const
Definition: Client.cpp:80
armarx::viz::Client
Definition: Client.h:117
armarx::ChangeState::visualizeNewObjects
void visualizeNewObjects()
Definition: Editor.cpp:313
armarx::VisualizationDescription::commitIndex
size_t commitIndex
Definition: Editor.h:31
armarx::viz::Layer
Definition: Layer.h:12
armarx::VisualizationDescription::alpha
std::optional< float > alpha
Definition: Editor.h:23
armarx::PlaceholderState::Placeholder::box
simox::OrientedBoxf box
Definition: Editor.h:84
armarx::Editor::Properties
Definition: Editor.h:113
armarx::ChangeState::cloneObject
void cloneObject(objpose::ObjectPose const &object)
Definition: Editor.cpp:395
armarx::ChangeState::buildVisualizationDescription
VisualizationDescription buildVisualizationDescription(objpose::ObjectPose &object)
Definition: Editor.cpp:322
armarx::PlaceholderState::visualizePlaceholders
void visualizePlaceholders()
Definition: Editor.cpp:524
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::objpose::ObjectPose
An object pose as stored by the ObjectPoseStorage.
Definition: ObjectPose.h:33
armarx::Editor::step
void step()
Definition: Editor.cpp:33
ObjectFinder.h