OpenVDB 12.0.0
 
Loading...
Searching...
No Matches
PointSample.h
Go to the documentation of this file.
1// Copyright Contributors to the OpenVDB Project
2// SPDX-License-Identifier: Apache-2.0
3
4/// @author Nick Avramoussis, Francisco Gochez, Dan Bailey
5///
6/// @file points/PointSample.h
7///
8/// @brief Sample a VDB Grid onto a VDB Points attribute
9
10#ifndef OPENVDB_POINTS_POINT_SAMPLE_HAS_BEEN_INCLUDED
11#define OPENVDB_POINTS_POINT_SAMPLE_HAS_BEEN_INCLUDED
12
14#include <openvdb/thread/Threading.h>
16#include <openvdb/util/Assert.h>
17
18#include "PointDataGrid.h"
19#include "PointAttribute.h"
20
21#include <sstream>
22#include <type_traits>
23
24namespace openvdb {
26namespace OPENVDB_VERSION_NAME {
27namespace points {
28
29/// @brief Performs closest point sampling from a VDB grid onto a VDB Points attribute
30/// @param points the PointDataGrid whose points will be sampled on to
31/// @param sourceGrid VDB grid which will be sampled
32/// @param targetAttribute a target attribute on the points which will hold samples. This
33/// attribute will be created with the source grid type if it does
34/// not exist, and with the source grid name if the name is empty
35/// @param filter an optional index filter
36/// @param interrupter an optional interrupter
37/// @note The target attribute may exist provided it can be cast to the SourceGridT ValueType
38template<typename PointDataGridT, typename SourceGridT,
39 typename FilterT = NullFilter, typename InterrupterT = util::NullInterrupter>
40inline void pointSample(PointDataGridT& points,
41 const SourceGridT& sourceGrid,
42 const Name& targetAttribute = "",
43 const FilterT& filter = NullFilter(),
44 InterrupterT* const interrupter = nullptr);
45
46/// @brief Performs tri-linear sampling from a VDB grid onto a VDB Points attribute
47/// @param points the PointDataGrid whose points will be sampled on to
48/// @param sourceGrid VDB grid which will be sampled
49/// @param targetAttribute a target attribute on the points which will hold samples. This
50/// attribute will be created with the source grid type if it does
51/// not exist, and with the source grid name if the name is empty
52/// @param filter an optional index filter
53/// @param interrupter an optional interrupter
54/// @note The target attribute may exist provided it can be cast to the SourceGridT ValueType
55template<typename PointDataGridT, typename SourceGridT,
56 typename FilterT = NullFilter, typename InterrupterT = util::NullInterrupter>
57inline void boxSample( PointDataGridT& points,
58 const SourceGridT& sourceGrid,
59 const Name& targetAttribute = "",
60 const FilterT& filter = NullFilter(),
61 InterrupterT* const interrupter = nullptr);
62
63/// @brief Performs tri-quadratic sampling from a VDB grid onto a VDB Points attribute
64/// @param points the PointDataGrid whose points will be sampled on to
65/// @param sourceGrid VDB grid which will be sampled
66/// @param targetAttribute a target attribute on the points which will hold samples. This
67/// attribute will be created with the source grid type if it does
68/// not exist, and with the source grid name if the name is empty
69/// @param filter an optional index filter
70/// @param interrupter an optional interrupter
71/// @note The target attribute may exist provided it can be cast to the SourceGridT ValueType
72template<typename PointDataGridT, typename SourceGridT,
73 typename FilterT = NullFilter, typename InterrupterT = util::NullInterrupter>
74inline void quadraticSample(PointDataGridT& points,
75 const SourceGridT& sourceGrid,
76 const Name& targetAttribute = "",
77 const FilterT& filter = NullFilter(),
78 InterrupterT* const interrupter = nullptr);
79
80
81// This struct samples the source grid accessor using the world-space position supplied,
82// with SamplerT providing the sampling scheme. In the case where ValueT does not match
83// the value type of the source grid, the sample() method will also convert the sampled
84// value into a ValueT value, using round-to-nearest for float-to-integer conversion.
86{
87 template<typename ValueT, typename SamplerT, typename AccessorT>
88 inline ValueT sample(const AccessorT& accessor, const Vec3d& position) const;
89};
90
91// A dummy struct that is used to mean that the sampled attribute should either match the type
92// of the existing attribute or the type of the source grid (if the attribute doesn't exist yet)
93struct DummySampleType { };
94
95/// @brief Performs sampling and conversion from a VDB grid onto a VDB Points attribute
96/// @param order the sampling order - 0 = closest-point, 1 = trilinear, 2 = triquadratic
97/// @param points the PointDataGrid whose points will be sampled on to
98/// @param sourceGrid VDB grid which will be sampled
99/// @param targetAttribute a target attribute on the points which will hold samples. This
100/// attribute will be created with the source grid type if it does
101/// not exist, and with the source grid name if the name is empty
102/// @param filter an optional index filter
103/// @param sampler handles sampling and conversion into the target attribute type,
104/// which by default this uses the SampleWithRounding struct.
105/// @param interrupter an optional interrupter
106/// @param threaded enable or disable threading (threading is enabled by default)
107/// @note The target attribute may exist provided it can be cast to the SourceGridT ValueType
108template<typename PointDataGridT, typename SourceGridT, typename TargetValueT = DummySampleType,
109 typename SamplerT = SampleWithRounding, typename FilterT = NullFilter,
110 typename InterrupterT = util::NullInterrupter>
111inline void sampleGrid( size_t order,
112 PointDataGridT& points,
113 const SourceGridT& sourceGrid,
114 const Name& targetAttribute,
115 const FilterT& filter = NullFilter(),
116 const SamplerT& sampler = SampleWithRounding(),
117 InterrupterT* const interrupter = nullptr,
118 const bool threaded = true);
119
120} // namespace points
121} // namespace OPENVDB_VERSION_NAME
122} // namespace openvdb
123
124#include "impl/PointSampleImpl.h"
125
126#endif // OPENVDB_POINTS_POINT_SAMPLE_HAS_BEEN_INCLUDED
Point attribute manipulation in a VDB Point Grid.
Attribute-owned data structure for points. Point attributes are stored in leaf nodes and ordered by v...
A no-op filter that can be used when iterating over all indices.
Definition IndexIterator.h:52
Vec3< double > Vec3d
Definition Vec3.h:665
Definition AttributeArray.h:42
void sampleGrid(size_t order, PointDataGridT &points, const SourceGridT &sourceGrid, const Name &targetAttribute, const FilterT &filter=NullFilter(), const SamplerT &sampler=SampleWithRounding(), InterrupterT *const interrupter=nullptr, const bool threaded=true)
Performs sampling and conversion from a VDB grid onto a VDB Points attribute.
Definition PointSampleImpl.h:319
void boxSample(PointDataGridT &points, const SourceGridT &sourceGrid, const Name &targetAttribute="", const FilterT &filter=NullFilter(), InterrupterT *const interrupter=nullptr)
Performs tri-linear sampling from a VDB grid onto a VDB Points attribute.
Definition PointSampleImpl.h:428
void quadraticSample(PointDataGridT &points, const SourceGridT &sourceGrid, const Name &targetAttribute="", const FilterT &filter=NullFilter(), InterrupterT *const interrupter=nullptr)
Performs tri-quadratic sampling from a VDB grid onto a VDB Points attribute.
Definition PointSampleImpl.h:439
void pointSample(PointDataGridT &points, const SourceGridT &sourceGrid, const Name &targetAttribute="", const FilterT &filter=NullFilter(), InterrupterT *const interrupter=nullptr)
Performs closest point sampling from a VDB grid onto a VDB Points attribute.
Definition PointSampleImpl.h:417
std::string Name
Definition Name.h:19
Definition Exceptions.h:13
Definition PointSample.h:93
ValueT sample(const AccessorT &accessor, const Vec3d &position) const
Definition PointSampleImpl.h:298
Base class for interrupters.
Definition NullInterrupter.h:26
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition version.h.in:121
#define OPENVDB_USE_VERSION_NAMESPACE
Definition version.h.in:218