def gather_primitives(blender_mesh: bpy.types.Mesh, vertex_groups: Optional[bpy.types.VertexGroups], modifiers: Optional[bpy.types.ObjectModifiers], export_settings) -> List[gltf2_io.MeshPrimitive]: """ Extract the mesh primitives from a blender object :return: a list of glTF2 primitives """ primitives = [] blender_primitives = gltf2_blender_extract.extract_primitives( None, blender_mesh, vertex_groups, modifiers, export_settings) for internal_primitive in blender_primitives: if bpy.app.version < (2, 80, 0): def __gather_materials_279(blender_primitive, blender_mesh, modifiers, export_settings): if not blender_primitive['material']: # TODO: fix 'extract_primitives' so that the value of 'material' is None and not empty string return None mesh_double_sided = blender_mesh.show_double_sided material = bpy.data.materials[blender_primitive['material']] return gltf2_blender_gather_materials.gather_material( material, mesh_double_sided, export_settings) primitive = gltf2_io.MeshPrimitive( attributes=__gather_attributes(internal_primitive, blender_mesh, modifiers, export_settings), extensions=None, extras=None, indices=__gather_indices(internal_primitive, blender_mesh, modifiers, export_settings), material=__gather_materials_279(internal_primitive, blender_mesh, modifiers, export_settings), mode=None, targets=__gather_targets(internal_primitive, blender_mesh, modifiers, export_settings)) else: primitive = gltf2_io.MeshPrimitive( attributes=__gather_attributes(internal_primitive, blender_mesh, modifiers, export_settings), extensions=None, extras=None, indices=__gather_indices(internal_primitive, blender_mesh, modifiers, export_settings), material=__gather_materials(internal_primitive, modifiers, export_settings), mode=None, targets=__gather_targets(internal_primitive, blender_mesh, modifiers, export_settings)) primitives.append(primitive) return primitives
def gather_primitives(blender_object, export_settings): """ Extract the mesh primitives from a blender object :param blender_object: the mesh object :param export_settings: :return: a list of glTF2 primitives """ primitives = [] blender_mesh = blender_object.data blender_vertex_groups = blender_object.vertex_groups blender_primitives = gltf2_blender_extract.extract_primitives( None, blender_mesh, blender_vertex_groups, export_settings) for internal_primitive in blender_primitives: primitive = gltf2_io.MeshPrimitive( attributes=__gather_attributes(internal_primitive, export_settings), extensions=None, extras=None, indices=__gather_indices(internal_primitive, export_settings), material=__gather_materials(internal_primitive, export_settings), mode=None, targets=__gather_targets(internal_primitive, blender_object, export_settings)) primitives.append(primitive) return primitives
def gather_primitives(blender_mesh: bpy.types.Mesh, vertex_groups: Optional[bpy.types.VertexGroups], modifiers: Optional[bpy.types.ObjectModifiers], export_settings) -> List[gltf2_io.MeshPrimitive]: """ Extract the mesh primitives from a blender object :return: a list of glTF2 primitives """ primitives = [] blender_primitives = gltf2_blender_extract.extract_primitives( None, blender_mesh, vertex_groups, modifiers, export_settings) for internal_primitive in blender_primitives: primitive = gltf2_io.MeshPrimitive( attributes=__gather_attributes(internal_primitive, blender_mesh, modifiers, export_settings), extensions=None, extras=None, indices=__gather_indices(internal_primitive, blender_mesh, modifiers, export_settings), material=__gather_materials(internal_primitive, blender_mesh, modifiers, export_settings), mode=None, targets=__gather_targets(internal_primitive, blender_mesh, modifiers, export_settings)) primitives.append(primitive) return primitives
def gather_primitives(blender_mesh: bpy.types.Mesh, uuid_for_skined_data, vertex_groups: Optional[bpy.types.VertexGroups], modifiers: Optional[bpy.types.ObjectModifiers], materials: Tuple[bpy.types.Material], export_settings) -> List[gltf2_io.MeshPrimitive]: """ Extract the mesh primitives from a blender object :return: a list of glTF2 primitives """ primitives = [] # retrieve active render UVMap active_uvmap_idx = 0 for i in range(len(blender_mesh.uv_layers)): if blender_mesh.uv_layers[i].active_render is True: active_uvmap_idx = i break blender_primitives = __gather_cache_primitives(blender_mesh, uuid_for_skined_data, vertex_groups, modifiers, export_settings) for internal_primitive in blender_primitives: material_idx = internal_primitive['material'] material = None if export_settings[ 'gltf_materials'] == "EXPORT" and material_idx is not None: blender_material = None mat = None if materials: i = material_idx if material_idx < len(materials) else -1 mat = materials[i] if mat is not None: material = gltf2_blender_gather_materials.gather_material( mat, active_uvmap_idx, export_settings) primitive = gltf2_io.MeshPrimitive( attributes=internal_primitive['attributes'], extensions=None, extras=None, indices=internal_primitive['indices'], material=material, mode=internal_primitive['mode'], targets=internal_primitive['targets']) primitives.append(primitive) return primitives
def gather_primitives( blender_mesh: bpy.types.Mesh, library: Optional[str], blender_object: Optional[bpy.types.Object], vertex_groups: Optional[bpy.types.VertexGroups], modifiers: Optional[bpy.types.ObjectModifiers], material_names: Tuple[str], export_settings ) -> List[gltf2_io.MeshPrimitive]: """ Extract the mesh primitives from a blender object :return: a list of glTF2 primitives """ primitives = [] blender_primitives = __gather_cache_primitives(blender_mesh, library, blender_object, vertex_groups, modifiers, export_settings) for internal_primitive in blender_primitives: material_idx = internal_primitive['material'] material = None if export_settings['gltf_materials'] == "EXPORT" and material_idx is not None: blender_material = None if material_names: i = material_idx if material_idx < len(material_names) else -1 material_name = material_names[i] if material_name is not None: blender_material = bpy.data.materials[material_name] if blender_material is not None: material = gltf2_blender_gather_materials.gather_material( blender_material, export_settings, ) primitive = gltf2_io.MeshPrimitive( attributes=internal_primitive['attributes'], extensions=None, extras=None, indices=internal_primitive['indices'], material=material, mode=internal_primitive['mode'], targets=internal_primitive['targets'] ) primitives.append(primitive) return primitives
def gather_primitives( blender_mesh: bpy.types.Mesh, vertex_groups: Optional[bpy.types.VertexGroups], modifiers: Optional[bpy.types.ObjectModifiers], material_names: Tuple[str], export_settings ) -> List[gltf2_io.MeshPrimitive]: """ Extract the mesh primitives from a blender object :return: a list of glTF2 primitives """ primitives = [] blender_primitives = __gather_cache_primitives(blender_mesh, vertex_groups, modifiers, export_settings) for internal_primitive in blender_primitives: material_idx = internal_primitive['material'] double_sided = False material = None try: blender_material = bpy.data.materials[material_names[material_idx]] if bpy.app.version < (2, 80, 0): double_sided = blender_mesh.show_double_sided else: double_sided = not blender_material.use_backface_culling material = gltf2_blender_gather_materials.gather_material(blender_material, double_sided, export_settings) except IndexError: # no material at that index pass primitive = gltf2_io.MeshPrimitive( attributes=internal_primitive['attributes'], extensions=None, extras=None, indices=internal_primitive['indices'], material=material, mode=None, targets=internal_primitive['targets'] ) primitives.append(primitive) return primitives
def gather_primitives(blender_mesh: bpy.types.Mesh, library: Optional[str], blender_object: Optional[bpy.types.Object], vertex_groups: Optional[bpy.types.VertexGroups], modifiers: Optional[bpy.types.ObjectModifiers], material_names: Tuple[str], export_settings) -> List[gltf2_io.MeshPrimitive]: """ Extract the mesh primitives from a blender object :return: a list of glTF2 primitives """ primitives = [] blender_primitives = __gather_cache_primitives(blender_mesh, library, blender_object, vertex_groups, modifiers, export_settings) for internal_primitive in blender_primitives: material_idx = internal_primitive['material'] double_sided = False material = None try: blender_material = bpy.data.materials[material_names[material_idx]] double_sided = not blender_material.use_backface_culling material = gltf2_blender_gather_materials.gather_material( blender_material, double_sided, export_settings) # NOTE: gather_material may invalidate blender_mesh (see #932), # so make sure not to access blender_mesh again after this point except IndexError: # no material at that index pass primitive = gltf2_io.MeshPrimitive( attributes=internal_primitive['attributes'], extensions=None, extras=None, indices=internal_primitive['indices'], material=material, mode=None, targets=internal_primitive['targets']) primitives.append(primitive) return primitives