Jet  v1.3.3
volume_grid_emitter3.h
Go to the documentation of this file.
1 // Copyright (c) 2019 Doyub Kim
2 //
3 // I am making my contributions/submissions to this project solely in my
4 // personal capacity and am not conveying any rights to any intellectual
5 // property of any third parties.
6 
7 #ifndef INCLUDE_JET_VOLUME_GRID_EMITTER3_H_
8 #define INCLUDE_JET_VOLUME_GRID_EMITTER3_H_
9 
10 #include <jet/grid_emitter3.h>
11 #include <jet/scalar_grid3.h>
12 #include <jet/vector_grid3.h>
13 
14 #include <tuple>
15 #include <vector>
16 
17 namespace jet {
18 
22 class VolumeGridEmitter3 final : public GridEmitter3 {
23  public:
24  class Builder;
25 
27  typedef std::function<double(double, const Vector3D&, double)>
29 
31  typedef std::function<Vector3D(double, const Vector3D&, const Vector3D&)>
33 
42  bool isOneShot = true);
43 
46 
48  void addSignedDistanceTarget(const ScalarGrid3Ptr& scalarGridTarget);
49 
58  const ScalarGrid3Ptr& scalarGridTarget,
59  double minValue,
60  double maxValue);
61 
76  void addTarget(
77  const ScalarGrid3Ptr& scalarGridTarget,
78  const ScalarMapper& customMapper);
79 
94  void addTarget(
95  const VectorGrid3Ptr& vectorGridTarget,
96  const VectorMapper& customMapper);
97 
100 
102  bool isOneShot() const;
103 
105  static Builder builder();
106 
107  private:
108  typedef std::tuple<ScalarGrid3Ptr, ScalarMapper> ScalarTarget;
109  typedef std::tuple<VectorGrid3Ptr, VectorMapper> VectorTarget;
110 
111  ImplicitSurface3Ptr _sourceRegion;
112  bool _isOneShot = true;
113  bool _hasEmitted = false;
114  std::vector<ScalarTarget> _customScalarTargets;
115  std::vector<VectorTarget> _customVectorTargets;
116 
117  void onUpdate(
118  double currentTimeInSeconds,
119  double timeIntervalInSeconds) override;
120 
121  void emit();
122 };
123 
125 typedef std::shared_ptr<VolumeGridEmitter3> VolumeGridEmitter3Ptr;
126 
127 
132  public:
135 
138 
141 
144 
145  private:
146  ImplicitSurface3Ptr _sourceRegion;
147  bool _isOneShot = true;
148 };
149 
150 } // namespace jet
151 
152 #endif // INCLUDE_JET_VOLUME_GRID_EMITTER3_H_
jet::VolumeGridEmitter3::Builder::withSourceRegion
Builder & withSourceRegion(const Surface3Ptr &sourceRegion)
Returns builder with surface defining source region.
jet::VolumeGridEmitter3::Builder::withIsOneShot
Builder & withIsOneShot(bool isOneShot)
Returns builder with one-shot flag.
scalar_grid3.h
jet::ImplicitSurface3Ptr
std::shared_ptr< ImplicitSurface3 > ImplicitSurface3Ptr
Shared pointer type for the ImplicitSurface3.
Definition: implicit_surface3.h:43
jet::VolumeGridEmitter3::VectorMapper
std::function< Vector3D(double, const Vector3D &, const Vector3D &)> VectorMapper
Maps to a vector value for given signed-dist, location, and old value.
Definition: volume_grid_emitter3.h:32
jet::VectorGrid3Ptr
std::shared_ptr< VectorGrid3 > VectorGrid3Ptr
Shared pointer for the VectorGrid3 type.
Definition: vector_grid3.h:103
jet::VolumeGridEmitter3::sourceRegion
const ImplicitSurface3Ptr & sourceRegion() const
Returns implicit surface which defines the source region.
jet::VolumeGridEmitter3Ptr
std::shared_ptr< VolumeGridEmitter3 > VolumeGridEmitter3Ptr
Shared pointer type for the VolumeGridEmitter3.
Definition: volume_grid_emitter3.h:125
jet::ScalarGrid3Ptr
std::shared_ptr< ScalarGrid3 > ScalarGrid3Ptr
Shared pointer for the ScalarGrid3 type.
Definition: scalar_grid3.h:193
jet::VolumeGridEmitter3::ScalarMapper
std::function< double(double, const Vector3D &, double)> ScalarMapper
Maps to a scalar value for given signed-dist, location, and old value.
Definition: volume_grid_emitter3.h:24
jet::Surface3Ptr
std::shared_ptr< Surface3 > Surface3Ptr
Shared pointer for the Surface3 type.
Definition: surface3.h:109
jet
Definition: advection_solver2.h:18
jet::GridEmitter3
Abstract base class for 3-D grid-based emitters.
Definition: grid_emitter3.h:22
jet::VolumeGridEmitter3::addSignedDistanceTarget
void addSignedDistanceTarget(const ScalarGrid3Ptr &scalarGridTarget)
Adds signed-distance target to the scalar grid.
jet::VolumeGridEmitter3::Builder::makeShared
VolumeGridEmitter3Ptr makeShared() const
Builds shared pointer of VolumeGridEmitter3 instance.
jet::VolumeGridEmitter3::addTarget
void addTarget(const VectorGrid3Ptr &vectorGridTarget, const VectorMapper &customMapper)
Adds a vector grid target.
jet::VolumeGridEmitter3::~VolumeGridEmitter3
virtual ~VolumeGridEmitter3()
Destructor.
grid_emitter3.h
jet::VolumeGridEmitter3
3-D grid-based volumetric emitter.
Definition: volume_grid_emitter3.h:22
jet::VolumeGridEmitter3::addStepFunctionTarget
void addStepFunctionTarget(const ScalarGrid3Ptr &scalarGridTarget, double minValue, double maxValue)
Adds step function target to the scalar grid.
jet::Vector3D
Vector3< double > Vector3D
Double-type 3D vector.
Definition: vector3.h:349
jet::VolumeGridEmitter3::addTarget
void addTarget(const ScalarGrid3Ptr &scalarGridTarget, const ScalarMapper &customMapper)
Adds a scalar grid target.
jet::Vector< T, 3 >
3-D vector class.
Definition: vector3.h:25
jet::VolumeGridEmitter3::VolumeGridEmitter3
VolumeGridEmitter3(const ImplicitSurface3Ptr &sourceRegion, bool isOneShot=true)
Constructs an emitter with a source and is-one-shot flag.
vector_grid3.h
jet::VolumeGridEmitter3::isOneShot
bool isOneShot() const
Returns true if this emits only once.
jet::VolumeGridEmitter3::Builder
Front-end to create VolumeGridEmitter3 objects step by step.
Definition: volume_grid_emitter3.h:131
jet::VolumeGridEmitter3::builder
static Builder builder()
Returns builder fox VolumeGridEmitter3.
jet::VolumeGridEmitter3::Builder::build
VolumeGridEmitter3 build() const
Builds VolumeGridEmitter3.