Jet  v1.3.3
custom_implicit_surface2.h
Go to the documentation of this file.
1 // Copyright (c) 2018 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_CUSTOM_IMPLICIT_SURFACE2_H_
8 #define INCLUDE_JET_CUSTOM_IMPLICIT_SURFACE2_H_
9 
10 #include <jet/implicit_surface2.h>
11 #include <jet/scalar_field2.h>
12 
13 namespace jet {
14 
17  public:
18  class Builder;
19 
31  CustomImplicitSurface2(const std::function<double(const Vector2D&)>& func,
32  const BoundingBox2D& domain = BoundingBox2D(),
33  double resolution = 1e-3,
34  double rayMarchingResolution = 1e-6,
35  unsigned int numberOfIterations = 5,
36  const Transform2& transform = Transform2(),
37  bool isNormalFlipped = false);
38 
41 
43  static Builder builder();
44 
45  private:
46  std::function<double(const Vector2D&)> _func;
47  BoundingBox2D _domain;
48  double _resolution = 1e-3;
49  double _rayMarchingResolution = 1e-6;
50  unsigned int _maxNumOfIterations = 5;
51 
52  Vector2D closestPointLocal(const Vector2D& otherPoint) const override;
53 
54  bool intersectsLocal(const Ray2D& ray) const override;
55 
56  BoundingBox2D boundingBoxLocal() const override;
57 
58  Vector2D closestNormalLocal(const Vector2D& otherPoint) const override;
59 
60  double signedDistanceLocal(const Vector2D& otherPoint) const override;
61 
62  SurfaceRayIntersection2 closestIntersectionLocal(
63  const Ray2D& ray) const override;
64 
65  Vector2D gradientLocal(const Vector2D& x) const;
66 };
67 
69 typedef std::shared_ptr<CustomImplicitSurface2> CustomImplicitSurface2Ptr;
70 
75  : public SurfaceBuilderBase2<CustomImplicitSurface2::Builder> {
76  public:
79  const std::function<double(const Vector2D&)>& func);
80 
82  Builder& withDomain(const BoundingBox2D& domain);
83 
85  Builder& withResolution(double resolution);
86 
89  Builder& withRayMarchingResolution(double rayMarchingResolution);
90 
93  Builder& withMaxNumberOfIterations(unsigned int numIter);
94 
97 
100 
101  private:
102  std::function<double(const Vector2D&)> _func;
103  BoundingBox2D _domain;
104  double _resolution = 1e-3;
105  double _rayMarchingResolution = 1e-6;
106  unsigned int _maxNumOfIterations = 5;
107 };
108 
109 } // namespace jet
110 
111 #endif // INCLUDE_JET_CUSTOM_IMPLICIT_SURFACE2_H_
jet::CustomImplicitSurface2
Custom 2-D implicit surface using arbitrary function.
Definition: custom_implicit_surface2.h:16
jet::SurfaceRayIntersection2
Struct that represents ray-surface intersection point.
Definition: surface2.h:19
jet::Surface2::isNormalFlipped
bool isNormalFlipped
Flips normal.
Definition: surface2.h:33
jet::Transform2
Represents 2-D rigid body transform.
Definition: transform2.h:19
jet::CustomImplicitSurface2::Builder::makeShared
CustomImplicitSurface2Ptr makeShared() const
Builds shared pointer of CustomImplicitSurface2 instance.
jet::CustomImplicitSurface2::builder
static Builder builder()
Returns builder for CustomImplicitSurface2.
scalar_field2.h
jet::Ray< T, 2 >
Class for 2-D ray.
Definition: ray2.h:21
jet::CustomImplicitSurface2::Builder::withSignedDistanceFunction
Builder & withSignedDistanceFunction(const std::function< double(const Vector2D &)> &func)
Returns builder with custom signed-distance function.
jet::CustomImplicitSurface2::Builder::withDomain
Builder & withDomain(const BoundingBox2D &domain)
Returns builder with domain.
jet::BoundingBox2D
BoundingBox2< double > BoundingBox2D
Double-type 2-D BoundingBox.
Definition: bounding_box2.h:124
jet::CustomImplicitSurface2::Builder::withRayMarchingResolution
Builder & withRayMarchingResolution(double rayMarchingResolution)
jet::CustomImplicitSurface2::Builder::build
CustomImplicitSurface2 build() const
Builds CustomImplicitSurface2.
jet::CustomImplicitSurface2Ptr
std::shared_ptr< CustomImplicitSurface2 > CustomImplicitSurface2Ptr
Shared pointer type for the CustomImplicitSurface2.
Definition: custom_implicit_surface2.h:69
implicit_surface2.h
jet
Definition: advection_solver2.h:18
jet::Surface2::transform
Transform2 transform
Local-to-world transform.
Definition: surface2.h:30
jet::CustomImplicitSurface2::Builder::withMaxNumberOfIterations
Builder & withMaxNumberOfIterations(unsigned int numIter)
jet::Vector< T, 2 >
2-D vector class.
Definition: vector2.h:24
jet::SurfaceBuilderBase2
Base class for 2-D surface builder.
Definition: surface2.h:115
jet::CustomImplicitSurface2::Builder::withResolution
Builder & withResolution(double resolution)
Returns builder with finite differencing resolution.
jet::CustomImplicitSurface2::CustomImplicitSurface2
CustomImplicitSurface2(const std::function< double(const Vector2D &)> &func, const BoundingBox2D &domain=BoundingBox2D(), double resolution=1e-3, double rayMarchingResolution=1e-6, unsigned int numberOfIterations=5, const Transform2 &transform=Transform2(), bool isNormalFlipped=false)
jet::BoundingBox< T, 2 >
2-D axis-aligned bounding box class.
Definition: bounding_box2.h:41
jet::CustomImplicitSurface2::Builder
Front-end to create CustomImplicitSurface2 objects step by step.
Definition: custom_implicit_surface2.h:75
jet::CustomImplicitSurface2::~CustomImplicitSurface2
virtual ~CustomImplicitSurface2()
Destructor.
jet::ImplicitSurface2
Abstract base class for 2-D implicit surface.
Definition: implicit_surface2.h:15