Jet  v1.3.3
custom_implicit_surface3.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_SURFACE3_H_
8 #define INCLUDE_JET_CUSTOM_IMPLICIT_SURFACE3_H_
9 
10 #include <jet/implicit_surface3.h>
11 #include <jet/scalar_field3.h>
12 
13 namespace jet {
14 
17  public:
18  class Builder;
19 
31  CustomImplicitSurface3(const std::function<double(const Vector3D&)>& func,
32  const BoundingBox3D& domain = BoundingBox3D(),
33  double resolution = 1e-3,
34  double rayMarchingResolution = 1e-6,
35  unsigned int maxNumOfIterations = 5,
36  const Transform3& transform = Transform3(),
37  bool isNormalFlipped = false);
38 
41 
43  static Builder builder();
44 
45  private:
46  std::function<double(const Vector3D&)> _func;
47  BoundingBox3D _domain;
48  double _resolution = 1e-3;
49  double _rayMarchingResolution = 1e-6;
50  unsigned int _maxNumOfIterations = 5;
51 
52  Vector3D closestPointLocal(const Vector3D& otherPoint) const override;
53 
54  bool intersectsLocal(const Ray3D& ray) const override;
55 
56  BoundingBox3D boundingBoxLocal() const override;
57 
58  Vector3D closestNormalLocal(const Vector3D& otherPoint) const override;
59 
60  double signedDistanceLocal(const Vector3D& otherPoint) const override;
61 
62  SurfaceRayIntersection3 closestIntersectionLocal(
63  const Ray3D& ray) const override;
64 
65  Vector3D gradientLocal(const Vector3D& x) const;
66 };
67 
69 typedef std::shared_ptr<CustomImplicitSurface3> CustomImplicitSurface3Ptr;
70 
75  : public SurfaceBuilderBase3<CustomImplicitSurface3::Builder> {
76  public:
79  const std::function<double(const Vector3D&)>& func);
80 
82  Builder& withDomain(const BoundingBox3D& 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 Vector3D&)> _func;
103  BoundingBox3D _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_SURFACE3_H_
jet::CustomImplicitSurface3::builder
static Builder builder()
Returns builder for CustomImplicitSurface3.
jet::BoundingBox< T, 3 >
3-D axis-aligned bounding box class.
Definition: bounding_box3.h:41
jet::ImplicitSurface3
Abstract base class for 3-D implicit surface.
Definition: implicit_surface3.h:15
jet::SurfaceBuilderBase3
Base class for 3-D surface builder.
Definition: surface3.h:115
jet::CustomImplicitSurface3
Custom 3-D implicit surface using arbitrary function.
Definition: custom_implicit_surface3.h:16
jet::Surface3::isNormalFlipped
bool isNormalFlipped
Flips normal when calling Surface3::closestNormal(...).
Definition: surface3.h:33
scalar_field3.h
jet
Definition: advection_solver2.h:18
jet::BoundingBox3D
BoundingBox3< double > BoundingBox3D
Double-type 3-D BoundingBox.
Definition: bounding_box3.h:127
jet::CustomImplicitSurface3::Builder::withDomain
Builder & withDomain(const BoundingBox3D &domain)
Returns builder with domain.
jet::Surface3::transform
Transform3 transform
Local-to-world transform.
Definition: surface3.h:30
jet::CustomImplicitSurface3::Builder::withSignedDistanceFunction
Builder & withSignedDistanceFunction(const std::function< double(const Vector3D &)> &func)
Returns builder with custom signed-distance function.
jet::Ray< T, 3 >
Class for 2-D ray.
Definition: ray3.h:21
jet::CustomImplicitSurface3::~CustomImplicitSurface3
virtual ~CustomImplicitSurface3()
Destructor.
jet::CustomImplicitSurface3::CustomImplicitSurface3
CustomImplicitSurface3(const std::function< double(const Vector3D &)> &func, const BoundingBox3D &domain=BoundingBox3D(), double resolution=1e-3, double rayMarchingResolution=1e-6, unsigned int maxNumOfIterations=5, const Transform3 &transform=Transform3(), bool isNormalFlipped=false)
jet::SurfaceRayIntersection3
Struct that represents ray-surface intersection point.
Definition: surface3.h:19
jet::CustomImplicitSurface3::Builder::makeShared
CustomImplicitSurface3Ptr makeShared() const
Builds shared pointer of CustomImplicitSurface3 instance.
implicit_surface3.h
jet::Vector< T, 3 >
3-D vector class.
Definition: vector3.h:25
jet::CustomImplicitSurface3::Builder
Front-end to create CustomImplicitSurface3 objects step by step.
Definition: custom_implicit_surface3.h:75
jet::Transform3
Represents 3-D rigid body transform.
Definition: transform3.h:20
jet::CustomImplicitSurface3::Builder::build
CustomImplicitSurface3 build() const
Builds CustomImplicitSurface3.
jet::CustomImplicitSurface3::Builder::withRayMarchingResolution
Builder & withRayMarchingResolution(double rayMarchingResolution)
jet::CustomImplicitSurface3::Builder::withMaxNumberOfIterations
Builder & withMaxNumberOfIterations(unsigned int numIter)
jet::CustomImplicitSurface3::Builder::withResolution
Builder & withResolution(double resolution)
Returns builder with finite differencing resolution.
jet::CustomImplicitSurface3Ptr
std::shared_ptr< CustomImplicitSurface3 > CustomImplicitSurface3Ptr
Shared pointer type for the CustomImplicitSurface3.
Definition: custom_implicit_surface3.h:69