21#include <pxr/base/gf/matrix4f.h>
22#include <pxr/usd/usdGeom/xformable.h>
38 float transform_from_usd[4][4];
42 if (!is_constant &&
settings_->get_cache_file) {
47 pxr::SdfPath object_path = use_parent_xform_ ?
prim_.GetParent().GetPath() : this->
prim_path();
63 return get_xformable().GetPrim().GetPath();
67 const pxr::UsdTimeCode time,
69 bool *r_is_constant)
const
74 *r_is_constant =
true;
83 std::get<0>(*xf_result).Get(r_mat);
84 *r_is_constant = std::get<1>(*xf_result);
88 if ((scale != 1.0 ||
settings_->do_convert_mat) && is_root_xform_) {
91 float scale_mat[4][4];
104 const pxr::UsdGeomXformable xformable(
prim_);
111 bool reset_xform_stack =
false;
113 return !xformable.GetOrderedXformOps(&reset_xform_stack).empty();
118 if (!
prim_.IsValid()) {
129 if (
prim_.IsA<pxr::UsdGeomXformable>()) {
135 pxr::UsdPrim cur_parent =
prim_.GetParent();
137 if (use_parent_xform_) {
138 cur_parent = cur_parent.GetParent();
141 while (cur_parent && !cur_parent.IsPseudoRoot()) {
142 if (cur_parent.IsA<pxr::UsdGeomXformable>()) {
145 cur_parent = cur_parent.GetParent();
157 const pxr::UsdGeomXformable xformable = get_xformable();
164 bool is_constant = !xformable.TransformMightBeTimeVarying();
166 bool reset_xform_stack;
167 pxr::GfMatrix4d xform;
168 if (!xformable.GetLocalTransformation(&xform, &reset_xform_stack, time)) {
175 return XformResult(pxr::GfMatrix4f(xform), is_constant);
178pxr::UsdGeomXformable USDXformReader::get_xformable()
const
180 pxr::UsdPrim
prim = use_parent_xform_ ?
prim_.GetParent() :
prim_;
181 return pxr::UsdGeomXformable(
prim);
struct bConstraint * BKE_constraint_add_for_object(struct Object *ob, const char *name, short type)
General operations, lookup, etc. for blender objects.
void BKE_object_apply_mat4(Object *ob, const float mat[4][4], bool use_compat, bool use_parent)
Object * BKE_object_add_only_object(Main *bmain, int type, const char *name) ATTR_RETURNS_NONNULL
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
void scale_m4_fl(float R[4][4], float scale)
void unit_m4(float m[4][4])
char * STRNCPY(char(&dst)[N], const char *src)
@ CONSTRAINT_TYPE_TRANSFORM_CACHE
Object is a sort of wrapper for general info.
BMesh const char void * data
const pxr::UsdPrim & prim() const
const ImportSettings * settings_
void set_props(bool merge_with_parent=false, pxr::UsdTimeCode time=pxr::UsdTimeCode::Default())
pxr::SdfPath prim_path() const
std::tuple< pxr::GfMatrix4f, bool > XformResult