159 const pxr::UsdPrim &prim,
161 const pxr::UsdTimeCode time_code)
163 pxr::UsdAttributeVector attribs = prim.GetAuthoredAttributes();
164 if (attribs.empty()) {
170 for (
const pxr::UsdAttribute &attr : attribs) {
171 if (!attr.IsCustom()) {
175 std::vector<std::string> attr_names = attr.SplitName();
177 const bool is_user_prop = attr_names[0] ==
"userProperties";
179 if (attr_names.size() > 2 && is_user_prop && attr_names[1] ==
"blender") {
183 if (!all_custom_attrs && !is_user_prop) {
190 pxr::TfToken attr_name;
196 attr_name = pxr::TfToken(
name.substr(token.
size()));
199 attr_name = attr.GetName();
202 pxr::SdfValueTypeName type_name = attr.GetTypeName();
204 if (type_name == pxr::SdfValueTypeNames->
Int) {
206 if (attr.Get<
int>(&ival, time_code)) {
210 else if (type_name == pxr::SdfValueTypeNames->
Float) {
212 if (attr.Get<
float>(&fval, time_code)) {
216 else if (type_name == pxr::SdfValueTypeNames->Double) {
218 if (attr.Get<
double>(&dval, time_code)) {
222 else if (type_name == pxr::SdfValueTypeNames->Half) {
223 pxr::GfHalf hval = 0.0f;
224 if (attr.Get<pxr::GfHalf>(&hval, time_code)) {
228 else if (type_name == pxr::SdfValueTypeNames->
String) {
230 if (attr.Get<std::string>(&sval, time_code)) {
234 else if (type_name == pxr::SdfValueTypeNames->Token) {
236 if (attr.Get<pxr::TfToken>(&tval, time_code)) {
240 else if (type_name == pxr::SdfValueTypeNames->Asset) {
241 pxr::SdfAssetPath aval;
242 if (attr.Get<pxr::SdfAssetPath>(&aval, time_code)) {
246 else if (type_name == pxr::SdfValueTypeNames->Bool) {
248 if (attr.Get<
bool>(&bval, time_code)) {
252 else if (equivalent(type_name, pxr::SdfValueTypeNames->Float2)) {
253 set_array_prop<pxr::GfVec2f>(idgroup, attr_name.GetString(), attr, time_code);
255 else if (equivalent(type_name, pxr::SdfValueTypeNames->Float3)) {
256 set_array_prop<pxr::GfVec3f>(idgroup, attr_name.GetString(), attr, time_code);
258 else if (equivalent(type_name, pxr::SdfValueTypeNames->Float4)) {
259 set_array_prop<pxr::GfVec4f>(idgroup, attr_name.GetString(), attr, time_code);
261 else if (equivalent(type_name, pxr::SdfValueTypeNames->Double2)) {
262 set_array_prop<pxr::GfVec2d>(idgroup, attr_name.GetString(), attr, time_code);
264 else if (equivalent(type_name, pxr::SdfValueTypeNames->Double3)) {
265 set_array_prop<pxr::GfVec3d>(idgroup, attr_name.GetString(), attr, time_code);
267 else if (equivalent(type_name, pxr::SdfValueTypeNames->Double4)) {
268 set_array_prop<pxr::GfVec4d>(idgroup, attr_name.GetString(), attr, time_code);
270 else if (equivalent(type_name, pxr::SdfValueTypeNames->Int2)) {
271 set_array_prop<pxr::GfVec2i>(idgroup, attr_name.GetString(), attr, time_code);
273 else if (equivalent(type_name, pxr::SdfValueTypeNames->Int3)) {
274 set_array_prop<pxr::GfVec3i>(idgroup, attr_name.GetString(), attr, time_code);
276 else if (equivalent(type_name, pxr::SdfValueTypeNames->Int4)) {
277 set_array_prop<pxr::GfVec4i>(idgroup, attr_name.GetString(), attr, time_code);
279 else if (equivalent(type_name, pxr::SdfValueTypeNames->Half2)) {
280 set_array_prop<pxr::GfVec2h>(idgroup, attr_name.GetString(), attr, time_code);
282 else if (equivalent(type_name, pxr::SdfValueTypeNames->Half3)) {
283 set_array_prop<pxr::GfVec3h>(idgroup, attr_name.GetString(), attr, time_code);
285 else if (equivalent(type_name, pxr::SdfValueTypeNames->Half4)) {
286 set_array_prop<pxr::GfVec4h>(idgroup, attr_name.GetString(), attr, time_code);