Changeset View
Changeset View
Standalone View
Standalone View
io_scene_fbx/import_fbx.py
| Context not available. | |||||
| fbx_item = elem_find_first(elem, id_search) | fbx_item = elem_find_first(elem, id_search) | ||||
| if fbx_item is not None and fbx_item.props: # Do not error on complete empty properties (see T45291). | if fbx_item is not None and fbx_item.props: # Do not error on complete empty properties (see T45291). | ||||
| assert(len(fbx_item.props) == 1) | assert(len(fbx_item.props) == 1) | ||||
| assert(fbx_item.props_type[0] == data_types.STRING) | #assert(fbx_item.props_type[0] == data_types.STRING) | ||||
| return fbx_item.props[0].decode('utf-8') | return fbx_item.props[0].decode('utf-8', 'replace') | ||||
| return None | return None | ||||
| Context not available. | |||||
| elem_name, elem_class = elem_split_name_class(elem) | elem_name, elem_class = elem_split_name_class(elem) | ||||
| if clss is not ...: | if clss is not ...: | ||||
| assert(elem_class == clss) | assert(elem_class == clss) | ||||
| return elem_name.decode('utf-8') | #assert(elem_name == data_types.STRING) | ||||
| return elem_name.decode('utf-8', 'replace') | |||||
| def elem_name_ensure_classes(elem, clss=...): | def elem_name_ensure_classes(elem, clss=...): | ||||
| elem_name, elem_class = elem_split_name_class(elem) | elem_name, elem_class = elem_split_name_class(elem) | ||||
| if clss is not ...: | if clss is not ...: | ||||
| assert(elem_class in clss) | assert(elem_class in clss) | ||||
| return elem_name.decode('utf-8') | #assert(elem_name == data_types.STRING) | ||||
| return elem_name.decode('utf-8', 'replace') | |||||
| def elem_split_name_class_nodeattr(elem): | def elem_split_name_class_nodeattr(elem): | ||||
| Context not available. | |||||
| if fbx_prop.props[0] == b'UDP3DSMAX': | if fbx_prop.props[0] == b'UDP3DSMAX': | ||||
| # Special case for 3DS Max user properties: | # Special case for 3DS Max user properties: | ||||
| assert(fbx_prop.props[1] == b'KString') | assert(fbx_prop.props[1] == b'KString') | ||||
| assert(fbx_prop.props_type[4] == data_types.STRING) | #assert(fbx_prop.props_type[4] == data_types.STRING) | ||||
| items = fbx_prop.props[4].decode('utf-8') | items = fbx_prop.props[4].decode('utf-8', 'replace') | ||||
| for item in items.split('\r\n'): | for item in items.split('\r\n'): | ||||
| if item: | if item: | ||||
| prop_name, prop_value = item.split('=', 1) | prop_name, prop_value = item.split('=', 1) | ||||
| blen_obj[prop_name.strip()] = prop_value.strip() | blen_obj[prop_name.strip()] = prop_value.strip() | ||||
| else: | else: | ||||
| prop_name = fbx_prop.props[0].decode('utf-8') | prop_name = fbx_prop.props[0].decode('utf-8', 'replace') | ||||
| prop_type = fbx_prop.props[1] | prop_type = fbx_prop.props[1] | ||||
| if prop_type in {b'Vector', b'Vector3D', b'Color', b'ColorRGB'}: | if prop_type in {b'Vector', b'Vector3D', b'Color', b'ColorRGB'}: | ||||
| assert(fbx_prop.props_type[4:7] == bytes((data_types.FLOAT64,)) * 3) | assert(fbx_prop.props_type[4:7] == bytes((data_types.FLOAT64,)) * 3) | ||||
| Context not available. | |||||
| assert(fbx_prop.props_type[4] == data_types.INT32) | assert(fbx_prop.props_type[4] == data_types.INT32) | ||||
| blen_obj[prop_name] = fbx_prop.props[4] | blen_obj[prop_name] = fbx_prop.props[4] | ||||
| elif prop_type == b'KString': | elif prop_type == b'KString': | ||||
| assert(fbx_prop.props_type[4] == data_types.STRING) | #assert(fbx_prop.props_type[4] == data_types.STRING) | ||||
| blen_obj[prop_name] = fbx_prop.props[4].decode('utf-8') | blen_obj[prop_name] = fbx_prop.props[4].decode('utf-8', 'replace') | ||||
| elif prop_type in {b'Number', b'double', b'Double'}: | elif prop_type in {b'Number', b'double', b'Double'}: | ||||
| assert(fbx_prop.props_type[4] == data_types.FLOAT64) | assert(fbx_prop.props_type[4] == data_types.FLOAT64) | ||||
| blen_obj[prop_name] = fbx_prop.props[4] | blen_obj[prop_name] = fbx_prop.props[4] | ||||
| Context not available. | |||||
| assert(fbx_prop.props_type[4:6] == bytes((data_types.INT32, data_types.STRING))) | assert(fbx_prop.props_type[4:6] == bytes((data_types.INT32, data_types.STRING))) | ||||
| val = fbx_prop.props[4] | val = fbx_prop.props[4] | ||||
| if settings.use_custom_props_enum_as_string and fbx_prop.props[5]: | if settings.use_custom_props_enum_as_string and fbx_prop.props[5]: | ||||
| enum_items = fbx_prop.props[5].decode('utf-8').split('~') | enum_items = fbx_prop.props[5].decode('utf-8', 'replace').split('~') | ||||
| assert(val >= 0 and val < len(enum_items)) | assert(val >= 0 and val < len(enum_items)) | ||||
| blen_obj[prop_name] = enum_items[val] | blen_obj[prop_name] = enum_items[val] | ||||
| else: | else: | ||||
| blen_obj[prop_name] = val | blen_obj[prop_name] = val | ||||
| else: | else: | ||||
| print ("WARNING: User property type '%s' is not supported" % prop_type.decode('utf-8')) | print ("WARNING: User property type '%s' is not supported" % prop_type.decode('utf-8', 'replace')) | ||||
| def blen_read_object_transform_do(transform_data): | def blen_read_object_transform_do(transform_data): | ||||
| Context not available. | |||||