Loading...
Searching...
No Matches
sparseValueWriter.h
Go to the documentation of this file.
1//
2// Copyright 2018 Pixar
3//
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
5// with the following modification; you may not use this file except in
6// compliance with the Apache License and the following modification to it:
7// Section 6. Trademarks. is deleted and replaced with:
8//
9// 6. Trademarks. This License does not grant permission to use the trade
10// names, trademarks, service marks, or product names of the Licensor
11// and its affiliates, except as required to comply with Section 4(c) of
12// the License and to reproduce the content of the NOTICE file.
13//
14// You may obtain a copy of the Apache License at
15//
16// http://www.apache.org/licenses/LICENSE-2.0
17//
18// Unless required by applicable law or agreed to in writing, software
19// distributed under the Apache License with the above modification is
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21// KIND, either express or implied. See the Apache License for the specific
22// language governing permissions and limitations under the Apache License.
23//
24#ifndef PXR_USD_USD_UTILS_SPARSE_VALUE_WRITER_H
25#define PXR_USD_USD_UTILS_SPARSE_VALUE_WRITER_H
26
31
32#include "pxr/pxr.h"
33
34#include "pxr/base/vt/value.h"
35
36#include "pxr/usd/usdUtils/api.h"
37#include "pxr/usd/usd/attribute.h"
38#include "pxr/usd/usd/timeCode.h"
39
40PXR_NAMESPACE_OPEN_SCOPE
41
89public:
99 USDUTILS_API
101 const VtValue &defaultValue=VtValue());
102
114 USDUTILS_API
116
126 USDUTILS_API
127 bool SetTimeSample(const VtValue &value, const UsdTimeCode time);
128
135 USDUTILS_API
136 bool SetTimeSample(VtValue *value, const UsdTimeCode time);
137
139 const UsdAttribute & GetAttr() const {
140 return _attr;
141 }
142
143private:
144 // Helper method to initialize the sparse authoring scheme.
145 void _InitializeSparseAuthoring(VtValue *defaultValue);
146
147 // The attribute whose time-samples will be authored via public API.
148 const UsdAttribute _attr;
149
150 // The time at which previous time-sample was authored.
151 UsdTimeCode _prevTime = UsdTimeCode::Default();
152
153 // The value at previously authored time-sample.
154 VtValue _prevValue;
155
156 // Whether a time-sample was written at _prevTime (with value=_prevValue).
157 bool _didWritePrevValue=true;
158};
159
230public:
236 USDUTILS_API
237 bool SetAttribute(const UsdAttribute &attr,
238 const VtValue &value,
239 const UsdTimeCode time=UsdTimeCode::Default());
240
246 USDUTILS_API
247 bool SetAttribute(const UsdAttribute &attr,
248 VtValue *value,
249 const UsdTimeCode time=UsdTimeCode::Default());
250
252 template<typename T>
253 bool SetAttribute(const UsdAttribute &attr,
254 T &value,
256 {
257 VtValue val = VtValue::Take(value);
258 return SetAttribute(attr, &val, time);
259 }
260
263 USDUTILS_API
264 void Clear() {
265 _attrValueWriterMap.clear();
266 }
267
270 USDUTILS_API
271 std::vector<UsdUtilsSparseAttrValueWriter>
273
274private:
275 // Templated helper method used by the two public SetAttribute() methods.
276 template <typename T>
277 bool _SetAttributeImpl(const UsdAttribute &attr,
278 T &value,
279 const UsdTimeCode time);
280
281 struct _AttrHash {
282 inline size_t operator() (const UsdAttribute &attr) const {
283 return hash_value(attr);
284 }
285 };
286
287 using _AttrValueWriterMap = std::unordered_map<UsdAttribute,
289 _AttrHash>;
290 _AttrValueWriterMap _attrValueWriterMap;
291};
292
293PXR_NAMESPACE_CLOSE_SCOPE
294
295#endif
Scenegraph object for authoring and retrieving numeric, string, and array valued data,...
Definition: attribute.h:176
Represent a time value, which may be either numeric, holding a double value, or a sentinel value UsdT...
Definition: timeCode.h:84
static constexpr UsdTimeCode Default()
Produce a UsdTimeCode representing the sentinel value for 'default'.
Definition: timeCode.h:112
A utility class for authoring time-varying attribute values with simple run-length encoding,...
USDUTILS_API UsdUtilsSparseAttrValueWriter(const UsdAttribute &attr, VtValue *defaultValue)
The constructor initializes the data required for run-length encoding of time-samples.
USDUTILS_API bool SetTimeSample(const VtValue &value, const UsdTimeCode time)
Sets a new time-sample on the attribute with given value at the given time.
const UsdAttribute & GetAttr() const
Returns the attribute that's held in the sparse value writer.
USDUTILS_API UsdUtilsSparseAttrValueWriter(const UsdAttribute &attr, const VtValue &defaultValue=VtValue())
The constructor initializes the data required for run-length encoding of time-samples.
USDUTILS_API bool SetTimeSample(VtValue *value, const UsdTimeCode time)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Utility class that manages sparse authoring of a set of UsdAttributes.
USDUTILS_API bool SetAttribute(const UsdAttribute &attr, VtValue *value, const UsdTimeCode time=UsdTimeCode::Default())
This is an overloaded member function, provided for convenience. It differs from the above function o...
USDUTILS_API bool SetAttribute(const UsdAttribute &attr, const VtValue &value, const UsdTimeCode time=UsdTimeCode::Default())
Sets the value of attr to value at time time.
USDUTILS_API void Clear()
Clears the internal map, thereby releasing all the memory used by the sparse value-writers.
bool SetAttribute(const UsdAttribute &attr, T &value, const UsdTimeCode time=UsdTimeCode::Default())
This is an overloaded member function, provided for convenience. It differs from the above function o...
USDUTILS_API std::vector< UsdUtilsSparseAttrValueWriter > GetSparseAttrValueWriters() const
Returns a new vector of UsdUtilsSparseAttrValueWriter populated from the attrValueWriter map.
Provides a container which may hold any type, and provides introspection and iteration over array typ...
Definition: value.h:164
static VtValue Take(T &obj)
Create a new VtValue, taking its contents from obj.
Definition: value.h:903
size_t hash_value(const TfToken &x)
Overload hash_value for TfToken.
Definition: token.h:454