26 #include <VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h>
27 #include <VirtualRobot/XML/RobotIO.h>
34 #include <Inventor/SbViewportRegion.h>
35 #include <Inventor/actions/SoGetMatrixAction.h>
36 #include <Inventor/actions/SoSearchAction.h>
37 #include <Inventor/nodes/SoCube.h>
43 hasEndEffectorVisualizer(false),
62 this->hasEndEffectorVisualizer = endEffector ? true :
false;
65 this->material =
new SoMaterial();
66 this->material->transparency = 0.5;
67 this->material->setOverride(
true);
68 this->addChild(material);
71 if (this->hasEndEffectorVisualizer)
75 endEffectorRobot->getVisualization();
76 this->addChild(endEffectorVisualization->getCoinVisualization());
80 SoCube* cube =
new SoCube();
88 this->manip.reset(
new SoTransformerManip());
94 SoSeparator* nullSep =
new SoSeparator;
97 manip->getDragger()->setPart(
"scale1", nullSep);
98 manip->getDragger()->setPart(
"scale2", nullSep);
99 manip->getDragger()->setPart(
"scale3", nullSep);
100 manip->getDragger()->setPart(
"scale4", nullSep);
101 manip->getDragger()->setPart(
"scale5", nullSep);
102 manip->getDragger()->setPart(
"scale6", nullSep);
103 manip->getDragger()->setPart(
"scale7", nullSep);
104 manip->getDragger()->setPart(
"scale8", nullSep);
107 manip->getDragger()->setPart(
"translator1", nullSep);
108 manip->getDragger()->setPart(
"translator2", nullSep);
109 manip->getDragger()->setPart(
"translator3", nullSep);
110 manip->getDragger()->setPart(
"translator4", nullSep);
111 manip->getDragger()->setPart(
"translator5", nullSep);
112 manip->getDragger()->setPart(
"translator6", nullSep);
115 manip->getDragger()->setPart(
"rotator1", nullSep);
116 manip->getDragger()->setPart(
"rotator2", nullSep);
117 manip->getDragger()->setPart(
"rotator3", nullSep);
118 manip->getDragger()->setPart(
"rotator4", nullSep);
119 manip->getDragger()->setPart(
"rotator5", nullSep);
120 manip->getDragger()->setPart(
"rotator6", nullSep);
124 if (this->hasEndEffectorVisualizer)
127 this->localTransformation =
128 endEffector->getBase()->getTransformationTo(endEffector->getTcp());
130 globalMat = endEffector->getBase()->getGlobalPose();
135 globalMat(0, 3) /= 1000;
136 globalMat(1, 3) /= 1000;
137 globalMat(2, 3) /= 1000;
138 manip->setMatrix(VirtualRobot::CoinVisualizationFactory::getSbMatrix(globalMat));
139 this->insertChild(manip.get(), 0);
141 this->isVisualizing =
true;
149 this->removeAllChildren();
152 this->isVisualizing =
false;
153 this->hasEndEffectorVisualizer =
false;
162 this->material->ambientColor.setValue(r, g, b);
171 SoGetMatrixAction* action =
new SoGetMatrixAction(SbViewportRegion());
173 sa.setNode(manip.get());
174 sa.setSearchingAll(TRUE);
175 SoBaseKit::setSearchingChildren(TRUE);
178 action->apply(sa.getPath());
180 SbMatrix matrix = action->getMatrix();
183 mat(0, 0) = matrix[0][0];
184 mat(0, 1) = matrix[1][0];
185 mat(0, 2) = matrix[2][0];
186 mat(0, 3) = matrix[3][0] * 1000;
188 mat(1, 0) = matrix[0][1];
189 mat(1, 1) = matrix[1][1];
190 mat(1, 2) = matrix[2][1];
191 mat(1, 3) = matrix[3][1] * 1000;
193 mat(2, 0) = matrix[0][2];
194 mat(2, 1) = matrix[1][2];
195 mat(2, 2) = matrix[2][2];
196 mat(2, 3) = matrix[3][2] * 1000;
198 mat(3, 0) = matrix[0][3];
199 mat(3, 1) = matrix[1][3];
200 mat(3, 2) = matrix[2][3];
201 mat(3, 3) = matrix[3][3];
206 if (this->hasEndEffectorVisualizer)
208 mat = mat * this->localTransformation;
223 std::stringstream buffer;
233 if (this->hasEndEffectorVisualizer)
235 globalPose = globalPose * this->localTransformation.inverse();
237 globalPose(0, 3) /= 1000;
238 globalPose(1, 3) /= 1000;
239 globalPose(2, 3) /= 1000;
240 manip->setMatrix(VirtualRobot::CoinVisualizationFactory::getSbMatrix(globalPose));