Create OGRE objects for all supported lanelet map layers.
120 {
121 Ogre::ManualObject* map_manual_object =
123 Ogre::ManualObject* separator_manual_object =
125 Ogre::ManualObject* area_manual_object =
127 Ogre::ManualObject* parking_manual_object =
129 Ogre::ManualObject* lane_fill_manual_object =
131 Ogre::ManualObject* sidewalk_manual_object =
133 Ogre::ManualObject* crosswalk_manual_object =
135
136 if (map_ptr == nullptr) {
144 return;
145 }
146
147 map_manual_object->begin(
material_line_->getName(), Ogre::RenderOperation::OT_TRIANGLE_LIST,
"rviz_rendering");
148 separator_manual_object->begin(
material_line_->getName(), Ogre::RenderOperation::OT_TRIANGLE_LIST,
"rviz_rendering");
149 area_manual_object->begin(
material_surface_->getName(), Ogre::RenderOperation::OT_TRIANGLE_LIST,
"rviz_rendering");
150 parking_manual_object->begin(
material_surface_->getName(), Ogre::RenderOperation::OT_TRIANGLE_LIST,
"rviz_rendering");
151 lane_fill_manual_object->begin(
material_surface_->getName(), Ogre::RenderOperation::OT_TRIANGLE_LIST,
"rviz_rendering");
152 sidewalk_manual_object->begin(
material_surface_->getName(), Ogre::RenderOperation::OT_TRIANGLE_LIST,
"rviz_rendering");
153 crosswalk_manual_object->begin(
material_surface_->getName(), Ogre::RenderOperation::OT_TRIANGLE_LIST,
"rviz_rendering");
154
155 const uint8_t q_surfaces = Ogre::RENDER_QUEUE_MAIN;
156 const uint8_t q_lines = Ogre::RENDER_QUEUE_MAIN + 5;
157 lane_fill_manual_object->setRenderQueueGroup(q_surfaces);
158 area_manual_object->setRenderQueueGroup(q_surfaces);
159 parking_manual_object->setRenderQueueGroup(q_surfaces);
160 sidewalk_manual_object->setRenderQueueGroup(q_surfaces);
161 crosswalk_manual_object->setRenderQueueGroup(q_surfaces);
162 map_manual_object->setRenderQueueGroup(q_lines);
163 separator_manual_object->setRenderQueueGroup(q_lines);
164
165 for (const lanelet::ConstLanelet& lanelet : map_ptr->laneletLayer) {
166 bsd_helpers_->addLaneletToManualObject(lanelet, map_manual_object);
167 bsd_helpers_->addSeperatorToManualObject(lanelet, separator_manual_object);
169 bsd_helpers_->addLaneFillToManualObject(lanelet, lane_fill_manual_object);
170 }
173 }
174
175 for (const lanelet::ConstArea& area : map_ptr->areaLayer) {
176 auto attributes = area.attributes();
177 const auto subtype = attributes[lanelet::AttributeName::Subtype];
178
179 if (subtype == lanelet::AttributeValueString::Parking) {
180 bsd_helpers_->addParkingAreaToManualObject(area, parking_manual_object);
182 bsd_helpers_->addCrosswalkToManualObject(area, crosswalk_manual_object);
184 bsd_helpers_->addSidewalkToManualObject(area, sidewalk_manual_object);
185 } else {
186 bsd_helpers_->addAreaToManualObject(area, area_manual_object);
187 }
188 }
189
190 map_manual_object->end();
191 separator_manual_object->end();
192 area_manual_object->end();
193 parking_manual_object->end();
194 lane_fill_manual_object->end();
195 sidewalk_manual_object->end();
196 crosswalk_manual_object->end();
197
198 auto attach_if_populated = [
this](Ogre::ManualObject* manual_object,
ObjectClassification classification) {
199
200 if (manual_object->getNumSections() != 0U) {
202 objects_.push_back(std::make_pair(classification, manual_object));
203 } else {
205 }
206 };
207
215}
static int manual_object_counter_
std::vector< ClassifiedMovableObject > objects_