Ignition Rendering

API Reference

4.1.0
BaseScene.hh
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2015 Open Source Robotics Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17 #ifndef IGNITION_RENDERING_BASE_BASESCENE_HH_
18 #define IGNITION_RENDERING_BASE_BASESCENE_HH_
19 
20 #include <array>
21 #include <set>
22 #include <string>
23 
25 
29 
30 namespace ignition
31 {
32  namespace rendering
33  {
34  inline namespace IGNITION_RENDERING_VERSION_NAMESPACE {
35  //
36  class IGNITION_RENDERING_VISIBLE BaseScene :
37  public std::enable_shared_from_this<BaseScene>,
38  public virtual Scene
39  {
40  protected: BaseScene(unsigned int _id, const std::string &_name);
41 
42  public: virtual ~BaseScene();
43 
44  public: virtual void Load() override;
45 
46  public: virtual void Init() override;
47 
48  public: virtual void Fini() override;
49 
50  public: virtual bool IsLoaded() const;
51 
52  public: virtual bool IsInitialized() const override;
53 
54  public: virtual unsigned int Id() const override;
55 
56  public: virtual std::string Name() const override;
57 
58  public: virtual void IGN_DEPRECATED(4)
59  SetSimTime(const common::Time &_time) override;
60 
61  public: virtual common::Time IGN_DEPRECATED(4) SimTime() const override;
62 
63  public: virtual std::chrono::steady_clock::duration Time()
64  const override;
65 
66  public: virtual void SetTime(
67  const std::chrono::steady_clock::duration &_time) override;
68 
69  public: virtual void SetAmbientLight(double _r, double _g, double _b,
70  double _a = 1.0) override;
71 
72  public: virtual void SetAmbientLight(const math::Color &_color)
73  override = 0;
74 
75  public: virtual math::Color BackgroundColor() const override;
76 
77  public: virtual void SetBackgroundColor(double _r, double _g, double _b,
78  double _a = 1.0) override;
79 
80  public: virtual void SetBackgroundColor(const math::Color &_color)
81  override;
82 
83  // Documentation inherited.
84  public: virtual bool IsGradientBackgroundColor() const override;
85 
86  // Documentation inherited.
87  public: virtual std::array<math::Color, 4> GradientBackgroundColor()
88  const override;
89 
90  // Documentation inherited.
91  public: virtual void SetGradientBackgroundColor(
92  const std::array<math::Color, 4> &_colors) override;
93 
94  // Documentation inherited.
95  public: virtual void RemoveGradientBackgroundColor() override;
96 
97  public: virtual unsigned int NodeCount() const override;
98 
99  public: virtual bool HasNode(ConstNodePtr _node) const override;
100 
101  public: virtual bool HasNodeId(unsigned int _id) const override;
102 
103  public: virtual bool HasNodeName(const std::string &_name) const override;
104 
105  public: virtual NodePtr NodeById(unsigned int _id) const override;
106 
107  public: virtual NodePtr NodeByName(const std::string &_name) const
108  override;
109 
110  public: virtual NodePtr NodeByIndex(unsigned int _index) const override;
111 
112  // Documentation inherited.
113  public: virtual void DestroyNode(NodePtr _node, bool _recursive = false)
114  override;
115 
116  public: virtual void DestroyNodeById(unsigned int _id) override;
117 
118  public: virtual void DestroyNodeByName(const std::string &_name) override;
119 
120  public: virtual void DestroyNodeByIndex(unsigned int _index) override;
121 
122  public: virtual void DestroyNodes() override;
123 
124  public: virtual unsigned int LightCount() const override;
125 
126  public: virtual bool HasLight(ConstLightPtr _light) const override;
127 
128  public: virtual bool HasLightId(unsigned int _id) const override;
129 
130  public: virtual bool HasLightName(const std::string &_name) const
131  override;
132 
133  public: virtual LightPtr LightById(unsigned int _id) const override;
134 
135  public: virtual LightPtr LightByName(const std::string &_name) const
136  override;
137 
138  public: virtual LightPtr LightByIndex(unsigned int _index) const override;
139 
140  // Documentation inherited.
141  public: virtual void DestroyLight(LightPtr _light,
142  bool _recursive = false) override;
143 
144  public: virtual void DestroyLightById(unsigned int _id) override;
145 
146  public: virtual void DestroyLightByName(const std::string &_name)
147  override;
148 
149  public: virtual void DestroyLightByIndex(unsigned int _index) override;
150 
151  public: virtual void DestroyLights() override;
152 
153  public: virtual unsigned int SensorCount() const override;
154 
155  public: virtual bool HasSensor(ConstSensorPtr _sensor) const override;
156 
157  public: virtual bool HasSensorId(unsigned int _id) const override;
158 
159  public: virtual bool HasSensorName(const std::string &_name) const
160  override;
161 
162  public: virtual SensorPtr SensorById(unsigned int _id) const override;
163 
164  public: virtual SensorPtr SensorByName(const std::string &_name) const
165  override;
166 
167  public: virtual SensorPtr SensorByIndex(unsigned int _index) const
168  override;
169 
170  // Documentation inherited.
171  public: virtual void DestroySensor(SensorPtr _sensor,
172  bool _recursive = false) override;
173 
174  public: virtual void DestroySensorById(unsigned int _id) override;
175 
176  public: virtual void DestroySensorByName(const std::string &_name)
177  override;
178 
179  public: virtual void DestroySensorByIndex(unsigned int _index) override;
180 
181  public: virtual void DestroySensors() override;
182 
183  public: virtual unsigned int VisualCount() const override;
184 
185  public: virtual bool HasVisual(ConstVisualPtr _visual) const override;
186 
187  public: virtual bool HasVisualId(unsigned int _id) const override;
188 
189  public: virtual bool HasVisualName(const std::string &_name) const
190  override;
191 
192  public: virtual VisualPtr VisualById(unsigned int _id) const override;
193 
194  public: virtual VisualPtr VisualByName(const std::string &_name) const
195  override;
196 
197  public: virtual VisualPtr VisualByIndex(unsigned int _index) const
198  override;
199 
200  // Documentation inherited
201  public: virtual VisualPtr VisualAt(const CameraPtr &_camera,
202  const ignition::math::Vector2i &_mousePos) override;
203 
204  // Documentation inherited.
205  public: virtual void DestroyVisual(VisualPtr _visual,
206  bool _recursive = false) override;
207 
208  public: virtual void DestroyVisualById(unsigned int _id) override;
209 
210  public: virtual void DestroyVisualByName(const std::string &_name)
211  override;
212 
213  public: virtual void DestroyVisualByIndex(unsigned int _index) override;
214 
215  public: virtual void DestroyVisuals() override;
216 
217  public: virtual bool MaterialRegistered(const std::string &_name) const
218  override;
219 
220  public: virtual MaterialPtr Material(const std::string &_name) const
221  override;
222 
223  public: virtual void RegisterMaterial(const std::string &_name,
224  MaterialPtr _material) override;
225 
226  public: virtual void UnregisterMaterial(const std::string &_name)
227  override;
228 
229  public: virtual void UnregisterMaterials() override;
230 
231  // Documentation inherited
232  public: virtual void DestroyMaterial(MaterialPtr _material) override;
233 
234  // Documentation inherited
235  public: virtual void DestroyMaterials() override;
236 
237  public: virtual DirectionalLightPtr CreateDirectionalLight() override;
238 
239  public: virtual DirectionalLightPtr CreateDirectionalLight(
240  unsigned int _id) override;
241 
242  public: virtual DirectionalLightPtr CreateDirectionalLight(
243  const std::string &_name) override;
244 
245  public: virtual DirectionalLightPtr CreateDirectionalLight(
246  unsigned int _id, const std::string &_name) override;
247 
248  public: virtual PointLightPtr CreatePointLight() override;
249 
250  public: virtual PointLightPtr CreatePointLight(unsigned int _id) override;
251 
252  public: virtual PointLightPtr CreatePointLight(const std::string &_name)
253  override;
254 
255  public: virtual PointLightPtr CreatePointLight(unsigned int _id,
256  const std::string &_name) override;
257 
258  public: virtual SpotLightPtr CreateSpotLight() override;
259 
260  public: virtual SpotLightPtr CreateSpotLight(unsigned int _id) override;
261 
262  public: virtual SpotLightPtr CreateSpotLight(const std::string &_name)
263  override;
264 
265  public: virtual SpotLightPtr CreateSpotLight(unsigned int _id,
266  const std::string &_name) override;
267 
268  public: virtual CameraPtr CreateCamera() override;
269 
270  public: virtual CameraPtr CreateCamera(unsigned int _id) override;
271 
272  public: virtual CameraPtr CreateCamera(const std::string &_name) override;
273 
274  public: virtual CameraPtr CreateCamera(unsigned int _id,
275  const std::string &_name) override;
276 
277  public: virtual DepthCameraPtr CreateDepthCamera() override;
278 
279  public: virtual DepthCameraPtr CreateDepthCamera(const unsigned int _id)
280  override;
281 
282  public: virtual DepthCameraPtr CreateDepthCamera(
283  const std::string &_name) override;
284 
285  public: virtual DepthCameraPtr CreateDepthCamera(const unsigned int _id,
286  const std::string &_name) override;
287 
288  // Documentation inherited.
289  public: virtual ThermalCameraPtr CreateThermalCamera() override;
290 
291  // Documentation inherited.
292  public: virtual ThermalCameraPtr CreateThermalCamera(
293  const unsigned int _id) override;
294 
295  // Documentation inherited.
296  public: virtual ThermalCameraPtr CreateThermalCamera(
297  const std::string &_name) override;
298 
299  // Documentation inherited.
300  public: virtual ThermalCameraPtr CreateThermalCamera(
301  const unsigned int _id, const std::string &_name) override;
302 
303  // Documentation inherited.
304  public: virtual GpuRaysPtr CreateGpuRays() override;
305 
306  // Documentation inherited.
307  public: virtual GpuRaysPtr CreateGpuRays(const unsigned int _id) override;
308 
309  // Documentation inherited.
310  public: virtual GpuRaysPtr CreateGpuRays(
311  const std::string &_name) override;
312 
313  // Documentation inherited.
314  public: virtual GpuRaysPtr CreateGpuRays(const unsigned int _id,
315  const std::string &_name) override;
316 
317  public: virtual VisualPtr CreateVisual() override;
318 
319  public: virtual VisualPtr CreateVisual(unsigned int _id) override;
320 
321  public: virtual VisualPtr CreateVisual(const std::string &_name) override;
322 
323  public: virtual VisualPtr CreateVisual(unsigned int _id,
324  const std::string &_name) override;
325 
326  public: virtual ArrowVisualPtr CreateArrowVisual() override;
327 
328  public: virtual ArrowVisualPtr CreateArrowVisual(unsigned int _id)
329  override;
330 
331  public: virtual ArrowVisualPtr CreateArrowVisual(
332  const std::string &_name) override;
333 
334  public: virtual ArrowVisualPtr CreateArrowVisual(unsigned int _id,
335  const std::string &_name) override;
336 
337  public: virtual AxisVisualPtr CreateAxisVisual() override;
338 
339  public: virtual AxisVisualPtr CreateAxisVisual(unsigned int _id) override;
340 
341  public: virtual AxisVisualPtr CreateAxisVisual(const std::string &_name)
342  override;
343 
344  public: virtual AxisVisualPtr CreateAxisVisual(unsigned int _id,
345  const std::string &_name) override;
346 
347 
348  // Documentation inherited
349  public: virtual GizmoVisualPtr CreateGizmoVisual() override;
350 
351  // Documentation inherited
352  public: virtual GizmoVisualPtr CreateGizmoVisual(unsigned int _id)
353  override;
354 
355  // Documentation inherited
356  public: virtual GizmoVisualPtr CreateGizmoVisual(const std::string &_name)
357  override;
358 
359  // Documentation inherited
360  public: virtual GizmoVisualPtr CreateGizmoVisual(unsigned int _id,
361  const std::string &_name) override;
362 
363 
364  public: virtual GeometryPtr CreateBox() override;
365 
366  public: virtual GeometryPtr CreateCone() override;
367 
368  public: virtual GeometryPtr CreateCylinder() override;
369 
370  public: virtual GeometryPtr CreatePlane() override;
371 
372  public: virtual GeometryPtr CreateSphere() override;
373 
374  public: virtual MeshPtr CreateMesh(const std::string &_meshName) override;
375 
376  public: virtual MeshPtr CreateMesh(const common::Mesh *_mesh) override;
377 
378  public: virtual MeshPtr CreateMesh(const MeshDescriptor &_desc) override;
379 
380  // Documentation inherited.
381  public: virtual GridPtr CreateGrid() override;
382 
383  // Documentation inherited.
384  public: virtual MarkerPtr CreateMarker() override;
385 
386  // Documentation inherited.
387  public: virtual LidarVisualPtr CreateLidarVisual() override;
388 
389  // Documentation inherited.
390  public: virtual LidarVisualPtr CreateLidarVisual(
391  unsigned int _id) override;
392 
393  // Documentation inherited.
394  public: virtual LidarVisualPtr CreateLidarVisual(
395  const std::string &_name) override;
396 
397  // Documentation inherited.
398  public: virtual LidarVisualPtr CreateLidarVisual(unsigned int _id,
399  const std::string &_name) override;
400 
401  // Documentation inherited.
402  public: virtual WireBoxPtr CreateWireBox() override;
403 
404  // Documentation inherited.
405  public: virtual TextPtr CreateText() override;
406 
407  public: virtual MaterialPtr CreateMaterial(const std::string &_name = "")
408  override;
409 
410  public: virtual MaterialPtr CreateMaterial(
411  const common::Material &_material) override;
412 
413  public: virtual RenderTexturePtr CreateRenderTexture() override;
414 
415  // Documentation inherited.
416  public: virtual RenderWindowPtr CreateRenderWindow() override;
417 
418  public: virtual RayQueryPtr CreateRayQuery() override;
419 
420  // Documentation inherited.
421  public: virtual ParticleEmitterPtr CreateParticleEmitter() override;
422 
423  // Documentation inherited.
424  public: virtual ParticleEmitterPtr CreateParticleEmitter(unsigned int _id)
425  override;
426 
427  // Documentation inherited.
428  public: virtual ParticleEmitterPtr CreateParticleEmitter(
429  const std::string &_name) override;
430 
431  // Documentation inherited.
432  public: virtual ParticleEmitterPtr CreateParticleEmitter(
433  unsigned int _id, const std::string &_name) override;
434 
435  public: virtual void PreRender() override;
436 
437  public: virtual void Clear() override;
438 
439  public: virtual void Destroy() override;
440 
441  protected: virtual unsigned int CreateObjectId();
442 
443  protected: virtual std::string CreateObjectName(unsigned int _id,
444  const std::string &_prefix);
445 
446  protected: virtual bool RegisterLight(LightPtr _light);
447 
448  protected: virtual bool RegisterSensor(SensorPtr _vensor);
449 
450  protected: virtual bool RegisterVisual(VisualPtr _visual);
451 
452  protected: virtual DirectionalLightPtr CreateDirectionalLightImpl(
453  unsigned int _id, const std::string &_name) = 0;
454 
455  protected: virtual PointLightPtr CreatePointLightImpl(unsigned int _id,
456  const std::string &_name) = 0;
457 
458  protected: virtual SpotLightPtr CreateSpotLightImpl(unsigned int _id,
459  const std::string &_name) = 0;
460 
461  protected: virtual CameraPtr CreateCameraImpl(unsigned int _id,
462  const std::string &_name) = 0;
463 
464  protected: virtual DepthCameraPtr CreateDepthCameraImpl(unsigned int _id,
465  const std::string &_name) = 0;
466 
471  unsigned int /*_id*/, const std::string &/*_name*/)
472  {
473  ignerr << "Thermal camera not supported by: "
474  << this->Engine()->Name() << std::endl;
475  return ThermalCameraPtr();
476  }
477 
481  protected: virtual GpuRaysPtr CreateGpuRaysImpl(unsigned int /*_id*/,
482  const std::string & /*_name*/)
483  {
484  ignerr << "GpuRays not supported by: "
485  << this->Engine()->Name() << std::endl;
486  return GpuRaysPtr();
487  }
488 
489  protected: virtual VisualPtr CreateVisualImpl(unsigned int _id,
490  const std::string &_name) = 0;
491 
492  protected: virtual ArrowVisualPtr CreateArrowVisualImpl(unsigned int _id,
493  const std::string &_name) = 0;
494 
495  protected: virtual AxisVisualPtr CreateAxisVisualImpl(unsigned int _id,
496  const std::string &_name) = 0;
497 
501  protected: virtual GizmoVisualPtr CreateGizmoVisualImpl(unsigned int,
502  const std::string &)
503  {
504  ignerr << "GizmoVisual not supported by: "
505  << this->Engine()->Name() << std::endl;
506  return GizmoVisualPtr();
507  }
508 
509  protected: virtual GeometryPtr CreateBoxImpl(unsigned int _id,
510  const std::string &_name) = 0;
511 
512  protected: virtual GeometryPtr CreateConeImpl(unsigned int _id,
513  const std::string &_name) = 0;
514 
515  protected: virtual GeometryPtr CreateCylinderImpl(unsigned int _id,
516  const std::string &_name) = 0;
517 
518  protected: virtual GeometryPtr CreatePlaneImpl(unsigned int _id,
519  const std::string &_name) = 0;
520 
521  protected: virtual GeometryPtr CreateSphereImpl(unsigned int _id,
522  const std::string &_name) = 0;
523 
524  protected: virtual MeshPtr CreateMeshImpl(unsigned int _id,
525  const std::string &_name,
526  const MeshDescriptor &_desc) = 0;
527 
532  protected: virtual GridPtr CreateGridImpl(unsigned int _id,
533  const std::string &_name) = 0;
534 
539  protected: virtual MarkerPtr CreateMarkerImpl(unsigned int _id,
540  const std::string &_name) = 0;
541 
546  protected: virtual LidarVisualPtr CreateLidarVisualImpl(unsigned int _id,
547  const std::string &_name) = 0;
548 
553  protected: virtual WireBoxPtr CreateWireBoxImpl(unsigned int _id,
554  const std::string &_name) = 0;
555 
560  protected: virtual TextPtr CreateTextImpl(unsigned int _id,
561  const std::string &_name);
562 
563  protected: virtual MaterialPtr CreateMaterialImpl(unsigned int _id,
564  const std::string &_name) = 0;
565 
566  protected: virtual RenderTexturePtr CreateRenderTextureImpl(
567  unsigned int _id, const std::string &_name) = 0;
568 
574  protected: virtual RenderWindowPtr CreateRenderWindowImpl(
575  unsigned int _id, const std::string &_name) = 0;
576 
577  protected: virtual RayQueryPtr CreateRayQueryImpl(
578  unsigned int _id, const std::string &_name) = 0;
579 
585  unsigned int, const std::string &)
586  {
587  ignerr << "ParticleEmitter not supported by: "
588  << this->Engine()->Name() << std::endl;
589  return ParticleEmitterPtr();
590  }
591 
592  protected: virtual LightStorePtr Lights() const = 0;
593 
594  protected: virtual SensorStorePtr Sensors() const = 0;
595 
596  protected: virtual VisualStorePtr Visuals() const = 0;
597 
598  protected: virtual MaterialMapPtr Materials() const = 0;
599 
600  protected: virtual bool LoadImpl() = 0;
601 
602  protected: virtual bool InitImpl() = 0;
603 
604  private: virtual void CreateNodeStore();
605 
606  private: virtual void CreateMaterials();
607 
613  private: void DestroyNodeRecursive(NodePtr _node,
614  std::set<unsigned int> &_nodeIds);
615 
616  protected: unsigned int id;
617 
618  protected: std::string name;
619 
620  protected: common::Time IGN_DEPRECATED(4) simTime;
621 
622  protected: std::chrono::steady_clock::duration time =
623  std::chrono::steady_clock::duration::zero();
624 
625  protected: bool loaded;
626 
627  protected: bool initialized;
628 
630  protected: math::Color backgroundColor;
631 
639  protected: std::array<math::Color, 4> gradientBackgroundColor;
640 
642  protected: bool isGradientBackgroundColor = false;
643 
644  private: unsigned int nextObjectId;
645 
646  private: NodeStorePtr nodes;
647  };
648  }
649  }
650 }
651 #endif
shared_ptr< ParticleEmitter > ParticleEmitterPtr
Definition: RenderTypes.hh:174
Describes how a Mesh should be loaded.
Definition: MeshDescriptor.hh:44
T endl(T... args)
STL namespace.
virtual GpuRaysPtr CreateGpuRaysImpl(unsigned int, const std::string &)
Implementation for creating GpuRays sensor.
Definition: BaseScene.hh:481
shared_ptr< GizmoVisual > GizmoVisualPtr
Definition: RenderTypes.hh:126
virtual GizmoVisualPtr CreateGizmoVisualImpl(unsigned int, const std::string &)
Implementation for creating a GizmoVisual.
Definition: BaseScene.hh:501
STL class.
Manages a single scene-graph. This class updates scene-wide properties and holds the root scene node...
Definition: Scene.hh:48
std::string name
Definition: BaseScene.hh:618
Definition: BaseScene.hh:36
shared_ptr< ThermalCamera > ThermalCameraPtr
Definition: RenderTypes.hh:106
STL class.
#define ignerr
STL class.
shared_ptr< GpuRays > GpuRaysPtr
Definition: RenderTypes.hh:110
virtual ParticleEmitterPtr CreateParticleEmitterImpl(unsigned int, const std::string &)
Implementation for creating a ParticleEmitter.
Definition: BaseScene.hh:584
unsigned int id
Definition: BaseScene.hh:616
Represents a surface material of a Geometry.
Definition: Material.hh:47
virtual ThermalCameraPtr CreateThermalCameraImpl(unsigned int, const std::string &)
Implementation for creating a thermal camera.
Definition: BaseScene.hh:470