def get_materials(just_selected=False): materials = OrderedDict() material_counter = {} for group in utils.get_mesh_export_nodes(just_selected): material_counter[group.name] = 0 for object in group.objects: for slot in object.material_slots: if slot.material is None: continue if slot.material not in materials: node_name = utils.get_node_name(group) node, index, name, physics = get_material_parts( node_name, slot.material.name) # check if material has no position defined if index == 0: material_counter[group.name] += 1 index = material_counter[group.name] materials[slot.material] = "{}__{:02d}__{}__{}".format( node, index, name, physics) return materials
def _export_library_visual_scenes(self, parent_element): current_element = self._doc.createElement("library_visual_scenes") visual_scene = self._doc.createElement("visual_scene") visual_scene.setAttribute("id", "scene") visual_scene.setAttribute("name", "scene") current_element.appendChild(visual_scene) parent_element.appendChild(current_element) if utils.get_mesh_export_nodes(self._config.export_selected_nodes): if utils.are_duplicate_nodes(): message = "Duplicate Node Names" bpy.ops.screen.display_error('INVOKE_DEFAULT', message=message) for group in utils.get_mesh_export_nodes( self._config.export_selected_nodes): self._write_export_node(group, visual_scene) else: pass # TODO: Handle No Export Nodes Error
def _export_library_controllers(self, parent_element): library_node = self._doc.createElement("library_controllers") ALLOWED_NODE_TYPES = ('chr', 'skin') for group in utils.get_mesh_export_nodes( self._config.export_selected_nodes): node_type = utils.get_node_type(group) if node_type in ALLOWED_NODE_TYPES: for object_ in group.objects: if not utils.is_bone_geometry(object_): armature = utils.get_armature_for_object(object_) if armature is not None: self._process_bones(library_node, group, object_, armature) parent_element.appendChild(library_node)
def get_materials(just_selected=False): materials = OrderedDict() material_counter = {} for group in utils.get_mesh_export_nodes(just_selected): material_counter[group.name] = 0 for object in group.objects: for i in range(0, len(object.material_slots)): slot = object.material_slots[i] material = slot.material if material is None: continue if material not in materials.values(): node_name = utils.get_node_name(group) material.name = utils.replace_invalid_rc_characters( material.name) for image in get_textures(material): try: image.name = utils.replace_invalid_rc_characters( image.name) except AttributeError: pass node, index, name, physics = get_material_parts( node_name, slot.material.name) # check if material has no position defined if index == 0: material_counter[group.name] += 1 index = material_counter[group.name] material_name = "{}__{:02d}__{}__{}".format( node, index, name, physics) materials[material_name] = material return sort_materials_by_names(materials)
def _export_library_geometries(self, parent_element): libgeo = self._doc.createElement("library_geometries") parent_element.appendChild(libgeo) for group in utils.get_mesh_export_nodes( self._config.export_selected_nodes): for object_ in group.objects: if object_.type != 'MESH': continue bmesh_, layer_state, scene_layer = utils.get_bmesh(object_) geometry_node = self._doc.createElement("geometry") geometry_name = utils.get_geometry_name(group, object_) geometry_node.setAttribute("id", geometry_name) mesh_node = self._doc.createElement("mesh") print() bcPrint('"{}" object is being processed...'.format( object_.name)) start_time = clock() self._write_positions(bmesh_, mesh_node, geometry_name) bcPrint('Positions have been writed {:.4f} seconds.'.format( clock() - start_time)) start_time = clock() self._write_normals(object_, bmesh_, mesh_node, geometry_name) bcPrint('Normals have been writed {:.4f} seconds.'.format( clock() - start_time)) start_time = clock() self._write_uvs(object_, bmesh_, mesh_node, geometry_name) bcPrint( 'UVs have been writed {:.4f} seconds.'.format(clock() - start_time)) start_time = clock() self._write_vertex_colors(object_, bmesh_, mesh_node, geometry_name) bcPrint( 'Vertex colors have been writed {:.4f} seconds.'.format( clock() - start_time)) start_time = clock() self._write_vertices(mesh_node, geometry_name) bcPrint('Vertices have been writed {:.4f} seconds.'.format( clock() - start_time)) start_time = clock() self._write_triangle_list(object_, bmesh_, mesh_node, geometry_name) bcPrint( 'Triangle list have been writed {:.4f} seconds.'.format( clock() - start_time)) extra = self._create_double_sided_extra("MAYA") mesh_node.appendChild(extra) geometry_node.appendChild(mesh_node) libgeo.appendChild(geometry_node) utils.clear_bmesh(object_, layer_state, scene_layer) bcPrint('"{}" object has been processed for "{}" node.'.format( object_.name, group.name))