QUAOAR STUDIO // Mobius API
poly_MarchingCubes.h
1 //-----------------------------------------------------------------------------
2 // Created on: 27 December 2019
3 //-----------------------------------------------------------------------------
4 // Copyright (c) 2019-present, Sergey Slyadnev
5 // All rights reserved.
6 //
7 // Redistribution and use in source and binary forms, with or without
8 // modification, are permitted provided that the following conditions are met:
9 //
10 // * Redistributions of source code must retain the above copyright
11 // notice, this list of conditions and the following disclaimer.
12 // * Redistributions in binary form must reproduce the above copyright
13 // notice, this list of conditions and the following disclaimer in the
14 // documentation and/or other materials provided with the distribution.
15 // * Neither the name of Sergey Slyadnev nor the
16 // names of all contributors may be used to endorse or promote products
17 // derived from this software without specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 // DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY
23 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 //-----------------------------------------------------------------------------
30 
31 #ifndef poly_MarchingCubes_HeaderFile
32 #define poly_MarchingCubes_HeaderFile
33 
34 // Poly includes
35 #include <mobius/poly_GridTessellator.h>
36 #include <mobius/poly_RealFunc.h>
37 
38 namespace mobius {
39 
67 {
68 public:
69 
76  mobiusPoly_EXPORT static t_ptr<t_mesh>
77  PolygonizeVoxel(const t_xyz& P0,
78  const t_xyz& P7,
79  const t_ptr<poly_RealFunc>& func,
80  const double isoValue);
81 
85  mobiusPoly_EXPORT static int
86  GetCubeIndex(double voxelScalars[2][2][2]);
87 
98  mobiusPoly_EXPORT static t_xyz
99  GetVoxelCorner(const t_xyz& origin,
100  const double dx,
101  const double dy,
102  const double dz,
103  const int nx,
104  const int ny,
105  const int nz);
106 
114  mobiusPoly_EXPORT static t_xyz
115  InterpVertex(const t_xyz& point1,
116  const t_xyz& point2,
117  const double scalar1,
118  const double scalar2);
119 
120 public:
121 
127  mobiusPoly_EXPORT
128  poly_MarchingCubes(const t_ptr<poly_RealFunc>& func,
129  const int numSlices = 128,
130  core_ProgressEntry progress = nullptr,
131  core_PlotterEntry plotter = nullptr);
132 
134  virtual ~poly_MarchingCubes() = default;
135 
136 private:
137 
141  mobiusPoly_EXPORT virtual bool
142  perform(const double isoValue);
143 
144 protected:
145 
146  t_ptr<poly_RealFunc> m_func;
147 
148 };
149 
150 }
151 
152 #endif
mobius
Defines an exception class C1 that inherits an exception class C2.
Definition: bspl_Decompose.h:41
mobius::core_XYZ
Definition: core_XYZ.h:45
mobius::poly_GridTessellator
Definition: poly_GridTessellator.h:47
mobius::core_PlotterEntry
Definition: core_IPlotter.h:252
mobius::poly_MarchingCubes::m_func
t_ptr< poly_RealFunc > m_func
Implicit function defining the field.
Definition: poly_MarchingCubes.h:146
mobius::poly_MarchingCubes::~poly_MarchingCubes
virtual ~poly_MarchingCubes()=default
Dtor.
mobius::core_ProgressEntry
Definition: core_IProgressNotifier.h:193
mobius::poly_MarchingCubes
Definition: poly_MarchingCubes.h:66
mobius::poly_MarchingCubes::InterpVertex
static mobiusPoly_EXPORT t_xyz InterpVertex(const t_xyz &point1, const t_xyz &point2, const double scalar1, const double scalar2)
mobius::poly_MarchingCubes::GetCubeIndex
static mobiusPoly_EXPORT int GetCubeIndex(double voxelScalars[2][2][2])
mobius::poly_MarchingCubes::poly_MarchingCubes
mobiusPoly_EXPORT poly_MarchingCubes(const t_ptr< poly_RealFunc > &func, const int numSlices=128, core_ProgressEntry progress=nullptr, core_PlotterEntry plotter=nullptr)
mobius::poly_MarchingCubes::GetVoxelCorner
static mobiusPoly_EXPORT t_xyz GetVoxelCorner(const t_xyz &origin, const double dx, const double dy, const double dz, const int nx, const int ny, const int nz)
mobius::poly_MarchingCubes::PolygonizeVoxel
static mobiusPoly_EXPORT t_ptr< t_mesh > PolygonizeVoxel(const t_xyz &P0, const t_xyz &P7, const t_ptr< poly_RealFunc > &func, const double isoValue)