Editor.h
Go to the documentation of this file.
1#pragma once
2
3#include <list>
4#include <queue>
5
11
12namespace armarx
13{
14
15 class Editor;
16
18 {
19 Eigen::Matrix4f transform = Eigen::Matrix4f::Identity();
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.
27 size_t cloneIndex = std::numeric_limits<size_t>::max();
28 size_t deleteIndex = std::numeric_limits<size_t>::max();
29 size_t resetIndex = std::numeric_limits<size_t>::max();
30 size_t prototypeIndex = std::numeric_limits<size_t>::max();
31 size_t commitIndex = std::numeric_limits<size_t>::max();
32 size_t updateIndex = std::numeric_limits<size_t>::max();
33 size_t resetAllIndex = std::numeric_limits<size_t>::max();
34 };
35
37 {
38 public:
39 explicit ChangeState(Editor* editor) : editor(editor){};
40
41 void clear();
43 bool applyTo(objpose::ObjectPose& pose);
46 Eigen::Matrix4f getTransform(objpose::ObjectPose const& object);
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;
67 Eigen::Matrix4f transform = Eigen::Matrix4f::Identity();
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
83 {
84 simox::OrientedBoxf box;
85 Eigen::Matrix4f transform{Eigen::Matrix4f::Identity()};
86 };
87
88 void addPlaceholder(simox::OrientedBoxf box);
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:
114 {
115 std::string providerName;
116
117 float const& objectScaling;
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
void moveObject(objpose::ObjectPose const &object, Eigen::Matrix4f const &transform)
Definition Editor.cpp:492
void deleteObject(objpose::ObjectPose const &object)
Definition Editor.cpp:469
Eigen::Matrix4f getTransform(objpose::ObjectPose const &object)
Definition Editor.cpp:499
ChangeState(Editor *editor)
Definition Editor.h:39
void createObject(std::string const &objectID, Eigen::Matrix4f const &pose)
Definition Editor.cpp:431
void moveNewObjectsTo(objpose::ObjectPoseSeq &seq)
Definition Editor.cpp:285
void cloneObject(objpose::ObjectPose const &object)
Definition Editor.cpp:395
bool applyTo(objpose::ObjectPose &pose)
Definition Editor.cpp:292
void visualizeNewObjects()
Definition Editor.cpp:313
void resetObject(objpose::ObjectPose const &object)
Definition Editor.cpp:475
VisualizationDescription buildVisualizationDescription(objpose::ObjectPose &object)
Definition Editor.cpp:322
Editor(viz::Client &client, Properties properties, std::function< void(objpose::ProvidedObjectPoseSeq &)> pushToMemory, std::function< objpose::ObjectPoseSeq(void)> pullFromMemory)
Definition Editor.cpp:10
void step()
Definition Editor.cpp:33
Used to find objects in the ArmarX objects repository [1] (formerly [2]).
void addPlaceholder(simox::OrientedBoxf box)
Definition Editor.cpp:514
PlaceholderState(Editor *editor)
Definition Editor.h:80
void specifyObject(size_t id, std::string const &objectID, ChangeState &changeState)
Definition Editor.cpp:568
void movePlaceholder(size_t id, Eigen::Matrix4f const &transform)
Definition Editor.cpp:538
void removePlaceholder(size_t id)
Definition Editor.cpp:545
virtual Layer layer(std::string const &name) const
Definition Client.cpp:80
std::vector< ObjectPose > ObjectPoseSeq
std::vector< ProvidedObjectPose > ProvidedObjectPoseSeq
This file offers overloads of toIce() and fromIce() functions for STL container types.
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
std::string providerName
Definition Editor.h:115
std::vector< data::ObjectID > const & availableObjects
Definition Editor.h:120
float const & confidenceThreshold
Definition Editor.h:118
float const & objectScaling
Definition Editor.h:117
std::optional< simox::Color > color
Definition Editor.h:24
std::vector< std::string > options
Definition Editor.h:22
Eigen::Matrix4f transform
Definition Editor.h:19
std::optional< float > alpha
Definition Editor.h:23
An object pose as stored by the ObjectPoseStorage.
Definition ObjectPose.h:34