1 #include <boost/make_shared.hpp>
3 #include <OGRE/OgreVector3.h>
4 #include <OGRE/OgreSceneNode.h>
5 #include <OGRE/OgreSceneManager.h>
12 void getMinMax(
const Ogre::Vector3& value, Ogre::Vector3& min_pt, Ogre::Vector3& max_pt)
14 if (value.x > max_pt.x) max_pt.x = value.x;
15 if (value.y > max_pt.y) max_pt.y = value.y;
16 if (value.z > max_pt.z) max_pt.z = value.z;
18 if (value.x < min_pt.x) min_pt.x = value.x;
19 if (value.y < min_pt.y) min_pt.y = value.y;
20 if (value.z < min_pt.z) min_pt.z = value.z;
31 label_ = boost::make_shared<rviz::MovableText>(
"unknown");
47 if (mesh_and_volumes.visual_revision != 0)
51 mesh_->estimateVertexCount(mesh_and_volumes.mesh.vertices.size() / 3);
52 mesh_->beginTriangles();
55 for (
unsigned int i = 0; i < mesh_and_volumes.mesh.vertices.size() / 3 / 3; ++i)
57 unsigned int i9 = 9 * i;
59 Ogre::Vector3 v1, v2, v3, n;
61 v1.x = mesh_and_volumes.mesh.vertices[i9 + 0];
62 v1.y = mesh_and_volumes.mesh.vertices[i9 + 1];
63 v1.z = mesh_and_volumes.mesh.vertices[i9 + 2];
65 v2.x = mesh_and_volumes.mesh.vertices[i9 + 3];
66 v2.y = mesh_and_volumes.mesh.vertices[i9 + 4];
67 v2.z = mesh_and_volumes.mesh.vertices[i9 + 5];
69 v3.x = mesh_and_volumes.mesh.vertices[i9 + 6];
70 v3.y = mesh_and_volumes.mesh.vertices[i9 + 7];
71 v3.z = mesh_and_volumes.mesh.vertices[i9 + 8];
73 n = (v1-v3).crossProduct(v2-v3).normalisedCopy();
75 mesh_->addVertex(v1, n);
76 mesh_->addVertex(v2, n);
77 mesh_->addVertex(v3, n);
80 mesh_->endTriangles();
83 if (mesh_and_volumes.volumes_revision != 0)
91 for (
const ed_gui_server_msgs::Volume& v : mesh_and_volumes.volumes)
95 label->setTextAlignment(rviz::MovableText::H_CENTER, rviz::MovableText::V_CENTER);
96 label->setCharacterHeight(0.05);
97 label->setCaption(v.name);
102 mesh->estimateVertexCount(v.mesh.vertices.size() / 3);
103 mesh->beginTriangles();
105 Ogre::Vector3 max_pt(-1e9, -1e9, -1e9);
106 Ogre::Vector3 min_pt(1e9, 1e9, 1e9);
109 for (
unsigned int i = 0; i < v.mesh.vertices.size() / 3 / 3; ++i)
111 unsigned int i9 = 9 * i;
113 Ogre::Vector3 v1, v2, v3, n;
115 v1.x = v.mesh.vertices[i9 + 0];
116 v1.y = v.mesh.vertices[i9 + 1];
117 v1.z = v.mesh.vertices[i9 + 2];
121 v2.x = v.mesh.vertices[i9 + 3];
122 v2.y = v.mesh.vertices[i9 + 4];
123 v2.z = v.mesh.vertices[i9 + 5];
127 v3.x = v.mesh.vertices[i9 + 6];
128 v3.y = v.mesh.vertices[i9 + 7];
129 v3.z = v.mesh.vertices[i9 + 8];
133 n = (v1-v3).crossProduct(v2-v3).normalisedCopy();
135 mesh->addVertex(v1, n);
136 mesh->addVertex(v2, n);
137 mesh->addVertex(v3, n);
140 mesh->endTriangles();
142 Ogre::Vector3 label_pos((max_pt.x + min_pt.x) / 2, (max_pt.y + min_pt.y) / 2, max_pt.z);
144 frame_node_->createChildSceneNode(label_pos)->attachObject(label.get());
149 void EntityVisual::setColor(Ogre::ColourValue c,
double entity_label_opacity,
double volume_opacity,
double volume_label_opacity)
151 label_->setColor(Ogre::ColourValue(1.0f, 1.0f, 1.0f, entity_label_opacity));
154 label->setColor(Ogre::ColourValue(1.0f, 1.0f, 1.0f, volume_label_opacity));
156 c.a = volume_opacity;
172 for (
unsigned int i = 0; i < polygon.xs.size(); ++i)
174 int j = (i + 1) % polygon.xs.size();
176 float x1 = polygon.xs[i];
177 float x2 = polygon.xs[j];
179 float y1 = polygon.ys[i];
180 float y2 = polygon.ys[j];
185 convex_hull_->addPoint(Ogre::Vector3(x1, y1, polygon.z_min));
186 convex_hull_->addPoint(Ogre::Vector3(x2, y2, polygon.z_min));
190 convex_hull_->addPoint(Ogre::Vector3(x1, y1, polygon.z_max));
191 convex_hull_->addPoint(Ogre::Vector3(x2, y2, polygon.z_max));
195 convex_hull_->addPoint(Ogre::Vector3(x1, y1, polygon.z_min));
196 convex_hull_->addPoint(Ogre::Vector3(x1, y1, polygon.z_max));
202 label_->setTextAlignment(rviz::MovableText::H_CENTER, rviz::MovableText::V_CENTER);
206 label_->setCharacterHeight(0);
209 label_->setCharacterHeight(0.05);
210 label_->setCaption(label);