Ignition Rendering

API Reference

4.2.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 
26 
30 
31 namespace ignition
32 {
33  namespace rendering
34  {
35  inline namespace IGNITION_RENDERING_VERSION_NAMESPACE {
36  //
37  class IGNITION_RENDERING_VISIBLE BaseScene :
39  public std::enable_shared_from_this<BaseScene>,
41  public virtual Scene
42  {
43  protected: BaseScene(unsigned int _id, const std::string &_name);
44 
45  public: virtual ~BaseScene();
46 
47  public: virtual void Load() override;
48 
49  public: virtual void Init() override;
50 
51  public: virtual void Fini() override;
52 
53  public: virtual bool IsLoaded() const;
54 
55  public: virtual bool IsInitialized() const override;
56 
57  public: virtual unsigned int Id() const override;
58 
59  public: virtual std::string Name() const override;
60 
61  public: virtual void IGN_DEPRECATED(4)
62  SetSimTime(const common::Time &_time) override;
63 
64  public: virtual common::Time IGN_DEPRECATED(4) SimTime() const override;
65 
66  public: virtual std::chrono::steady_clock::duration Time()
67  const override;
68 
69  public: virtual void SetTime(
70  const std::chrono::steady_clock::duration &_time) override;
71 
72  public: virtual void SetAmbientLight(double _r, double _g, double _b,
73  double _a = 1.0) override;
74 
75  public: virtual void SetAmbientLight(const math::Color &_color)
76  override = 0;
77 
78  public: virtual math::Color BackgroundColor() const override;
79 
80  public: virtual void SetBackgroundColor(double _r, double _g, double _b,
81  double _a = 1.0) override;
82 
83  public: virtual void SetBackgroundColor(const math::Color &_color)
84  override;
85 
86  // Documentation inherited.
87  public: virtual bool IsGradientBackgroundColor() const override;
88 
89  // Documentation inherited.
90  public: virtual std::array<math::Color, 4> GradientBackgroundColor()
91  const override;
92 
93  // Documentation inherited.
94  public: virtual void SetGradientBackgroundColor(
95  const std::array<math::Color, 4> &_colors) override;
96 
97  // Documentation inherited.
98  public: virtual void RemoveGradientBackgroundColor() override;
99 
100  public: virtual unsigned int NodeCount() const override;
101 
102  public: virtual bool HasNode(ConstNodePtr _node) const override;
103 
104  public: virtual bool HasNodeId(unsigned int _id) const override;
105 
106  public: virtual bool HasNodeName(const std::string &_name) const override;
107 
108  public: virtual NodePtr NodeById(unsigned int _id) const override;
109 
110  public: virtual NodePtr NodeByName(const std::string &_name) const
111  override;
112 
113  public: virtual NodePtr NodeByIndex(unsigned int _index) const override;
114 
115  // Documentation inherited.
116  public: virtual void DestroyNode(NodePtr _node, bool _recursive = false)
117  override;
118 
119  public: virtual void DestroyNodeById(unsigned int _id) override;
120 
121  public: virtual void DestroyNodeByName(const std::string &_name) override;
122 
123  public: virtual void DestroyNodeByIndex(unsigned int _index) override;
124 
125  public: virtual void DestroyNodes() override;
126 
127  public: virtual unsigned int LightCount() const override;
128 
129  public: virtual bool HasLight(ConstLightPtr _light) const override;
130 
131  public: virtual bool HasLightId(unsigned int _id) const override;
132 
133  public: virtual bool HasLightName(const std::string &_name) const
134  override;
135 
136  public: virtual LightPtr LightById(unsigned int _id) const override;
137 
138  public: virtual LightPtr LightByName(const std::string &_name) const
139  override;
140 
141  public: virtual LightPtr LightByIndex(unsigned int _index) const override;
142 
143  // Documentation inherited.
144  public: virtual void DestroyLight(LightPtr _light,
145  bool _recursive = false) override;
146 
147  public: virtual void DestroyLightById(unsigned int _id) override;
148 
149  public: virtual void DestroyLightByName(const std::string &_name)
150  override;
151 
152  public: virtual void DestroyLightByIndex(unsigned int _index) override;
153 
154  public: virtual void DestroyLights() override;
155 
156  public: virtual unsigned int SensorCount() const override;
157 
158  public: virtual bool HasSensor(ConstSensorPtr _sensor) const override;
159 
160  public: virtual bool HasSensorId(unsigned int _id) const override;
161 
162  public: virtual bool HasSensorName(const std::string &_name) const
163  override;
164 
165  public: virtual SensorPtr SensorById(unsigned int _id) const override;
166 
167  public: virtual SensorPtr SensorByName(const std::string &_name) const
168  override;
169 
170  public: virtual SensorPtr SensorByIndex(unsigned int _index) const
171  override;
172 
173  // Documentation inherited.
174  public: virtual void DestroySensor(SensorPtr _sensor,
175  bool _recursive = false) override;
176 
177  public: virtual void DestroySensorById(unsigned int _id) override;
178 
179  public: virtual void DestroySensorByName(const std::string &_name)
180  override;
181 
182  public: virtual void DestroySensorByIndex(unsigned int _index) override;
183 
184  public: virtual void DestroySensors() override;
185 
186  public: virtual unsigned int VisualCount() const override;
187 
188  public: virtual bool HasVisual(ConstVisualPtr _visual) const override;
189 
190  public: virtual bool HasVisualId(unsigned int _id) const override;
191 
192  public: virtual bool HasVisualName(const std::string &_name) const
193  override;
194 
195  public: virtual VisualPtr VisualById(unsigned int _id) const override;
196 
197  public: virtual VisualPtr VisualByName(const std::string &_name) const
198  override;
199 
200  public: virtual VisualPtr VisualByIndex(unsigned int _index) const
201  override;
202 
203  // Documentation inherited
204  public: virtual VisualPtr VisualAt(const CameraPtr &_camera,
205  const ignition::math::Vector2i &_mousePos) override;
206 
207  // Documentation inherited.
208  public: virtual void DestroyVisual(VisualPtr _visual,
209  bool _recursive = false) override;
210 
211  public: virtual void DestroyVisualById(unsigned int _id) override;
212 
213  public: virtual void DestroyVisualByName(const std::string &_name)
214  override;
215 
216  public: virtual void DestroyVisualByIndex(unsigned int _index) override;
217 
218  public: virtual void DestroyVisuals() override;
219 
220  public: virtual bool MaterialRegistered(const std::string &_name) const
221  override;
222 
223  public: virtual MaterialPtr Material(const std::string &_name) const
224  override;
225 
226  public: virtual void RegisterMaterial(const std::string &_name,
227  MaterialPtr _material) override;
228 
229  public: virtual void UnregisterMaterial(const std::string &_name)
230  override;
231 
232  public: virtual void UnregisterMaterials() override;
233 
234  // Documentation inherited
235  public: virtual void DestroyMaterial(MaterialPtr _material) override;
236 
237  // Documentation inherited
238  public: virtual void DestroyMaterials() override;
239 
240  public: virtual DirectionalLightPtr CreateDirectionalLight() override;
241 
242  public: virtual DirectionalLightPtr CreateDirectionalLight(
243  unsigned int _id) override;
244 
245  public: virtual DirectionalLightPtr CreateDirectionalLight(
246  const std::string &_name) override;
247 
248  public: virtual DirectionalLightPtr CreateDirectionalLight(
249  unsigned int _id, const std::string &_name) override;
250 
251  public: virtual PointLightPtr CreatePointLight() override;
252 
253  public: virtual PointLightPtr CreatePointLight(unsigned int _id) override;
254 
255  public: virtual PointLightPtr CreatePointLight(const std::string &_name)
256  override;
257 
258  public: virtual PointLightPtr CreatePointLight(unsigned int _id,
259  const std::string &_name) override;
260 
261  public: virtual SpotLightPtr CreateSpotLight() override;
262 
263  public: virtual SpotLightPtr CreateSpotLight(unsigned int _id) override;
264 
265  public: virtual SpotLightPtr CreateSpotLight(const std::string &_name)
266  override;
267 
268  public: virtual SpotLightPtr CreateSpotLight(unsigned int _id,
269  const std::string &_name) override;
270 
271  public: virtual CameraPtr CreateCamera() override;
272 
273  public: virtual CameraPtr CreateCamera(unsigned int _id) override;
274 
275  public: virtual CameraPtr CreateCamera(const std::string &_name) override;
276 
277  public: virtual CameraPtr CreateCamera(unsigned int _id,
278  const std::string &_name) override;
279 
280  public: virtual DepthCameraPtr CreateDepthCamera() override;
281 
282  public: virtual DepthCameraPtr CreateDepthCamera(const unsigned int _id)
283  override;
284 
285  public: virtual DepthCameraPtr CreateDepthCamera(
286  const std::string &_name) override;
287 
288  public: virtual DepthCameraPtr CreateDepthCamera(const unsigned int _id,
289  const std::string &_name) override;
290 
291  // Documentation inherited.
292  public: virtual ThermalCameraPtr CreateThermalCamera() override;
293 
294  // Documentation inherited.
295  public: virtual ThermalCameraPtr CreateThermalCamera(
296  const unsigned int _id) override;
297 
298  // Documentation inherited.
299  public: virtual ThermalCameraPtr CreateThermalCamera(
300  const std::string &_name) override;
301 
302  // Documentation inherited.
303  public: virtual ThermalCameraPtr CreateThermalCamera(
304  const unsigned int _id, const std::string &_name) override;
305 
306  // Documentation inherited.
307  public: virtual GpuRaysPtr CreateGpuRays() override;
308 
309  // Documentation inherited.
310  public: virtual GpuRaysPtr CreateGpuRays(const unsigned int _id) override;
311 
312  // Documentation inherited.
313  public: virtual GpuRaysPtr CreateGpuRays(
314  const std::string &_name) override;
315 
316  // Documentation inherited.
317  public: virtual GpuRaysPtr CreateGpuRays(const unsigned int _id,
318  const std::string &_name) override;
319 
320  public: virtual VisualPtr CreateVisual() override;
321 
322  public: virtual VisualPtr CreateVisual(unsigned int _id) override;
323 
324  public: virtual VisualPtr CreateVisual(const std::string &_name) override;
325 
326  public: virtual VisualPtr CreateVisual(unsigned int _id,
327  const std::string &_name) override;
328 
329  public: virtual ArrowVisualPtr CreateArrowVisual() override;
330 
331  public: virtual ArrowVisualPtr CreateArrowVisual(unsigned int _id)
332  override;
333 
334  public: virtual ArrowVisualPtr CreateArrowVisual(
335  const std::string &_name) override;
336 
337  public: virtual ArrowVisualPtr CreateArrowVisual(unsigned int _id,
338  const std::string &_name) override;
339 
340  public: virtual AxisVisualPtr CreateAxisVisual() override;
341 
342  public: virtual AxisVisualPtr CreateAxisVisual(unsigned int _id) override;
343 
344  public: virtual AxisVisualPtr CreateAxisVisual(const std::string &_name)
345  override;
346 
347  public: virtual AxisVisualPtr CreateAxisVisual(unsigned int _id,
348  const std::string &_name) override;
349 
350 
351  // Documentation inherited
352  public: virtual GizmoVisualPtr CreateGizmoVisual() override;
353 
354  // Documentation inherited
355  public: virtual GizmoVisualPtr CreateGizmoVisual(unsigned int _id)
356  override;
357 
358  // Documentation inherited
359  public: virtual GizmoVisualPtr CreateGizmoVisual(const std::string &_name)
360  override;
361 
362  // Documentation inherited
363  public: virtual GizmoVisualPtr CreateGizmoVisual(unsigned int _id,
364  const std::string &_name) override;
365 
366 
367  public: virtual GeometryPtr CreateBox() override;
368 
369  public: virtual GeometryPtr CreateCone() override;
370 
371  public: virtual GeometryPtr CreateCylinder() override;
372 
373  public: virtual GeometryPtr CreatePlane() override;
374 
375  public: virtual GeometryPtr CreateSphere() override;
376 
377  public: virtual MeshPtr CreateMesh(const std::string &_meshName) override;
378 
379  public: virtual MeshPtr CreateMesh(const common::Mesh *_mesh) override;
380 
381  public: virtual MeshPtr CreateMesh(const MeshDescriptor &_desc) override;
382 
383  // Documentation inherited.
384  public: virtual GridPtr CreateGrid() override;
385 
386  // Documentation inherited.
387  public: virtual MarkerPtr CreateMarker() override;
388 
389  // Documentation inherited.
390  public: virtual LidarVisualPtr CreateLidarVisual() override;
391 
392  // Documentation inherited.
393  public: virtual LidarVisualPtr CreateLidarVisual(
394  unsigned int _id) override;
395 
396  // Documentation inherited.
397  public: virtual LidarVisualPtr CreateLidarVisual(
398  const std::string &_name) override;
399 
400  // Documentation inherited.
401  public: virtual LidarVisualPtr CreateLidarVisual(unsigned int _id,
402  const std::string &_name) override;
403 
404  // Documentation inherited.
405  public: virtual WireBoxPtr CreateWireBox() override;
406 
407  // Documentation inherited.
408  public: virtual TextPtr CreateText() override;
409 
410  public: virtual MaterialPtr CreateMaterial(const std::string &_name = "")
411  override;
412 
413  public: virtual MaterialPtr CreateMaterial(
414  const common::Material &_material) override;
415 
416  public: virtual RenderTexturePtr CreateRenderTexture() override;
417 
418  // Documentation inherited.
419  public: virtual RenderWindowPtr CreateRenderWindow() override;
420 
421  public: virtual RayQueryPtr CreateRayQuery() override;
422 
423  // Documentation inherited.
424  public: virtual ParticleEmitterPtr CreateParticleEmitter() override;
425 
426  // Documentation inherited.
427  public: virtual ParticleEmitterPtr CreateParticleEmitter(unsigned int _id)
428  override;
429 
430  // Documentation inherited.
431  public: virtual ParticleEmitterPtr CreateParticleEmitter(
432  const std::string &_name) override;
433 
434  // Documentation inherited.
435  public: virtual ParticleEmitterPtr CreateParticleEmitter(
436  unsigned int _id, const std::string &_name) override;
437 
438  public: virtual void PreRender() override;
439 
440  public: virtual void Clear() override;
441 
442  public: virtual void Destroy() override;
443 
444  protected: virtual unsigned int CreateObjectId();
445 
446  protected: virtual std::string CreateObjectName(unsigned int _id,
447  const std::string &_prefix);
448 
449  protected: virtual bool RegisterLight(LightPtr _light);
450 
451  protected: virtual bool RegisterSensor(SensorPtr _vensor);
452 
453  protected: virtual bool RegisterVisual(VisualPtr _visual);
454 
455  protected: virtual DirectionalLightPtr CreateDirectionalLightImpl(
456  unsigned int _id, const std::string &_name) = 0;
457 
458  protected: virtual PointLightPtr CreatePointLightImpl(unsigned int _id,
459  const std::string &_name) = 0;
460 
461  protected: virtual SpotLightPtr CreateSpotLightImpl(unsigned int _id,
462  const std::string &_name) = 0;
463 
464  protected: virtual CameraPtr CreateCameraImpl(unsigned int _id,
465  const std::string &_name) = 0;
466 
467  protected: virtual DepthCameraPtr CreateDepthCameraImpl(unsigned int _id,
468  const std::string &_name) = 0;
469 
474  unsigned int /*_id*/, const std::string &/*_name*/)
475  {
476  ignerr << "Thermal camera not supported by: "
477  << this->Engine()->Name() << std::endl;
478  return ThermalCameraPtr();
479  }
480 
484  protected: virtual GpuRaysPtr CreateGpuRaysImpl(unsigned int /*_id*/,
485  const std::string & /*_name*/)
486  {
487  ignerr << "GpuRays not supported by: "
488  << this->Engine()->Name() << std::endl;
489  return GpuRaysPtr();
490  }
491 
492  protected: virtual VisualPtr CreateVisualImpl(unsigned int _id,
493  const std::string &_name) = 0;
494 
495  protected: virtual ArrowVisualPtr CreateArrowVisualImpl(unsigned int _id,
496  const std::string &_name) = 0;
497 
498  protected: virtual AxisVisualPtr CreateAxisVisualImpl(unsigned int _id,
499  const std::string &_name) = 0;
500 
504  protected: virtual GizmoVisualPtr CreateGizmoVisualImpl(unsigned int,
505  const std::string &)
506  {
507  ignerr << "GizmoVisual not supported by: "
508  << this->Engine()->Name() << std::endl;
509  return GizmoVisualPtr();
510  }
511 
512  protected: virtual GeometryPtr CreateBoxImpl(unsigned int _id,
513  const std::string &_name) = 0;
514 
515  protected: virtual GeometryPtr CreateConeImpl(unsigned int _id,
516  const std::string &_name) = 0;
517 
518  protected: virtual GeometryPtr CreateCylinderImpl(unsigned int _id,
519  const std::string &_name) = 0;
520 
521  protected: virtual GeometryPtr CreatePlaneImpl(unsigned int _id,
522  const std::string &_name) = 0;
523 
524  protected: virtual GeometryPtr CreateSphereImpl(unsigned int _id,
525  const std::string &_name) = 0;
526 
527  protected: virtual MeshPtr CreateMeshImpl(unsigned int _id,
528  const std::string &_name,
529  const MeshDescriptor &_desc) = 0;
530 
535  protected: virtual GridPtr CreateGridImpl(unsigned int _id,
536  const std::string &_name) = 0;
537 
542  protected: virtual MarkerPtr CreateMarkerImpl(unsigned int _id,
543  const std::string &_name) = 0;
544 
549  protected: virtual LidarVisualPtr CreateLidarVisualImpl(unsigned int _id,
550  const std::string &_name) = 0;
551 
556  protected: virtual WireBoxPtr CreateWireBoxImpl(unsigned int _id,
557  const std::string &_name) = 0;
558 
563  protected: virtual TextPtr CreateTextImpl(unsigned int _id,
564  const std::string &_name);
565 
566  protected: virtual MaterialPtr CreateMaterialImpl(unsigned int _id,
567  const std::string &_name) = 0;
568 
569  protected: virtual RenderTexturePtr CreateRenderTextureImpl(
570  unsigned int _id, const std::string &_name) = 0;
571 
577  protected: virtual RenderWindowPtr CreateRenderWindowImpl(
578  unsigned int _id, const std::string &_name) = 0;
579 
580  protected: virtual RayQueryPtr CreateRayQueryImpl(
581  unsigned int _id, const std::string &_name) = 0;
582 
588  unsigned int, const std::string &)
589  {
590  ignerr << "ParticleEmitter not supported by: "
591  << this->Engine()->Name() << std::endl;
592  return ParticleEmitterPtr();
593  }
594 
595  protected: virtual LightStorePtr Lights() const = 0;
596 
597  protected: virtual SensorStorePtr Sensors() const = 0;
598 
599  protected: virtual VisualStorePtr Visuals() const = 0;
600 
601  protected: virtual MaterialMapPtr Materials() const = 0;
602 
603  protected: virtual bool LoadImpl() = 0;
604 
605  protected: virtual bool InitImpl() = 0;
606 
607  private: virtual void CreateNodeStore();
608 
609  private: virtual void CreateMaterials();
610 
616  private: void DestroyNodeRecursive(NodePtr _node,
617  std::set<unsigned int> &_nodeIds);
618 
619  protected: unsigned int id;
620 
622  protected: std::string name;
624 
625  protected: common::Time IGN_DEPRECATED(4) simTime;
626 
627  protected: std::chrono::steady_clock::duration time =
628  std::chrono::steady_clock::duration::zero();
629 
630  protected: bool loaded;
631 
632  protected: bool initialized;
633 
635  protected: math::Color backgroundColor;
636 
644  protected: std::array<math::Color, 4> gradientBackgroundColor;
645 
647  protected: bool isGradientBackgroundColor = false;
648 
649  private: unsigned int nextObjectId;
650 
651  IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING
652  private: NodeStorePtr nodes;
653  IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING
654  };
655  }
656  }
657 }
658 #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:484
#define IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING
shared_ptr< GizmoVisual > GizmoVisualPtr
Definition: RenderTypes.hh:126
virtual GizmoVisualPtr CreateGizmoVisualImpl(unsigned int, const std::string &)
Implementation for creating a GizmoVisual.
Definition: BaseScene.hh:504
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:622
Definition: BaseScene.hh:37
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:587
unsigned int id
Definition: BaseScene.hh:619
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:473
#define IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING