Jet  v1.3.3
volume_grid_emitter2.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_EMITTER2_H_
8 #define INCLUDE_JET_VOLUME_GRID_EMITTER2_H_
9 
10 #include <jet/grid_emitter2.h>
11 #include <jet/scalar_grid2.h>
12 #include <jet/vector_grid2.h>
13 
14 #include <tuple>
15 #include <vector>
16 
17 namespace jet {
18 
22 class VolumeGridEmitter2 final : public GridEmitter2 {
23  public:
24  class Builder;
25 
27  typedef std::function<double(double, const Vector2D&, double)>
29 
31  typedef std::function<Vector2D(double, const Vector2D&, const Vector2D&)>
33 
42  bool isOneShot = true);
43 
46 
48  void addSignedDistanceTarget(const ScalarGrid2Ptr& scalarGridTarget);
49 
58  const ScalarGrid2Ptr& scalarGridTarget,
59  double minValue,
60  double maxValue);
61 
76  void addTarget(
77  const ScalarGrid2Ptr& scalarGridTarget,
78  const ScalarMapper& customMapper);
79 
94  void addTarget(
95  const VectorGrid2Ptr& vectorGridTarget,
96  const VectorMapper& customMapper);
97 
100 
102  bool isOneShot() const;
103 
105  static Builder builder();
106 
107  private:
108  typedef std::tuple<ScalarGrid2Ptr, ScalarMapper> ScalarTarget;
109  typedef std::tuple<VectorGrid2Ptr, VectorMapper> VectorTarget;
110 
111  ImplicitSurface2Ptr _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<VolumeGridEmitter2> VolumeGridEmitter2Ptr;
126 
127 
132  public:
135 
138 
141 
144 
145  private:
146  ImplicitSurface2Ptr _sourceRegion;
147  bool _isOneShot = true;
148 };
149 
150 } // namespace jet
151 
152 #endif // INCLUDE_JET_VOLUME_GRID_EMITTER2_H_
jet::VolumeGridEmitter2::Builder::withSourceRegion
Builder & withSourceRegion(const Surface2Ptr &sourceRegion)
Returns builder with surface defining source region.
jet::VolumeGridEmitter2::builder
static Builder builder()
Returns builder fox VolumeGridEmitter2.
jet::VolumeGridEmitter2::Builder::makeShared
VolumeGridEmitter2Ptr makeShared() const
Builds shared pointer of VolumeGridEmitter2 instance.
jet::Vector2D
Vector2< double > Vector2D
Double-type 2D vector.
Definition: vector2.h:340
jet::VolumeGridEmitter2::ScalarMapper
std::function< double(double, const Vector2D &, double)> ScalarMapper
Maps to a scalar value for given signed-dist, location, and old value.
Definition: volume_grid_emitter2.h:24
jet::VolumeGridEmitter2::addSignedDistanceTarget
void addSignedDistanceTarget(const ScalarGrid2Ptr &scalarGridTarget)
Adds signed-distance target to the scalar grid.
jet::VolumeGridEmitter2::VectorMapper
std::function< Vector2D(double, const Vector2D &, const Vector2D &)> VectorMapper
Maps to a vector value for given signed-dist, location, and old value.
Definition: volume_grid_emitter2.h:32
grid_emitter2.h
jet::VolumeGridEmitter2::isOneShot
bool isOneShot() const
Returns true if this emits only once.
jet::VolumeGridEmitter2::addStepFunctionTarget
void addStepFunctionTarget(const ScalarGrid2Ptr &scalarGridTarget, double minValue, double maxValue)
Adds step function target to the scalar grid.
jet
Definition: advection_solver2.h:18
jet::ImplicitSurface2Ptr
std::shared_ptr< ImplicitSurface2 > ImplicitSurface2Ptr
Shared pointer type for the ImplicitSurface2.
Definition: implicit_surface2.h:43
jet::VolumeGridEmitter2::Builder::withIsOneShot
Builder & withIsOneShot(bool isOneShot)
Returns builder with one-shot flag.
jet::VolumeGridEmitter2::~VolumeGridEmitter2
virtual ~VolumeGridEmitter2()
Destructor.
jet::Surface2Ptr
std::shared_ptr< Surface2 > Surface2Ptr
Shared pointer for the Surface2 type.
Definition: surface2.h:109
jet::VolumeGridEmitter2::addTarget
void addTarget(const VectorGrid2Ptr &vectorGridTarget, const VectorMapper &customMapper)
Adds a vector grid target.
jet::GridEmitter2
Abstract base class for 2-D grid-based emitters.
Definition: grid_emitter2.h:22
jet::Vector< T, 2 >
2-D vector class.
Definition: vector2.h:24
jet::VolumeGridEmitter2::VolumeGridEmitter2
VolumeGridEmitter2(const ImplicitSurface2Ptr &sourceRegion, bool isOneShot=true)
Constructs an emitter with a source and is-one-shot flag.
jet::ScalarGrid2Ptr
std::shared_ptr< ScalarGrid2 > ScalarGrid2Ptr
Shared pointer for the ScalarGrid2 type.
Definition: scalar_grid2.h:188
jet::VolumeGridEmitter2Ptr
std::shared_ptr< VolumeGridEmitter2 > VolumeGridEmitter2Ptr
Shared pointer type for the VolumeGridEmitter2.
Definition: volume_grid_emitter2.h:125
jet::VolumeGridEmitter2::sourceRegion
const ImplicitSurface2Ptr & sourceRegion() const
Returns implicit surface which defines the source region.
scalar_grid2.h
vector_grid2.h
jet::VolumeGridEmitter2
2-D grid-based volumetric emitter.
Definition: volume_grid_emitter2.h:22
jet::VectorGrid2Ptr
std::shared_ptr< VectorGrid2 > VectorGrid2Ptr
Shared pointer for the VectorGrid2 type.
Definition: vector_grid2.h:88
jet::VolumeGridEmitter2::addTarget
void addTarget(const ScalarGrid2Ptr &scalarGridTarget, const ScalarMapper &customMapper)
Adds a scalar grid target.
jet::VolumeGridEmitter2::Builder
Front-end to create VolumeGridEmitter2 objects step by step.
Definition: volume_grid_emitter2.h:131
jet::VolumeGridEmitter2::Builder::build
VolumeGridEmitter2 build() const
Builds VolumeGridEmitter2.