Ignition Rendering

API Reference

5.0.0
BaseLidarVisual.hh
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2020 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_BASELIDARVISUAL_HH_
18 #define IGNITION_RENDERING_BASELIDARVISUAL_HH_
19 
20 #include <vector>
21 
26 
27 namespace ignition
28 {
29  namespace rendering
30  {
31  inline namespace IGNITION_RENDERING_VERSION_NAMESPACE {
33  template <class T>
35  public virtual LidarVisual,
36  public virtual T
37  {
38  // Documentation inherited
39  protected: BaseLidarVisual();
40 
41  // Documentation inherited
42  public: virtual ~BaseLidarVisual();
43 
44  // Documentation inherited
45  public: virtual void PreRender() override;
46 
47  // Documentation inherited
48  public: virtual void Destroy() override;
49 
50  // Documentation inherited
51  public: virtual void ClearPoints() override;
52 
53  // Documentation inherited
54  public: virtual void SetPoints(
55  const std::vector<double> &_points) override;
56 
57  // Documentation inherited
58  public: virtual void SetPoints(const std::vector<double> &_points,
60  override;
61 
62  // Documentation inherited
63  public: virtual void Update() override;
64 
65  // Documentation inherited
66  public: virtual void Init() override;
67 
68  // Documentation inherited
69  public: virtual void SetMinVerticalAngle(
70  double _minVerticalAngle) override;
71 
72  // Documentation inherited
73  public: virtual double MinVerticalAngle() const override;
74 
75  // Documentation inherited
76  public: virtual void SetMaxVerticalAngle(
77  double _maxVerticalAngle) override;
78 
79  // Documentation inherited
80  public: virtual double MaxVerticalAngle() const override;
81 
82  // Documentation inherited
83  public: virtual void SetMinHorizontalAngle(
84  double _minHorizontalAngle) override;
85 
86  // Documentation inherited
87  public: virtual double MinHorizontalAngle() const override;
88 
89  // Documentation inherited
90  public: virtual void SetMaxHorizontalAngle(
91  double _maxHorizontalAngle) override;
92 
93  // Documentation inherited
94  public: virtual double MaxHorizontalAngle() const override;
95 
96  // Documentation inherited
97  public: virtual void SetVerticalRayCount(
98  unsigned int _verticalRayCount) override;
99 
100  // Documentation inherited
101  public: virtual unsigned int VerticalRayCount() const override;
102 
103  // Documentation inherited
104  public: virtual void SetHorizontalRayCount(
105  unsigned int _horizontalRayCount) override;
106 
107  // Documentation inherited
108  public: virtual unsigned int HorizontalRayCount() const override;
109 
110  // Documentation inherited
111  public: virtual void SetMinRange(double _minRange) override;
112 
113  // Documentation inherited
114  public: virtual double MinRange() const override;
115 
116  // Documentation inherited
117  public: virtual void SetMaxRange(double _maxRange) override;
118 
119  // Documentation inherited
120  public: virtual double MaxRange() const override;
121 
122  // Documentation inherited
123  public: virtual void SetOffset(
124  const ignition::math::Pose3d _offset) override;
125 
126  // Documentation inherited
127  public: virtual ignition::math::Pose3d Offset() const override;
128 
129  // Documentation inherited
130  public: virtual unsigned int PointCount() const override;
131 
132  // Documentation inherited
133  public: virtual std::vector<double> Points() const override;
134 
135  // Documentation inherited
136  public: virtual void SetType(const LidarVisualType _type) override;
137 
138  // Documentation inherited
139  public: virtual LidarVisualType Type() const override;
140 
142  public: virtual void CreateMaterials();
143 
144  // Documentation inherited
145  public: virtual void SetDisplayNonHitting(bool _display) override;
146 
147  // Documentation inherited
148  public: virtual bool DisplayNonHitting() const override;
149 
151  protected: double minVerticalAngle = 0;
152 
154  protected: double maxVerticalAngle = 0;
155 
157  protected: unsigned int verticalCount = 1u;
158 
160  protected: double verticalAngleStep = 0;
161 
163  protected: double minHorizontalAngle = 0;
164 
166  protected: double maxHorizontalAngle = 0;
167 
169  protected: unsigned int horizontalCount = 1u;
170 
172  protected: double horizontalAngleStep = 0;
173 
175  protected: double minRange = 0;
176 
178  protected: double maxRange = 0;
179 
181  protected: bool displayNonHitting = true;
182 
185 
187  protected: LidarVisualType lidarVisualType =
189  };
190 
192  // BaseLidarVisual
194  template <class T>
196  {
197  }
198 
200  template <class T>
202  {
203  }
204 
206  template <class T>
208  {
209  T::PreRender();
210  }
211 
213  template <class T>
215  {
216  T::Destroy();
217  }
218 
220  template <class T>
222  {
223  // no op
224  }
225 
227  template <class T>
228  unsigned int BaseLidarVisual<T>::PointCount() const
229  {
230  return 0u;
231  }
232 
234  template <class T>
236  {
238  return d;
239  }
240 
242  template <class T>
244  {
245  // no op
246  }
247 
249  template <class T>
251  {
252  // no op
253  }
254 
256  template <class T>
259  {
260  // no op
261  }
262 
264  template <class T>
266  {
267  T::Init();
268  this->CreateMaterials();
269  }
270 
272  template <class T>
274  double _minVerticalAngle)
275  {
276  this->minVerticalAngle = _minVerticalAngle;
277  }
278 
280  template <class T>
282  {
283  return this->minVerticalAngle;
284  }
285 
287  template <class T>
289  double _maxVerticalAngle)
290  {
291  this->maxVerticalAngle = _maxVerticalAngle;
292  }
293 
295  template <class T>
297  {
298  return this->maxVerticalAngle;
299  }
300 
302  template <class T>
304  unsigned int _verticalRayCount)
305  {
306  if (_verticalRayCount == 0)
307  {
308  ignwarn << "Cannot have zero vertical rays. Setting value to 1."
309  << std::endl;
310  this->verticalCount = 1;
311  }
312  else
313  {
314  this->verticalCount = _verticalRayCount;
315  }
316  }
317 
319  template <class T>
321  {
322  return this->verticalCount;
323  }
324 
326  template <class T>
328  double _minHorizontalAngle)
329  {
330  this->minHorizontalAngle = _minHorizontalAngle;
331  }
332 
334  template <class T>
336  {
337  return this->minHorizontalAngle;
338  }
339 
341  template <class T>
343  double _maxHorizontalAngle)
344  {
345  this->maxHorizontalAngle = _maxHorizontalAngle;
346  }
347 
349  template <class T>
351  {
352  return this->maxHorizontalAngle;
353  }
354 
356  template <class T>
358  unsigned int _horizontalRayCount)
359  {
360  if (_horizontalRayCount == 0)
361  {
362  ignwarn << "Cannot have zero horizontal rays. Setting value to 1."
363  << std::endl;
364  this->horizontalCount = 1u;
365  }
366  else
367  {
368  this->horizontalCount = _horizontalRayCount;
369  }
370  }
371 
373  template <class T>
375  {
376  return this->horizontalCount;
377  }
378 
380  template <class T>
381  void BaseLidarVisual<T>::SetMinRange(double _minRange)
382  {
383  this->minRange = _minRange;
384  }
385 
387  template <class T>
389  {
390  return this->minRange;
391  }
392 
394  template <class T>
395  void BaseLidarVisual<T>::SetMaxRange(double _maxRange)
396  {
397  this->maxRange = _maxRange;
398  }
399 
401  template <class T>
403  {
404  return this->maxRange;
405  }
406 
408  template <class T>
410  {
411  this->offset = _offset;
412  }
413 
415  template <class T>
417  {
418  return this->offset;
419  }
420 
422  template <class T>
424  {
425  this->lidarVisualType = _type;
426  }
427 
429  template <class T>
431  {
432  return this->lidarVisualType;
433  }
434 
436  template <class T>
438  {
439  this->displayNonHitting = _display;
440  }
441 
443  template <class T>
445  {
446  return this->displayNonHitting;
447  }
448 
450  template <class T>
452  {
453  MaterialPtr mtl;
454 
455  if (!this->Scene()->MaterialRegistered("Lidar/BlueStrips"))
456  {
457  mtl = this->Scene()->CreateMaterial("Lidar/BlueStrips");
458  mtl->SetAmbient(0.0, 0.0, 1.0);
459  mtl->SetDiffuse(0.0, 0.0, 1.0);
460  mtl->SetEmissive(0.0, 0.0, 1.0);
461  mtl->SetTransparency(0.4);
462  mtl->SetCastShadows(false);
463  mtl->SetReceiveShadows(false);
464  mtl->SetLightingEnabled(false);
465  mtl->SetMetalness(0.0f);
466  mtl->SetReflectivity(0.0);
467  }
468 
469  if (!this->Scene()->MaterialRegistered("Lidar/LightBlueStrips"))
470  {
471  mtl = this->Scene()->CreateMaterial("Lidar/LightBlueStrips");
472  mtl->SetAmbient(0.0, 0.0, 1.0);
473  mtl->SetDiffuse(0.0, 0.0, 1.0);
474  mtl->SetEmissive(0.0, 0.0, 1.0);
475  mtl->SetTransparency(0.8);
476  mtl->SetCastShadows(false);
477  mtl->SetReceiveShadows(false);
478  mtl->SetLightingEnabled(false);
479  mtl->SetMetalness(0.0f);
480  mtl->SetReflectivity(0.0);
481  }
482 
483  if (!this->Scene()->MaterialRegistered("Lidar/TransBlack"))
484  {
485  mtl = this->Scene()->CreateMaterial("Lidar/TransBlack");
486  mtl->SetAmbient(0.0, 0.0, 0.0);
487  mtl->SetDiffuse(0.0, 0.0, 0.0);
488  mtl->SetEmissive(0.0, 0.0, 0.0);
489  mtl->SetTransparency(0.4);
490  mtl->SetCastShadows(false);
491  mtl->SetReceiveShadows(false);
492  mtl->SetLightingEnabled(false);
493  mtl->SetMetalness(0.5f);
494  mtl->SetReflectivity(0.2);
495  }
496 
497  if (!this->Scene()->MaterialRegistered("Lidar/BlueRay"))
498  {
499  mtl = this->Scene()->CreateMaterial("Lidar/BlueRay");
500  mtl->SetAmbient(0.0, 0.0, 1.0);
501  mtl->SetDiffuse(0.0, 0.0, 1.0);
502  mtl->SetEmissive(0.0, 0.0, 1.0);
503  mtl->SetSpecular(0.0, 0.0, 1.0);
504  mtl->SetTransparency(0.0);
505  mtl->SetCastShadows(false);
506  mtl->SetReceiveShadows(false);
507  mtl->SetLightingEnabled(false);
508  mtl->SetMetalness(0.1f);
509  mtl->SetReflectivity(0.2);
510  }
511  return;
512  }
513  }
514  }
515 }
516 #endif
virtual void SetMinHorizontalAngle(double _minHorizontalAngle) override
Set minimum horizontal angle.
Definition: BaseLidarVisual.hh:327
virtual void SetPoints(const std::vector< double > &_points) override
Set lidar points to be visualised.
Definition: BaseLidarVisual.hh:250
virtual LidarVisualType Type() const override
Get the type for lidar visual.
Definition: BaseLidarVisual.hh:430
virtual void Destroy() override
Destroy any resources associated with this object. Invoking any other functions after destroying an o...
Definition: BaseLidarVisual.hh:214
virtual double MinHorizontalAngle() const override
Get minimum horizontal angle.
Definition: BaseLidarVisual.hh:335
virtual void Init() override
Definition: BaseLidarVisual.hh:265
virtual void SetMaxRange(double _maxRange) override
Set maximum range of lidar rays.
Definition: BaseLidarVisual.hh:395
virtual void SetDisplayNonHitting(bool _display) override
Set if non-hitting rays will be displayed (this does not work for TRIANGLE_STRIPS visual) ...
Definition: BaseLidarVisual.hh:437
virtual ~BaseLidarVisual()
Definition: BaseLidarVisual.hh:201
virtual void SetMaxVerticalAngle(double _maxVerticalAngle) override
Set maximum vertical angle.
Definition: BaseLidarVisual.hh:288
T endl(T... args)
virtual double MaxHorizontalAngle() const override
Get maximum horizontal angle.
Definition: BaseLidarVisual.hh:350
static const Pose3< T > Zero
virtual void SetMinRange(double _minRange) override
Set minimum range of lidar rays.
Definition: BaseLidarVisual.hh:381
virtual void SetType(const LidarVisualType _type) override
Set type for lidar visual.
Definition: BaseLidarVisual.hh:423
virtual void SetMaxHorizontalAngle(double _maxHorizontalAngle) override
Set maximum horizontal angle.
Definition: BaseLidarVisual.hh:342
virtual void SetMinVerticalAngle(double _minVerticalAngle) override
Set minimum vertical angle.
Definition: BaseLidarVisual.hh:273
virtual void SetVerticalRayCount(unsigned int _verticalRayCount) override
Set number of vertical rays.
Definition: BaseLidarVisual.hh:303
virtual double MaxRange() const override
Get maximum range of lidar rays.
Definition: BaseLidarVisual.hh:402
virtual double MinVerticalAngle() const override
Get minimum vertical angle.
Definition: BaseLidarVisual.hh:281
Manages a single scene-graph. This class updates scene-wide properties and holds the root scene node...
Definition: Scene.hh:49
virtual unsigned int VerticalRayCount() const override
Get number of vertical rays.
Definition: BaseLidarVisual.hh:320
virtual void SetOffset(const ignition::math::Pose3d _offset) override
Set offset of visual.
Definition: BaseLidarVisual.hh:409
virtual void PreRender() override
Prepare this object and any of its children for rendering. This should be called for each object in a...
Definition: BaseLidarVisual.hh:207
BaseLidarVisual()
Definition: BaseLidarVisual.hh:195
virtual bool DisplayNonHitting() const override
Get if non-hitting rays will be displayed.
Definition: BaseLidarVisual.hh:444
virtual void SetHorizontalRayCount(unsigned int _horizontalRayCount) override
Set number of horizontal rays.
Definition: BaseLidarVisual.hh:357
virtual MaterialPtr CreateMaterial(const std::string &_name="")=0
Create new material with the given name. Created material will have default properties.
virtual unsigned int HorizontalRayCount() const override
Get number of horizontal rays.
Definition: BaseLidarVisual.hh:374
LidarVisualType
Enum for LidarVisual types.
Definition: LidarVisual.hh:37
virtual unsigned int PointCount() const override
Get number of points in laser data.
Definition: BaseLidarVisual.hh:228
virtual ignition::math::Pose3d Offset() const override
Get offset of visual.
Definition: BaseLidarVisual.hh:416
virtual void ClearPoints() override
Clear the points of the lidar visual.
Definition: BaseLidarVisual.hh:221
virtual double MaxVerticalAngle() const override
Get minimum vertical angle.
Definition: BaseLidarVisual.hh:296
virtual std::vector< double > Points() const override
Get the points in laser data.
Definition: BaseLidarVisual.hh:235
virtual double MinRange() const override
Get minimum range of lidar rays.
Definition: BaseLidarVisual.hh:388
Triangle strips visual.
Definition: LidarVisual.hh:49
Base implementation of a Lidar Visual.
Definition: BaseLidarVisual.hh:34
virtual void Update() override
Update the Visual.
Definition: BaseLidarVisual.hh:243
virtual void CreateMaterials()
Create predefined materials for lidar visual.
Definition: BaseLidarVisual.hh:451
A LidarVisual geometry class. The visual appearance is based on the type specified.
Definition: LidarVisual.hh:55
#define ignwarn