def patched_gather_extensions(blender_object, export_settings): extensions = original_gather_extensions(blender_object, export_settings) component_list = blender_object.hubs_component_list hubs_config = export_settings['hubs_config'] registered_hubs_components = export_settings['registered_hubs_components'] if component_list.items: extension_name = hubs_config["gltfExtensionName"] component_data = {} for component_item in component_list.items: component_name = component_item.name component_definition = hubs_config['components'][component_name] component_class = registered_hubs_components[component_name] component_class_name = component_class.__name__ component = getattr(blender_object, component_class_name) component_data[component_name] = gather_properties( export_settings, blender_object, component, component_definition) if extensions is None: extensions = {} extensions[extension_name] = gltf2_io_extensions.Extension( name=extension_name, extension=component_data, required=False) return extensions if extensions else None
def __gather_extensions(blender_object, export_settings): extensions = {} if export_settings["gltf_lights"] and (blender_object.type == "LAMP" or blender_object.type == "LIGHT"): blender_lamp = blender_object.data light = gltf2_blender_gather_lights.gather_lights_punctual( blender_lamp, export_settings) if light is not None: light_extension = gltf2_io_extensions.ChildOfRootExtension( name="KHR_lights_punctual", path=["lights"], extension=light) extensions["KHR_lights_punctual"] = gltf2_io_extensions.Extension( name="KHR_lights_punctual", extension={"light": light_extension}) return extensions if extensions else None
def patched_gather_extensions(blender_object, export_settings): extensions = original_gather_extensions(blender_object, export_settings) component_list = blender_object.hubs_component_list hubs_config = export_settings['hubs_config'] registered_hubs_components = export_settings['registered_hubs_components'] if component_list.items: extension_name = hubs_config["gltfExtensionName"] component_data = {} for component_item in component_list.items: component_name = component_item.name component_data[component_name] = {} component_definition = hubs_config['components'][component_name] component_class = registered_hubs_components[component_name] component_class_name = component_class.__name__ component = getattr(blender_object, component_class_name) for property_name, property_definition in component_definition[ 'properties'].items(): property_type = property_definition['type'] if property_type == 'collections': filtered_collection_names = [] collection_prefix_regex = None if 'collectionPrefix' in property_definition: collection_prefix = property_definition[ 'collectionPrefix'] collection_prefix_regex = re.compile(r'^' + collection_prefix) for collection in blender_object.users_collection: if collection_prefix_regex and collection_prefix_regex.match( collection.name): new_name = collection_prefix_regex.sub( "", collection.name) filtered_collection_names.append(new_name) elif not collection_prefix_regex: filtered_collection_names.append(collection.name) component_data[component_name][ property_name] = filtered_collection_names elif property_type == 'array': array_type = property_definition['arrayType'] value = [] arr = getattr(component, property_name) if array_type == 'material': for item in arr: blender_material = item.value double_sided = not blender_material.use_backface_culling material = gltf2_blender_gather_materials.gather_material( blender_material, double_sided, export_settings) value.append(material) else: for item in arr: value.append(__to_json_compatible(item.value)) component_data[component_name][property_name] = value else: component_data[component_name][ property_name] = __to_json_compatible( getattr(component, property_name)) if extensions is None: extensions = {} extensions[extension_name] = gltf2_io_extensions.Extension( name=extension_name, extension=component_data, required=False) return extensions if extensions else None