ParticleEmitter.hh
Go to the documentation of this file.
1 /*
2  * Copyright 2021 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 SDF_PARTICLE_EMITTER_HH_
18 #define SDF_PARTICLE_EMITTER_HH_
19 
20 #include <memory>
21 #include <string>
22 
23 #include <ignition/math/Pose3.hh>
24 #include <ignition/math/Vector3.hh>
25 #include "sdf/Material.hh"
26 #include "sdf/SemanticPose.hh"
27 #include "sdf/Types.hh"
28 #include "sdf/sdf_config.h"
29 #include "sdf/system_util.hh"
30 
31 namespace sdf
32 {
33  // Inline bracket to help doxygen filtering.
34  inline namespace SDF_VERSION_NAMESPACE {
35  // Forward declarations.
36  struct PoseRelativeToGraph;
37 
40  // Developer note: Make sure to update emitterTypeStrs in the source
41  // file when changing this enum.
43  {
45  POINT = 0,
46 
48  BOX = 1,
49 
51  CYLINDER = 2,
52 
54  ELLIPSOID = 3,
55  };
56 
61  {
63  public: ParticleEmitter();
64 
71  public: Errors Load(ElementPtr _sdf);
72 
77  public: std::string Name() const;
78 
83  public: void SetName(const std::string &_name);
84 
89  public: ParticleEmitterType Type() const;
90 
93  public: void SetType(const ParticleEmitterType _type);
94 
101  public: bool SetType(const std::string &_typeStr);
102 
105  public: std::string TypeStr() const;
106 
110  public: bool Emitting() const;
111 
115  public: void SetEmitting(bool _emitting);
116 
120  public: double Duration() const;
121 
125  public: void SetDuration(double _duration);
126 
130  public: double Lifetime() const;
131 
136  public: void SetLifetime(double _duration);
137 
140  public: double Rate() const;
141 
145  public: void SetRate(double _rate);
146 
150  public: double ScaleRate() const;
151 
156  public: void SetScaleRate(double _scaleRate);
157 
160  public: double MinVelocity() const;
161 
165  public: void SetMinVelocity(double _vel);
166 
169  public: double MaxVelocity() const;
170 
174  public: void SetMaxVelocity(double _vel);
175 
177  // Default value is (1, 1, 1).
178  // Note that the interpretation of the emitter area varies
179  // depending on the emmiter type:
180  // - point: The area is ignored.
181  // - box: The area is interpreted as width X height X depth.
182  // - cylinder: The area is interpreted as the bounding box of the
183  // cylinder. The cylinder is oriented along the Z-axis.
184  // - ellipsoid: The area is interpreted as the bounding box of an
185  // ellipsoid shaped area, i.e. a sphere or
186  // squashed-sphere area. The parameters are again
187  // identical to EM_BOX, except that the dimensions
188  // describe the widest points along each of the axes.
190  public: ignition::math::Vector3d Size() const;
191 
197  public: void SetSize(const ignition::math::Vector3d &_size);
198 
201  public: ignition::math::Vector3d ParticleSize() const;
202 
207  public: void SetParticleSize(const ignition::math::Vector3d &_size);
208 
215  public: ignition::math::Color ColorStart() const;
216 
220  public: void SetColorStart(const ignition::math::Color &_colorStart);
221 
228  public: ignition::math::Color ColorEnd() const;
229 
233  public: void SetColorEnd(const ignition::math::Color &_colorEnd);
234 
243  public: std::string ColorRangeImage() const;
244 
248  public: void SetColorRangeImage(const std::string &_image);
249 
252  public: std::string Topic() const;
253 
256  public: void SetTopic(const std::string &_topic);
257 
262  public: float ScatterRatio() const;
263 
267  public: void SetScatterRatio(float _ratio);
268 
273  public: const ignition::math::Pose3d &RawPose() const;
274 
278  public: void SetRawPose(const ignition::math::Pose3d &_pose);
279 
284  public: const std::string &PoseRelativeTo() const;
285 
290  public: void SetPoseRelativeTo(const std::string &_frame);
291 
295 
299  public: sdf::ElementPtr Element() const;
300 
305  public: const sdf::Material *Material() const;
306 
309  public: void SetMaterial(const sdf::Material &_material);
310 
313  public: const std::string &FilePath() const;
314 
317  public: void SetFilePath(const std::string &_filePath);
318 
323  private: void SetXmlParentName(const std::string &_xmlParentName);
324 
329  private: void SetPoseRelativeToGraph(
331 
335  friend class Link;
336 
338  IGN_UTILS_IMPL_PTR(dataPtr)
339  };
340  }
341 }
342 #endif
This class contains visual material properties.
Definition: Material.hh:46
A description of a particle emitter, which can be attached to a link.
Definition: ParticleEmitter.hh:61
const std::string & PoseRelativeTo() const
Get the name of the coordinate frame relative to which this emitter's pose is expressed.
bool Emitting() const
Get whether the particle emitter should run (emit particles).
void SetRawPose(const ignition::math::Pose3d &_pose)
Set the pose of the particle emitter object.
sdf::SemanticPose SemanticPose() const
Get SemanticPose object of this object to aid in resolving poses.
double Rate() const
Get the number of particles per second that should be emitted.
void SetLifetime(double _duration)
Set the number of seconds each particle will 'live' for.
void SetColorEnd(const ignition::math::Color &_colorEnd)
Set the end color for all particles emitted.
void SetMinVelocity(double _vel)
Set the minimum velocity for each particle.
std::string ColorRangeImage() const
Get the path to the color image used as an affector.
void SetRate(double _rate)
Set the number of particles per second that should be emitted.
void SetColorStart(const ignition::math::Color &_colorStart)
Set the starting color for all particles emitted.
void SetPoseRelativeTo(const std::string &_frame)
Set the name of the coordinate frame relative to which this emitter's pose is expressed.
void SetScatterRatio(float _ratio)
Set the particle scatter ratio.
ignition::math::Vector3d ParticleSize() const
Get the size of a particle in meters.
void SetColorRangeImage(const std::string &_image)
Set the path to the color image used as an affector.
double MaxVelocity() const
Get the maximum velocity for each particle.
void SetType(const ParticleEmitterType _type)
Set the type of the particle emitter.
double Lifetime() const
Get the number of seconds each particle will 'live' for before being destroyed.
std::string Topic() const
Get the topic used to update the particle emitter properties.
double Duration() const
Get the number of seconds the emitter is active.
void SetTopic(const std::string &_topic)
Set the topic used to update the particle emitter properties.
void SetParticleSize(const ignition::math::Vector3d &_size)
Set the size of a particle in meters.
ignition::math::Color ColorEnd() const
Get the end color for all particles emitted.
void SetMaxVelocity(double _vel)
Set the maximum velocity for each particle.
std::string Name() const
Get the name of the particle emitter.
void SetDuration(double _duration)
Set the number of seconds the emitter is active.
double ScaleRate() const
Get the amount by which to scale the particles in both x and y direction per second.
const ignition::math::Pose3d & RawPose() const
Get the pose of the particle emitter.
double MinVelocity() const
Get the minimum velocity for each particle.
bool SetType(const std::string &_typeStr)
Set the type of the particle emitter.
const sdf::Material * Material() const
Get a pointer to the emitter's material properties.
void SetEmitting(bool _emitting)
Set whether the particle emitter is running, emitting particles.
const std::string & FilePath() const
The path to the file where this element was loaded from.
Errors Load(ElementPtr _sdf)
Load the particle emitter based on an element pointer.
void SetScaleRate(double _scaleRate)
Set the amount by which to scale the particles in both x and y direction per second.
void SetFilePath(const std::string &_filePath)
Set the path to the file where this element was loaded from.
void SetSize(const ignition::math::Vector3d &_size)
Set the size of the emitter where the particles are sampled.
ParticleEmitterType Type() const
Get the type of the particle emitter.
ParticleEmitter()
Default constructor.
sdf::ElementPtr Element() const
Get a pointer to the SDF element that was used during load.
float ScatterRatio() const
Get the particle scatter ratio.
void SetMaterial(const sdf::Material &_material)
Set the emitter's material.
ignition::math::Color ColorStart() const
Gets the starting color for all particles emitted.
void SetName(const std::string &_name)
Set the name of the particle emitter.
ignition::math::Vector3d Size() const
Get the size of the emitter where the particles are sampled.
std::string TypeStr() const
Get the particle emitter type as a string.
Definition: Collision.hh:39
SemanticPose is a data structure that can be used by different DOM objects to resolve poses on a Pose...
Definition: SemanticPose.hh:55
std::vector< Error > Errors
A vector of Error.
Definition: Types.hh:106
ParticleEmitterType
The set of particle emitter types.
Definition: ParticleEmitter.hh:43
std::shared_ptr< Element > ElementPtr
Definition: Element.hh:54
namespace for Simulation Description Format parser
Definition: Actor.hh:34
#define SDFORMAT_VISIBLE
Use to represent "symbol visible" if supported.
Definition: system_util.hh:41