OpenVDB
13.0.0
Toggle main menu visibility
Loading...
Searching...
No Matches
PointMove.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 Dan Bailey
5
///
6
/// @file PointMove.h
7
///
8
/// @brief Ability to move VDB Points using a custom deformer.
9
///
10
/// Deformers used when moving points are in world space by default and must adhere
11
/// to the interface described in the example below:
12
/// @code
13
/// struct MyDeformer
14
/// {
15
/// // A reset is performed on each leaf in turn before the points in that leaf are
16
/// // deformed. A leaf and leaf index (standard leaf traversal order) are supplied as
17
/// // the arguments, which matches the functor interface for LeafManager::foreach().
18
/// template <typename LeafNoteType>
19
/// void reset(LeafNoteType& leaf, size_t idx);
20
///
21
/// // Evaluate the deformer and modify the given position to generate the deformed
22
/// // position. An index iterator is supplied as the argument to allow querying the
23
/// // point offset or containing voxel coordinate.
24
/// template <typename IndexIterT>
25
/// void apply(Vec3d& position, const IndexIterT& iter) const;
26
/// };
27
/// @endcode
28
///
29
/// @note The DeformerTraits struct (defined in PointMask.h) can be used to configure
30
/// a deformer to evaluate in index space.
31
32
#ifndef OPENVDB_POINTS_POINT_MOVE_HAS_BEEN_INCLUDED
33
#define OPENVDB_POINTS_POINT_MOVE_HAS_BEEN_INCLUDED
34
35
#include <
openvdb/openvdb.h
>
36
#include <
openvdb/util/Assert.h
>
37
38
#include "
PointDataGrid.h
"
39
#include "
PointMask.h
"
40
41
#include <tbb/concurrent_vector.h>
42
43
#include <algorithm>
44
#include <iterator>
// for std::begin(), std::end()
45
#include <map>
46
#include <numeric>
// for std::iota()
47
#include <tuple>
48
#include <unordered_map>
49
#include <vector>
50
51
namespace
openvdb
{
52
OPENVDB_USE_VERSION_NAMESPACE
53
namespace
OPENVDB_VERSION_NAME
{
54
namespace
points {
55
56
// dummy object for future use
57
namespace
future
{
struct
Advect
{ }; }
58
59
/// @brief Move points in a PointDataGrid using a custom deformer
60
/// @param points the PointDataGrid containing the points to be moved.
61
/// @param deformer a custom deformer that defines how to move the points.
62
/// @param filter an optional index filter
63
/// @param objectNotInUse for future use, this object is currently ignored
64
/// @param threaded enable or disable threading (threading is enabled by default)
65
template
<
typename
Po
int
DataGr
id
T,
typename
DeformerT,
typename
FilterT = NullFilter>
66
inline
void
movePoints
(PointDataGridT&
points
,
67
DeformerT& deformer,
68
const
FilterT& filter =
NullFilter
(),
69
future::Advect
* objectNotInUse =
nullptr
,
70
bool
threaded =
true
);
71
72
73
/// @brief Move points in a PointDataGrid using a custom deformer and a new transform
74
/// @param points the PointDataGrid containing the points to be moved.
75
/// @param transform target transform to use for the resulting points.
76
/// @param deformer a custom deformer that defines how to move the points.
77
/// @param filter an optional index filter
78
/// @param objectNotInUse for future use, this object is currently ignored
79
/// @param threaded enable or disable threading (threading is enabled by default)
80
template
<
typename
Po
int
DataGr
id
T,
typename
DeformerT,
typename
FilterT = NullFilter>
81
inline
void
movePoints
(PointDataGridT&
points
,
82
const
math::Transform
& transform,
83
DeformerT& deformer,
84
const
FilterT& filter =
NullFilter
(),
85
future::Advect
* objectNotInUse =
nullptr
,
86
bool
threaded =
true
);
87
88
}
// namespace points
89
}
// namespace OPENVDB_VERSION_NAME
90
}
// namespace openvdb
91
92
#include "
impl/PointMoveImpl.h
"
93
94
#endif
// OPENVDB_POINTS_POINT_MOVE_HAS_BEEN_INCLUDED
Assert.h
PointDataGrid.h
Attribute-owned data structure for points. Point attributes are stored in leaf nodes and ordered by v...
PointMask.h
Methods for extracting masks from VDB Point grids.
PointMoveImpl.h
openvdb::v13_0::math::Transform
Definition
Transform.h:40
openvdb::v13_0::points::NullFilter
A no-op filter that can be used when iterating over all indices.
Definition
IndexIterator.h:52
openvdb::v13_0::points::future
A container for ABI=5 to help ease introduction of upcoming features.
Definition
AttributeSet.h:294
openvdb::v13_0::points
Definition
AttributeArray.h:42
openvdb::v13_0::points::movePoints
void movePoints(PointDataGridT &points, DeformerT &deformer, const FilterT &filter=NullFilter(), future::Advect *objectNotInUse=nullptr, bool threaded=true)
Move points in a PointDataGrid using a custom deformer.
Definition
PointMoveImpl.h:619
openvdb
Definition
Exceptions.h:13
openvdb.h
openvdb::v13_0::points::future::Advect
Definition
PointMove.h:57
OPENVDB_VERSION_NAME
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition
version.h.in:121
OPENVDB_USE_VERSION_NAMESPACE
#define OPENVDB_USE_VERSION_NAMESPACE
Definition
version.h.in:218
openvdb
points
PointMove.h
Generated by
1.18.0