Editor.cpp
Go to the documentation of this file.
1 #include "Editor.h"
2 
5 
6 #include <utility>
7 
8 namespace armarx
9 {
11  Properties properties,
12  std::function<void(objpose::ProvidedObjectPoseSeq &)> pushToMemory,
13  std::function<objpose::ObjectPoseSeq(void)> pullFromMemory)
14  : properties(std::move(properties))
15  , client(client)
16  , pushToMemory(std::move(pushToMemory))
17  , pullFromMemory(std::move(pullFromMemory))
18  , isCommitRequired(false)
19  , isUpdateRequired(true)
20  , isMemoryVizRequired(true)
21  , isMetaVizRequired(true)
22  {
23  placeholderOptions.emplace_back("Remove");
24  placeholderOptions.emplace_back(lineString);
25 
26  for (auto const& availableObject : this->properties.availableObjects)
27  {
28  placeholderOptions.push_back(armarx::fromIce(availableObject).str());
29  }
30  }
31 
32  void Editor::step()
33  {
34  viz::StagedCommit stage = client.stage();
35 
36  if (isUpdateRequired)
37  {
38  storedPoses = update();
39 
40  isUpdateRequired = false;
41  }
42 
43  if (isResetRequired)
44  {
45  reset();
46 
47  isResetRequired = false;
48  }
49 
50  if (isMemoryVizRequired)
51  {
52  visualizeMemory();
53  stage.add(memoryLayer);
54 
55  isMemoryVizRequired = false;
56  }
57 
58  if (isMetaVizRequired)
59  {
60  visualizeMeta();
61  stage.add(metaLayer);
62 
63  isMetaVizRequired = false;
64  }
65 
66  if (isCommitRequired)
67  {
68  commit();
69 
70  isCommitRequired = false;
71  }
72 
73  observer.requestInteractions(stage);
74 
75  viz::CommitResult result = client.commit(stage);
76 
77  observer.process(result.interactions());
78  }
79 
81  Editor::update()
82  {
83  objpose::ObjectPoseSeq newRequestedPoses = pullFromMemory();
84 
85  isMemoryVizRequired = true;
86 
87  return newRequestedPoses;
88  }
89 
90  void Editor::reset()
91  {
92  changes.clear();
93 
94  isMemoryVizRequired = true;
95  }
96 
97  void Editor::commit()
98  {
99  changes.moveNewObjectsTo(storedPoses);
100 
101  objpose::ProvidedObjectPoseSeq providingPoses;
102  objpose::ObjectPoseSeq remainingPoses;
103 
104  remainingPoses.reserve(storedPoses.size());
105  for (objpose::ObjectPose & current : storedPoses)
106  {
107  bool isChanged = changes.applyTo(current);
108 
109  if (isChanged)
110  {
111  providingPoses.push_back(current.toProvidedObjectPoseGlobal());
112  objpose::ProvidedObjectPose& providing = providingPoses.back();
113 
114  providing.providerName = properties.providerName;
115  providing.timestamp = DateTime::Now();
116  }
117 
118  if (current.confidence > properties.confidenceThreshold)
119  {
120  remainingPoses.push_back(current);
121  }
122  }
123 
124  pushToMemory(providingPoses);
125 
126  changes.clear();
127  storedPoses = remainingPoses;
128 
129  isMemoryVizRequired = true;
130  }
131 
132  void Editor::visualizeMemory()
133  {
134  observer.clearObservedLayer(memoryLayer);
135 
136  for (objpose::ObjectPose & objectPose: storedPoses)
137  {
138  if (objectPose.confidence > properties.confidenceThreshold)
139  {
140  visualizeObject(objectPose);
141  }
142  }
143 
144  changes.visualizeNewObjects();
145  }
146 
147  void Editor::visualizeObject(objpose::ObjectPose& objectPose)
148  {
149  VisualizationDescription description = changes.buildVisualizationDescription(objectPose);
150 
152 
153  if (description.allowTransforming)
154  {
156  }
157 
158  if (not description.options.empty())
159  {
160  interaction.contextMenu(description.options);
161  }
162 
163  viz::Object object =
164  viz::Object(objectPose.objectID.str())
165  .pose(description.transform * objectPose.objectPoseGlobal)
166  .scale(properties.objectScaling)
167  .fileByObjectFinder(objectPose.objectID)
169 
170  if (description.alpha.has_value())
171  {
172  object.alpha(description.alpha.value());
173  }
174 
175  if (description.color.has_value())
176  {
177  object.overrideColor(description.color.value());
178  }
179 
180  observer.addObserved(memoryLayer, object)
181  .onContextMenu(description.cloneIndex, [this, &objectPose]
182  {
183  changes.cloneObject(objectPose);
184  isMemoryVizRequired = true;
185  })
186  .onContextMenu(description.deleteIndex, [this, &objectPose]
187  {
188  changes.deleteObject(objectPose);
189  isMemoryVizRequired = true;
190  })
191  .onContextMenu(description.resetIndex, [this, &objectPose]
192  {
193  changes.resetObject(objectPose);
194  isMemoryVizRequired = true;
195  })
196  .onContextMenu(description.prototypeIndex, [this, &objectPose]
197  {
198  const float defaultExtents = 100;
199  simox::OrientedBoxf box(objectPose.objectPoseGlobal, Eigen::Vector3f(defaultExtents, defaultExtents, defaultExtents));
200 
201  box = objectPose.oobbGlobal().value_or(box);
202  box = box.transformed(changes.getTransform(objectPose));
203 
204  placeholders.addPlaceholder(box);
205  isMetaVizRequired = true;
206  })
207  .onContextMenu(description.commitIndex, [this]
208  {
209  isCommitRequired = true;
210  })
211  .onContextMenu(description.updateIndex, [this]
212  {
213  isUpdateRequired = true;
214  })
215  .onContextMenu(description.resetAllIndex, [this]
216  {
217  isResetRequired = true;
218  })
219  .onTransformEnd([this, &objectPose](const Eigen::Matrix4f& transform)
220  {
221  changes.moveObject(objectPose, transform);
222  isMemoryVizRequired = true;
223  });
224  }
225 
226  void Editor::visualizeMeta()
227  {
228  observer.clearObservedLayer(metaLayer);
229 
230  placeholders.visualizePlaceholders();
231  }
232 
233  void Editor::visualizePlaceholder(PlaceholderState::Placeholder const& placeholder, size_t id)
234  {
236  .selection().transform().hideDuringTransform().contextMenu(placeholderOptions);
237 
238  viz::Box box = viz::Box("placeholder_" + std::to_string(id))
239  .set(placeholder.box.transformed(placeholder.transform))
240  .color(simox::Color::yellow(255, 128))
242 
243  auto& observation = observer.addObserved(metaLayer, box)
244  .onContextMenu(0, [this, id]()
245  {
246  placeholders.removePlaceholder(id);
247  isMetaVizRequired = true;
248  })
249  .onTransformEnd([this, id](Eigen::Matrix4f const& transform)
250  {
251  placeholders.movePlaceholder(id, transform);
252  isMetaVizRequired = true;
253  });
254 
255  for (size_t index = 2; index < placeholderOptions.size(); index++)
256  {
257  std::string const& object = placeholderOptions[index];
258 
259  observation.onContextMenu(index, [this, id, &object]
260  {
261  placeholders.specifyObject(id, object, changes);
262 
263  isMetaVizRequired = true;
264  isMemoryVizRequired = true;
265  });
266  }
267  }
268 
270  {
271  changed.clear();
272  newPoses.clear();
273  }
274 
276  {
277  seq.insert(seq.begin(), newPoses.begin(), newPoses.end());
278  newPoses.clear();
279  }
280 
282  {
283  auto iterator = changed.find(pose.objectID.str());
284  bool isChanged = iterator != changed.end();
285 
286  if (isChanged)
287  {
288  auto& [name, change] = *iterator;
289 
290  if (change.kind == DELETE)
291  {
292  pose.confidence = 0;
293  }
294 
295  pose.objectPoseGlobal = change.transform * pose.objectPoseGlobal;
296  }
297 
298  return isChanged;
299  }
300 
302  {
303  for (objpose::ObjectPose & objectPose: newPoses)
304  {
305  editor->visualizeObject(objectPose);
306  }
307  }
308 
310  {
311  VisualizationDescription description;
312 
313  auto iterator = changed.find(object.objectID.str());
314  bool isChanged = iterator != changed.end();
315 
316  ChangeKind kind = MOVE;
317  if (isChanged)
318  {
319  auto& [name, change] = *iterator;
320  kind = change.kind;
321  }
322 
323  description.allowTransforming = kind != DELETE;
324 
325  size_t currentIndex = 0;
326 
327  if (kind == MOVE)
328  {
329  description.options.emplace_back("Clone");
330  description.cloneIndex = currentIndex++;
331 
332  description.options.emplace_back("Delete");
333  description.deleteIndex = currentIndex++;
334  }
335 
336  if (isChanged)
337  {
338  auto& [name, change] = *iterator;
339 
340  description.options.emplace_back("Reset");
341  description.resetIndex = currentIndex++;
342 
343  description.transform = change.transform;
344 
345  const float alpha = 0.5;
346 
347  switch (kind)
348  {
349  case MOVE:
350  description.alpha = alpha;
351  break;
352 
353  case CREATE:
354  description.color = simox::Color(0.0F, 1.0F, 0.0F, alpha);
355  break;
356 
357  case DELETE:
358  description.color = simox::Color(1.0F, 0.0F, 0.0F, alpha);
359  break;
360  }
361  }
362 
363  description.options.emplace_back("Create Placeholder");
364  description.prototypeIndex = currentIndex++;
365 
366  description.options.emplace_back(Editor::lineString);
367  currentIndex++;
368 
369  description.options.emplace_back("Commit All Changes");
370  description.commitIndex = currentIndex++;
371 
372  description.options.emplace_back("Update Unchanged");
373  description.updateIndex = currentIndex++;
374 
375  description.options.emplace_back("Reset All");
376  description.resetAllIndex = currentIndex; // ++
377 
378  return description;
379  }
380 
382  {
383  std::string suffix = std::to_string(std::chrono::duration_cast<std::chrono::seconds>(
384  std::chrono::system_clock::now().time_since_epoch()).count());
385 
386  objpose::ObjectPose& newPose = newPoses.emplace_back(object);
387  newPose.objectID = object.objectID.withInstanceName(object.objectID.instanceName() + suffix);
388 
389  const float minOffset = 100;
390  float offset = minOffset;
391  if (object.localOOBB.has_value())
392  {
393  Eigen::Vector3f size = object.localOOBB.value().corner_max() - object.localOOBB.value().corner_min();
394  float objectOffset = size.maxCoeff() / 2;
395 
396  offset = std::max(minOffset, objectOffset);
397  }
398 
399  Change& clonedChange = changed[newPose.objectID.str()];
400  clonedChange.kind = CREATE;
401  // Heuristic: Don't shift in Z direction to ease creation in a horizontal plane.
402  clonedChange.transform = Eigen::Affine3f(Eigen::Translation3f(offset, offset, 0)).matrix();
403  clonedChange.iterator = std::prev(newPoses.end());
404 
405  auto iterator = changed.find(object.objectID.str());
406  if (iterator != changed.end())
407  {
408  auto& [name, originalChange] = *iterator;
409  clonedChange.transform *= originalChange.transform;
410  }
411  }
412 
413  void ChangeState::createObject(const std::string &objectID, const Eigen::Matrix4f &pose)
414  {
415  std::string suffix = std::to_string(std::chrono::duration_cast<std::chrono::seconds>(
416  std::chrono::system_clock::now().time_since_epoch()).count());
417 
418  objpose::ObjectPose& newPose = newPoses.emplace_back();
419 
420  armarx::ObjectID id(objectID);
421  newPose.objectID = id.withInstanceName(id.instanceName() + suffix);
422 
423  newPose.providerName = editor->properties.providerName;
424  newPose.objectType = objpose::ObjectType::KnownObject;
425  newPose.isStatic = true;
426 
427  newPose.objectPoseGlobal = pose;
428  newPose.confidence = 1;
429  newPose.timestamp = DateTime::Now();
430 
431  std::optional<armarx::ObjectInfo> info = editor->objectFinder.findObject(id);
432  if (info.has_value())
433  {
434  newPose.localOOBB = info->loadOOBB();
435 
436  if (newPose.localOOBB.has_value())
437  {
438  newPose.objectPoseGlobal = pose * newPose.localOOBB->transformation_centered().inverse();
439  }
440  }
441 
442  Change& createdChange = changed[newPose.objectID.str()];
443  createdChange.kind = CREATE;
444  createdChange.transform = Eigen::Matrix4f::Identity();
445  createdChange.iterator = std::prev(newPoses.end());
446  }
447 
449  {
450  changed[object.objectID.str()].kind = DELETE;
451  }
452 
454  {
455  auto iterator = changed.find(object.objectID.str());
456  if (iterator != changed.end())
457  {
458  auto& [name, change] = *iterator;
459 
460  if (change.kind == CREATE)
461  {
462  newPoses.erase(change.iterator);
463  }
464 
465  changed.erase(iterator);
466  }
467  }
468 
470  {
471  Change& change = changed[object.objectID.str()];
472  change.transform = transform * change.transform;
473  }
474 
476  {
478 
479  auto iterator = changed.find(object.objectID.str());
480  if (iterator != changed.end())
481  {
482  auto& [name, change] = *iterator;
483  transform = change.transform;
484  }
485 
486  return transform;
487  }
488 
489  void PlaceholderState::addPlaceholder(simox::OrientedBoxf box)
490  {
491  size_t id = getID();
492 
493  auto& entry = placeholders[id];
494  entry.placeholder = { .box = std::move(box), .transform = Eigen::Matrix4f::Identity() };
495  entry.isActive = true;
496  }
497 
499  {
500  for (size_t id = 0; id < placeholders.size(); id++)
501  {
502  auto& entry = placeholders[id];
503 
504  if (entry.isActive)
505  {
506  editor->visualizePlaceholder(entry.placeholder, id);
507  }
508  }
509  }
510 
512  {
513  auto& placeholder = placeholders[id].placeholder;
514  placeholder.transform = transform * placeholder.transform;
515  }
516 
518  {
519  placeholders[id].isActive = false;
520 
521  unusedIDs.push(id);
522  }
523 
524  size_t PlaceholderState::getID()
525  {
526  if (unusedIDs.empty())
527  {
528  size_t id = placeholders.size();
529  placeholders.push_back({Placeholder(), false});
530  return id;
531  }
532 
533  size_t id = unusedIDs.top();
534  unusedIDs.pop();
535  return id;
536  }
537 
538  void PlaceholderState::specifyObject(size_t id, std::string const& objectID, ChangeState& changeState)
539  {
540  auto& placeholder = placeholders[id].placeholder;
541 
542  Eigen::Matrix4f pose = placeholder.box.transformed(placeholder.transform).transformation_centered();
543  changeState.createObject(objectID, pose);
544 
545  removePlaceholder(id);
546  }
547 } // namespace armarx
armarx::InteractionObserver::Observation::onTransformEnd
Observation & onTransformEnd(std::function< void(Eigen::Matrix4f const &)> action)
Definition: InteractionObserver.cpp:13
armarx::viz::Client::commit
CommitResult commit(StagedCommit const &commit)
Definition: Client.cpp:80
armarx::viz::StagedCommit::add
void add(Layer const &layer)
Stage a layer to be committed later via client.apply(*this)
Definition: Client.h:37
armarx::viz::Client::stage
StagedCommit stage()
Definition: Client.h:135
str
std::string str(const T &t)
Definition: UserAssistedSegmenterGuiWidgetController.cpp:42
ice_conversions.h
armarx::ObjectID
A known object ID of the form "Dataset/ClassName" or "Dataset/ClassName/InstanceName".
Definition: ObjectID.h:11
armarx::InteractionObserver::addObserved
Observation & addObserved(viz::Layer &layer, ElementT const &element)
Definition: InteractionObserver.h:24
armarx::ObjectID::withInstanceName
ObjectID withInstanceName(const std::string &instanceName) const
Definition: ObjectID.cpp:75
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::InteractionObserver::Observation::onContextMenu
Observation & onContextMenu(size_t index, std::function< void()> action)
Definition: InteractionObserver.cpp:6
armarx::objpose::ObjectPoseSeq
std::vector< ObjectPose > ObjectPoseSeq
Definition: forward_declarations.h:20
armarx::VisualizationDescription::transform
Eigen::Matrix4f transform
Definition: Editor.h:19
armarx::objpose::ObjectPose::objectType
ObjectType objectType
Known or unknown object.
Definition: ObjectPose.h:63
armarx::viz::interaction
InteractionDescription interaction()
Definition: ElementOps.h:101
index
uint8_t index
Definition: EtherCATFrame.h:59
armarx::ChangeState::applyTo
bool applyTo(objpose::ObjectPose &pose)
Definition: Editor.cpp:281
armarx::viz::Object::fileByObjectFinder
Object & fileByObjectFinder(const armarx::ObjectID &objectID, const std::string &objectsPackage=DefaultObjectsPackage, const std::string &relativeObjectsDirectory=DefaultRelativeObjectsDirectory)
Set the file so it could be found using armarx::ObjectFinder (also on remote machine).
Definition: Elements.cpp:53
armarx::core::time::DateTime::Now
static DateTime Now()
Definition: DateTime.cpp:55
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:511
armarx::objpose::ObjectPose::localOOBB
std::optional< simox::OrientedBoxf > localOOBB
Object bounding box in object's local coordinate frame.
Definition: ObjectPose.h:104
armarx::VisualizationDescription::prototypeIndex
size_t prototypeIndex
Definition: Editor.h:30
armarx::objpose::ObjectPose::providerName
std::string providerName
Name of the providing component.
Definition: ObjectPose.h:61
armarx::InteractionObserver::process
void process(viz::InteractionFeedbackRange const &interactions)
Definition: InteractionObserver.cpp:55
armarx::ChangeState
Definition: Editor.h:38
armarx::viz::StagedCommit
A staged commit prepares multiple layers to be committed.
Definition: Client.h:31
armarx::viz::Object::alpha
Object & alpha(float alpha)
Definition: Elements.cpp:61
armarx::PlaceholderState::addPlaceholder
void addPlaceholder(simox::OrientedBoxf box)
Definition: Editor.cpp:489
armarx::objpose::ObjectPose::isStatic
bool isStatic
Whether object is static. Static objects don't decay.
Definition: ObjectPose.h:65
GfxTL::Identity
void Identity(MatrixXX< N, N, T > *a)
Definition: MatrixXX.h:523
Color
uint32_t Color
RGBA color.
Definition: color.h:8
armarx::Editor::Properties::providerName
std::string providerName
Definition: Editor.h:119
armarx::viz::Object
Definition: Elements.h:321
armarx::ChangeState::clear
void clear()
Definition: Editor.cpp:269
armarx::viz::CommitResult::interactions
InteractionFeedbackRange interactions() const
Definition: Client.h:81
armarx::viz::InteractionDescription
Definition: ElementOps.h:36
armarx::viz::InteractionDescription::contextMenu
Self & contextMenu(std::vector< std::string > const &options)
Definition: ElementOps.h:52
armarx::ChangeState::resetObject
void resetObject(objpose::ObjectPose const &object)
Definition: Editor.cpp:453
armarx::ChangeState::moveObject
void moveObject(objpose::ObjectPose const &object, Eigen::Matrix4f const &transform)
Definition: Editor.cpp:469
armarx::VisualizationDescription::cloneIndex
size_t cloneIndex
Definition: Editor.h:27
armarx::viz::Box
Definition: Elements.h:51
armarx::ChangeState::createObject
void createObject(std::string const &objectID, Eigen::Matrix4f const &pose)
Definition: Editor.cpp:413
max
T max(T t1, T t2)
Definition: gdiam.h:48
armarx::viz::CommitResult
Definition: Client.h:74
armarx::viz::InteractionDescription::hideDuringTransform
Self & hideDuringTransform()
Definition: ElementOps.h:92
armarx::viz::Object::overrideColor
Object & overrideColor(Color c)
Definition: Elements.h:369
armarx::VisualizationDescription::updateIndex
size_t updateIndex
Definition: Editor.h:32
armarx::InteractionObserver::requestInteractions
void requestInteractions(viz::StagedCommit &stage)
Definition: InteractionObserver.cpp:47
armarx::to_string
const std::string & to_string(const std::string &s)
Definition: StringHelpers.h:40
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:122
armarx::fromIce
void fromIce(const std::map< IceKeyT, IceValueT > &iceMap, boost::container::flat_map< CppKeyT, CppValueT > &cppMap)
Definition: ice_conversions_boost_templates.h:26
armarx::ChangeState::deleteObject
void deleteObject(objpose::ObjectPose const &object)
Definition: Editor.cpp:448
armarx::Editor::Properties::objectScaling
float const & objectScaling
Definition: Editor.h:121
armarx::viz::InteractionDescription::transform
Self & transform()
Definition: ElementOps.h:87
armarx::VisualizationDescription::resetIndex
size_t resetIndex
Definition: Editor.h:29
armarx::ChangeState::getTransform
Eigen::Matrix4f getTransform(objpose::ObjectPose const &object)
Definition: Editor.cpp:475
armarx::ChangeState::moveNewObjectsTo
void moveNewObjectsTo(objpose::ObjectPoseSeq &seq)
Definition: Editor.cpp:275
armarx::objpose::ObjectPose::objectID
armarx::ObjectID objectID
The object ID, i.e. dataset, class name and instance name.
Definition: ObjectPose.h:58
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:601
armarx::VisualizationDescription::color
std::optional< simox::Color > color
Definition: Editor.h:24
ProvidedObjectPose.h
armarx::PlaceholderState::specifyObject
void specifyObject(size_t id, std::string const &objectID, ChangeState &changeState)
Definition: Editor.cpp:538
armarx::InteractionObserver::clearObservedLayer
void clearObservedLayer(viz::Layer &layer)
Definition: InteractionObserver.cpp:41
armarx::objpose::ObjectPose::objectPoseGlobal
Eigen::Matrix4f objectPoseGlobal
The object pose in the global frame.
Definition: ObjectPose.h:73
armarx::viz::ElementOps::pose
DerivedT & pose(Eigen::Matrix4f const &pose)
Definition: ElementOps.h:159
std
Definition: Application.h:66
armarx::viz::ElementOps::scale
DerivedT & scale(Eigen::Vector3f scale)
Definition: ElementOps.h:227
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:315
armarx::viz::ElementOps::color
DerivedT & color(Color color)
Definition: ElementOps.h:195
F
Definition: ExportDialogControllerTest.cpp:16
armarx::ObjectFinder::findObject
std::optional< ObjectInfo > findObject(const std::string &dataset, const std::string &name) const
Definition: ObjectFinder.cpp:65
armarx::VisualizationDescription::deleteIndex
size_t deleteIndex
Definition: Editor.h:28
Editor.h
armarx::Editor::Properties::availableObjects
std::vector< data::ObjectID > const & availableObjects
Definition: Editor.h:124
armarx::PlaceholderState::removePlaceholder
void removePlaceholder(size_t id)
Definition: Editor.cpp:517
armarx::VisualizationDescription::allowTransforming
bool allowTransforming
Definition: Editor.h:20
armarx::viz::InteractionDescription::selection
Self & selection()
Definition: ElementOps.h:46
armarx::viz::Client
Definition: Client.h:109
armarx::ChangeState::visualizeNewObjects
void visualizeNewObjects()
Definition: Editor.cpp:301
armarx::VisualizationDescription::commitIndex
size_t commitIndex
Definition: Editor.h:31
armarx::VisualizationDescription::alpha
std::optional< float > alpha
Definition: Editor.h:23
armarx::objpose::ObjectPose::confidence
float confidence
Confidence in [0, 1] (1 = full, 0 = none).
Definition: ObjectPose.h:98
armarx::viz::Box::set
Box & set(const simox::OrientedBoxBase< float > &b)
Definition: Elements.cpp:70
armarx::Editor::Properties
Definition: Editor.h:117
armarx::ChangeState::cloneObject
void cloneObject(objpose::ObjectPose const &object)
Definition: Editor.cpp:381
armarx::ChangeState::buildVisualizationDescription
VisualizationDescription buildVisualizationDescription(objpose::ObjectPose &object)
Definition: Editor.cpp:309
armarx::PlaceholderState::visualizePlaceholders
void visualizePlaceholders()
Definition: Editor.cpp:498
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:28
armarx::objpose::ObjectPose
An object pose as stored by the ObjectPoseStorage.
Definition: ObjectPose.h:36
armarx::Editor::step
void step()
Definition: Editor.cpp:32
armarx::ObjectID::str
std::string str() const
Return "dataset/className" or "dataset/className/instanceName".
Definition: ObjectID.cpp:55
armarx::objpose::ObjectPose::timestamp
DateTime timestamp
Source timestamp.
Definition: ObjectPose.h:100
armarx::viz::ElementOps::enable
DerivedT & enable(InteractionDescription const &interactionDescription)
Definition: ElementOps.h:274