usdrt::Gf
The usdrt::Gf library is a strategic re-namespacing and type aliasing
of omni::math::linalg in support of the ongoing Omniverse
runtime initiative. This allows us to maintain parity between C++ class names
(ex: usdrt::GfVec3d
) and Python class names (ex: usdrt.Gf.Vec3d
)
for code that integrates the forthcoming USDRT libraries. These are intended
to be pin-compatible replacements for their USD equivalents, without the
associated overhead (no USD library or other dependencies, no boost).
C++ functionality
These types are aliased in the usdrt namespace:
GfHalf
GfMatrix(3/4)(d/f/h)
GfQuat(d/f/h)
GfVec(2/3/4)(d/f/h/i)
GfRange(1/2/3)(d/f)
GfRect2i
These functions are aliased in the usdrt namespace:
GfCompDiv
GfCompMult
GfCross
GfDegreesToRadians
GfDot
GfGetComplement
GfGetLength
GfGetNormalized
GfGetProjection
GfIsClose
GfLerp
GfMax
GfMin
GfNormalize
GfRadiansToDegrees
GfSlerp
Note that pointers to usdrt Gf types can be safely reinterpret_cast to pointers of equivalent pxr Gf types and other types with matching memory layouts:
pxr::GfVec3d pxrVec(1.0, 2.0, 3.0);
usdrt::GfVec3d rtVec(*reinterpret_cast<usdrt::GfVec3d*>(&pxrVec));
assert(rtVec[0] == 1.0);
assert(rtVec[1] == 2.0);
assert(rtVec[2] == 3.0);
pybind11 Python bindings
Python bindings using pybind11 for these classes can be found in
source/bindings/python/usdrt.Gf
. The python bindings deliver
these classes in the usdrt package:
Gf.Matrix(3/4)(d/f/h)
Gf.Quat(d/f/h)
Gf.Vec(2/3/4)(d/f/h/i)
Gf.Range(1/2/3)(d/f)
Gf.Rect2i
Like in USD, usdrt::GfHalf is transparently converted to and from double, which is Python’s preferred floating point representation.
usdrt.Gf classes implement the python buffer protocol, so they can be initialized from other types that also implement the buffer protocol, including Pixar’s Gf types and numpy.
import pxr, usdrt
pxr_vec = pxr.Gf.Vec3d(1.0, 2.0, 3.0)
rt_vec = usdrt.Gf.Vec3d(pxr_vec)
assert rt_vec[0] == 1.0
assert rt_vec[1] == 2.0
assert rt_vec[2] == 3.0