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
virtual ElementVisualization * createDerived()=0
virtual bool updateDerived(data::Element const &element, ElementVisualization *data)=0
std::unique_ptr< ElementVisualization > create(data::Element const &element)
bool update(data::Element const &element, ElementVisualization *visu)
void updateBase(data::Element const &element)