QUAOAR STUDIO // Mobius API
poly_Tessellator.h
1 //-----------------------------------------------------------------------------
2 // Created on: 27 January 2020
3 //-----------------------------------------------------------------------------
4 // Copyright (c) 2020-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_Tessellator_HeaderFile
32 #define poly_Tessellator_HeaderFile
33 
34 // Poly includes
35 #include <mobius/poly_Mesh.h>
36 
37 // Core includes
38 #include <mobius/core_OPERATOR.h>
39 #include <mobius/core_Precision.h>
40 
41 // Standard includes
42 #include <map>
43 
44 namespace mobius {
45 
50 {
51 public:
52 
56  mobiusPoly_EXPORT
57  poly_Tessellator(core_ProgressEntry progress = nullptr,
58  core_PlotterEntry plotter = nullptr);
59 
61  mobiusPoly_EXPORT virtual
63 
64 public:
65 
69  mobiusPoly_EXPORT bool
70  Perform(const double isoValue);
71 
72 public:
73 
75  const t_ptr<t_mesh>& GetResult() const
76  {
77  return m_result;
78  }
79 
80 private:
81 
85  virtual bool perform(const double isoValue) = 0;
86 
87 protected:
88 
91  {
92  bool operator()(const t_xyz& point1,
93  const t_xyz& point2) const
94  {
95  if ( point1.X() < point2.X() - core_Precision::Resolution3D() )
96  {
97  return true;
98  }
99  if ( point1.X() > point2.X() + core_Precision::Resolution3D() )
100  {
101  return false;
102  }
103  if ( point1.Y() < point2.Y() - core_Precision::Resolution3D() )
104  {
105  return true;
106  }
107  if ( point1.Y() > point2.Y() + core_Precision::Resolution3D() )
108  {
109  return false;
110  }
111  if ( point1.Z() < point2.Z() - core_Precision::Resolution3D() )
112  {
113  return true;
114  }
115 
116  return false;
117  }
118  };
119 
121  typedef std::map<t_xyz, int, t_vertexComparator> t_vertexMap;
122 
123 protected:
124 
125  t_ptr<t_mesh> m_result;
126 
127 };
128 
129 }
130 
131 #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_Tessellator
Definition: poly_Tessellator.h:49
mobius::core_OPERATOR
Definition: core_OPERATOR.h:92
mobius::core_PlotterEntry
Definition: core_IPlotter.h:252
mobius::poly_Tessellator::t_vertexComparator
Compare functor for coordinate tuples.
Definition: poly_Tessellator.h:90
mobius::core_XYZ::Y
double Y() const
Definition: core_XYZ.h:129
mobius::core_ProgressEntry
Definition: core_IProgressNotifier.h:193
mobius::core_XYZ::Z
double Z() const
Definition: core_XYZ.h:143
mobius::poly_Tessellator::t_vertexMap
std::map< t_xyz, int, t_vertexComparator > t_vertexMap
Map to store the set of indices for 3D mesh point.
Definition: poly_Tessellator.h:121
mobius::poly_Tessellator::Perform
mobiusPoly_EXPORT bool Perform(const double isoValue)
mobius::poly_Tessellator::m_result
t_ptr< t_mesh > m_result
Reconstructed mesh.
Definition: poly_Tessellator.h:125
mobius::poly_Tessellator::~poly_Tessellator
virtual mobiusPoly_EXPORT ~poly_Tessellator()
Dtor.
mobius::poly_Tessellator::GetResult
const t_ptr< t_mesh > & GetResult() const
Definition: poly_Tessellator.h:75
mobius::poly_Tessellator::poly_Tessellator
mobiusPoly_EXPORT poly_Tessellator(core_ProgressEntry progress=nullptr, core_PlotterEntry plotter=nullptr)
mobius::core_XYZ::X
double X() const
Definition: core_XYZ.h:115