11 #ifndef smtk_mesh_PointCloud_h
12 #define smtk_mesh_PointCloud_h
14 #include "smtk/CoreExports.h"
42 const std::function<std::array<double, 3>(std::size_t)>& coordinates,
43 const std::function<
double(std::size_t)>& data,
44 const std::function<
bool(std::size_t)>& valid)
46 , m_coordinates(coordinates)
57 double nan = std::numeric_limits<double>::quiet_NaN();
58 return std::array<double, 3>({ { nan, nan, nan } });
60 [](std::size_t) {
return std::numeric_limits<double>::quiet_NaN(); },
61 [](std::size_t) {
return false; })
68 const std::function<std::array<double, 3>(std::size_t)>& coordinates,
69 const std::function<
double(std::size_t)>& data)
71 , m_coordinates(coordinates)
73 , m_valid([](std::size_t) {
return true; })
79 PointCloud(std::size_t nPoints,
const double*
const coordinates,
const double*
const data)
83 return std::array<double, 3>(
84 { { coordinates[3 * i], coordinates[3 * i + 1], coordinates[3 * i + 2] } });
86 [=](std::size_t i) {
return data[i]; },
87 [](std::size_t) {
return true; })
93 PointCloud(std::size_t nPoints,
const float*
const coordinates,
const float*
const data)
97 return std::array<double, 3>(
98 { { coordinates[3 * i], coordinates[3 * i + 1], coordinates[3 * i + 2] } });
100 [=](std::size_t i) {
return data[i]; },
101 [](std::size_t) {
return true; })
108 Coordinates(std::vector<double> coords)
109 : m_coordinates(std::move(coords))
113 std::array<double, 3> operator()(std::size_t i)
const
115 return std::array<double, 3>(
116 { { m_coordinates[3 * i], m_coordinates[3 * i + 1], m_coordinates[3 * i + 2] } });
119 const std::vector<double> m_coordinates;
124 Data(std::vector<double> data)
125 : m_data(std::move(data))
129 double operator()(std::size_t i)
const {
return m_data[i]; }
131 const std::vector<double> m_data;
136 PointCloud(std::vector<double>&& coordinates, std::vector<double>&& data)
137 :
PointCloud(data.size(), Coordinates(coordinates), Data(data), [](std::size_t) {
143 virtual ~PointCloud() =
default;
145 std::size_t size()
const {
return m_size; }
147 const std::function<std::array<double, 3>(std::size_t)>& coordinates()
const
149 return m_coordinates;
151 const std::function<double(std::size_t)>& data()
const {
return m_data; }
159 std::function<std::array<double, 3>(std::size_t)> m_coordinates;
160 std::function<double(std::size_t)> m_data;
161 std::function<bool(std::size_t)> m_valid;