ElementVisualizer.cpp
Go to the documentation of this file.
1 #include "ElementVisualizer.h"
2 
3 #include <VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h>
4 
6 
7 #include <Inventor/nodes/SoMaterial.h>
8 #include <Inventor/nodes/SoTransform.h>
9 #include <Inventor/nodes/SoUnits.h>
10 
12 {
14  {
15  // We do everything in millimeters...
16  units = new SoUnits();
17  units->units = SoUnits::MILLIMETERS;
18 
19  transform = new SoTransform;
20  material = new SoMaterial;
21 
22  switch_ = new SoSwitch;
23  switch_->whichChild = SO_SWITCH_ALL;
24 
25  separator = new SoSeparator;
26  separator->addChild(units);
27  separator->addChild(transform);
28  separator->addChild(material);
29  separator->addChild(switch_);
30  }
31 
32  void
33  ElementVisualization::updateBase(data::Element const& element)
34  {
35  auto& p = element.pose;
36  transform->translation.setValue(p.x, p.y, p.z);
37  transform->rotation.setValue(p.qx, p.qy, p.qz, p.qw);
38  transform->scaleFactor.setValue(element.scale.e0, element.scale.e1, element.scale.e2);
39 
40  auto color = element.color;
41  const float conv = 1.0f / 255.0f;
42  SbColor coinColor(conv * color.r, conv * color.g, conv * color.b);
43  material->ambientColor.setValue(coinColor);
44  material->diffuseColor.setValue(coinColor);
45  material->transparency.setValue(1.0f - conv * color.a);
46 
47  // This enables textured meshes to be displayed with transparency
48  bool overrideMaterial = (element.flags & data::ElementFlags::OVERRIDE_MATERIAL);
49  material->setOverride(overrideMaterial);
50  }
51 
52  std::unique_ptr<ElementVisualization>
53  ElementVisualizer::create(const data::Element& element)
54  {
55  std::unique_ptr<ElementVisualization> result(createDerived());
56  update(element, result.get());
57 
58  return result;
59  }
60 
61  bool
62  ElementVisualizer::update(data::Element const& element, ElementVisualization* visu)
63  {
64  visu->updateBase(element);
65  return updateDerived(element, visu);
66  }
67 } // namespace armarx::viz::coin
armarx::viz::coin::ElementVisualization
Definition: ElementVisualizer.h:21
armarx::viz::coin::ElementVisualizer::createDerived
virtual ElementVisualization * createDerived()=0
ElementVisualizer.h
IceConversions.h
armarx::viz::coin::ElementVisualizer::update
bool update(data::Element const &element, ElementVisualization *visu)
Definition: ElementVisualizer.cpp:62
armarx::viz::coin::ElementVisualization::updateBase
void updateBase(data::Element const &element)
Definition: ElementVisualizer.cpp:33
armarx::viz::coin::ElementVisualization::switch_
SoSwitch * switch_
Definition: ElementVisualizer.h:33
armarx::viz::coin::ElementVisualization::transform
SoTransform * transform
Definition: ElementVisualizer.h:31
armarx::viz::coin::ElementVisualization::material
SoMaterial * material
Definition: ElementVisualizer.h:32
armarx::viz::coin::ElementVisualizer::updateDerived
virtual bool updateDerived(data::Element const &element, ElementVisualization *data)=0
armarx::viz::coin::ElementVisualization::units
SoUnits * units
Definition: ElementVisualizer.h:30
armarx::viz::coin
Definition: ElementVisualizer.cpp:11
armarx::viz::coin::ElementVisualizer::create
std::unique_ptr< ElementVisualization > create(data::Element const &element)
Definition: ElementVisualizer.cpp:53
armarx::viz::coin::ElementVisualization::separator
SoSeparator * separator
Definition: ElementVisualizer.h:29
armarx::viz::coin::ElementVisualization::ElementVisualization
ElementVisualization()
Definition: ElementVisualizer.cpp:13