static void _setXformOp(const UsdGeomXformOp &op, const GfVec3_T& value, const UsdTimeCode &usdTime) { switch(op.GetOpType()) { case UsdGeomXformOp::TypeRotateX: op.Set(value[0], usdTime); break; case UsdGeomXformOp::TypeRotateY: op.Set(value[1], usdTime); break; case UsdGeomXformOp::TypeRotateZ: op.Set(value[2], usdTime); break; default: op.Set(value, usdTime); } }
// Given an Op, value and time, set the Op value based on op type and precision static void setXformOp(const UsdGeomXformOp& op, const GfVec3d& value, const UsdTimeCode& usdTime) { if (op.GetOpType() == UsdGeomXformOp::TypeTransform) { GfMatrix4d shearXForm(1.0); shearXForm[1][0] = value[0]; //xyVal shearXForm[2][0] = value[1]; //xzVal shearXForm[2][1] = value[2]; //yzVal op.Set(shearXForm, usdTime); return; } if (UsdGeomXformOp::GetPrecisionFromValueTypeName(op.GetAttr().GetTypeName()) == UsdGeomXformOp::PrecisionDouble) { _setXformOp<GfVec3d>(op, value, usdTime); } else { // float precision _setXformOp<GfVec3f>(op, GfVec3f(value), usdTime); } }