Exemplo n.º 1
0
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
Exemplo n.º 2
0
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