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 <gz/math/Pose3.hh>
24 #include <gz/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: gz::math::Vector3d Size() const;
191 
197  public: void SetSize(const gz::math::Vector3d &_size);
198 
201  public: gz::math::Vector3d ParticleSize() const;
202 
207  public: void SetParticleSize(const gz::math::Vector3d &_size);
208 
215  public: gz::math::Color ColorStart() const;
216 
220  public: void SetColorStart(const gz::math::Color &_colorStart);
221 
228  public: gz::math::Color ColorEnd() const;
229 
233  public: void SetColorEnd(const gz::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 gz::math::Pose3d &RawPose() const;
274 
278  public: void SetRawPose(const gz::math::Pose3d &_pose);
279 
284  public: const std::string &PoseRelativeTo() const;
285 
290  public: void SetPoseRelativeTo(const std::string &_frame);
291 
294  public: sdf::SemanticPose SemanticPose() const;
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 
324  public: sdf::ElementPtr ToElement() const;
325 
330  private: void SetXmlParentName(const std::string &_xmlParentName);
331 
336  private: void SetPoseRelativeToGraph(
338 
342  friend class Link;
343 
345  IGN_UTILS_IMPL_PTR(dataPtr)
346  };
347  }
348 }
349 #endif
Material.hh
sdf::SDF_VERSION_NAMESPACE::ParticleEmitterType::POINT
@ POINT
A point emitter.
sdf
namespace for Simulation Description Format parser
Definition: Actor.hh:34
sdf::SDF_VERSION_NAMESPACE::ParticleEmitter
A description of a particle emitter, which can be attached to a link.
Definition: ParticleEmitter.hh:60
sdf::SDF_VERSION_NAMESPACE::Element
class IGNITION_SDFORMAT_VISIBLE Element
Definition: Element.hh:50
sdf::SDF_VERSION_NAMESPACE::Material
This class contains visual material properties.
Definition: Material.hh:45
Types.hh
SemanticPose.hh
sdf_config.h
sdf::SDF_VERSION_NAMESPACE::ParticleEmitterType::ELLIPSOID
@ ELLIPSOID
An ellipsoid emitter.
SDFORMAT_VISIBLE
#define SDFORMAT_VISIBLE
Definition: system_util.hh:25
sdf::SDF_VERSION_NAMESPACE::ParticleEmitterType
ParticleEmitterType
Definition: ParticleEmitter.hh:42
sdf::SDF_VERSION_NAMESPACE::ParticleEmitterType::BOX
@ BOX
A box emitter.
sdf::SDF_VERSION_NAMESPACE::SemanticPose
SemanticPose is a data structure that can be used by different DOM objects to resolve poses on a Pose...
Definition: SemanticPose.hh:54
sdf::SDF_VERSION_NAMESPACE::Errors
std::vector< Error > Errors
A vector of Error.
Definition: Types.hh:106
sdf::SDF_VERSION_NAMESPACE::ScopedGraph
Definition: Collision.hh:39
sdf::SDF_VERSION_NAMESPACE::ParticleEmitterType::CYLINDER
@ CYLINDER
A cylinder emitter.
system_util.hh
sdf::SDF_VERSION_NAMESPACE::ElementPtr
std::shared_ptr< Element > ElementPtr
Definition: Element.hh:54