# Author: PerfectionCat # SWITCH_use_axis import bpy flipx = 1.0 if use_x_axis: flipx = -1.0 flipy = 1.0 if use_y_axis: flipy = -1.0 flipz = 1.0 if use_z_axis: flipz = -1.0 if( (use_x_axis ) | (use_y_axis ) | (use_z_axis )): for ob in bpy.data.objects: if ob.select: objname = ob.name verts = [] faces = [] edges = [] meshname = '' oldmesh = bpy.data.objects[objname].data obmesh = oldmesh.copy() oborigin = bpy.data.objects[objname].location meshname = oldmesh.name for vert in obmesh.vertices: x = vert.co[0] * flipx y = vert.co[1] * flipy z = vert.co[2] * flipz point = (x, y, z) verts.append(point) for edge in obmesh.edges: if use_x_axis: edges.append((edge.vertices[0], edge.vertices[1])) elif use_y_axis: edges.append((edge.vertices[0], edge.vertices[1])) elif use_z_axis: edges.append((edge.vertices[1], edge.vertices[0])) for face in obmesh.faces: if(len(face.vertices) == 4): if use_x_axis: faces.append((face.vertices[3],face.vertices[2], face.vertices[1], face.vertices[0])) elif use_y_axis: faces.append((face.vertices[3],face.vertices[2], face.vertices[1], face.vertices[0])) elif use_z_axis: faces.append((face.vertices[1],face.vertices[0], face.vertices[3], face.vertices[2])) else: if use_x_axis: faces.append((face.vertices[2], face.vertices[1], face.vertices[0])) elif use_y_axis: faces.append((face.vertices[2], face.vertices[1], face.vertices[0])) elif use_z_axis: faces.append((face.vertices[1],face.vertices[0], face.vertices[2])) oldmesh.user_clear() bpy.data.meshes.remove( oldmesh ) newMesh = bpy.data.meshes.new(meshname) newMesh.from_pydata(verts, edges, faces) for material in obmesh.materials: newMesh.materials.append(material) idx = 0 for vert in newMesh.vertices: vert.bevel_weight = obmesh.vertices[idx].bevel_weight idx += 1 idx = 0 for face in newMesh.faces: face.use_smooth = obmesh.faces[idx].use_smooth face.material_index = obmesh.faces[idx].material_index idx += 1 idx = 0 for edge in newMesh.edges: edge.bevel_weight = obmesh.edges[idx].bevel_weight edge.crease = obmesh.edges[idx].crease edge.is_fgon = obmesh.edges[idx].is_fgon edge.is_loose = obmesh.edges[idx].is_loose edge.use_edge_sharp = obmesh.edges[idx].use_edge_sharp edge.use_seam = obmesh.edges[idx].use_seam idx += 1 idx = 0 for l in obmesh.layers_float: newMesh.layers_float.new() newMesh.layers_float[idx].name = l.name colidx = 0 for col in l.data: newMesh.layers_float[idx].data[colidx].value = col.value colidx += 1 idx += 1 idx = 0 for l in obmesh.layers_int: newMesh.layers_int.new() newMesh.layers_int[idx].name = l.name colidx = 0 for col in l.data: newMesh.layers_int[idx].data[colidx].value = col.value colidx += 1 idx += 1 idx = 0 for l in obmesh.layers_string: newMesh.layers_string.new() newMesh.layers_string[idx].name = l.name colidx = 0 for col in l.data: newMesh.layers_string[idx].data[colidx].value = col.value colidx += 1 idx += 1 idx = 0 for l in obmesh.sticky: newMesh.sticky.new() newMesh.sticky[idx].co = l.co idx += 1 idx = 0 for l in obmesh.uv_textures: newMesh.uv_textures.new() newMesh.uv_textures[idx].name = l.name newMesh.uv_textures[idx].active = l.active newMesh.uv_textures[idx].active_clone = l.active_clone newMesh.uv_textures[idx].active_render = l.active_render texidx = 0 for tex in l.data: newMesh.uv_textures[idx].data[texidx].blend_type = tex.blend_type newMesh.uv_textures[idx].data[texidx].hide = tex.hide newMesh.uv_textures[idx].data[texidx].pin_uv = tex.pin_uv newMesh.uv_textures[idx].data[texidx].select_uv = tex.select_uv newMesh.uv_textures[idx].data[texidx].use_alpha_sort = tex.use_alpha_sort newMesh.uv_textures[idx].data[texidx].use_billboard = tex.use_billboard newMesh.uv_textures[idx].data[texidx].use_bitmap_text = tex.use_bitmap_text newMesh.uv_textures[idx].data[texidx].use_blend_shared = tex.use_blend_shared newMesh.uv_textures[idx].data[texidx].use_collision = tex.use_collision newMesh.uv_textures[idx].data[texidx].use_halo = tex.use_halo newMesh.uv_textures[idx].data[texidx].use_image = tex.use_image newMesh.uv_textures[idx].data[texidx].use_light = tex.use_light newMesh.uv_textures[idx].data[texidx].use_object_color = tex.use_object_color newMesh.uv_textures[idx].data[texidx].use_shadow_cast = tex.use_shadow_cast newMesh.uv_textures[idx].data[texidx].use_twoside = tex.use_twoside newMesh.uv_textures[idx].data[texidx].uv = tex.uv newMesh.uv_textures[idx].data[texidx].uv1 = tex.uv1 newMesh.uv_textures[idx].data[texidx].uv2 = tex.uv2 newMesh.uv_textures[idx].data[texidx].uv3 = tex.uv3 newMesh.uv_textures[idx].data[texidx].uv4 = tex.uv4 newMesh.uv_textures[idx].data[texidx].uv_raw = tex.uv_raw newMesh.uv_textures[idx].data[texidx].image = tex.image texidx += 1 idx += 1 idx = 0 for l in obmesh.vertex_colors: newMesh.vertex_colors.new() newMesh.vertex_colors[idx].name = l.name newMesh.vertex_colors[idx].active = l.active newMesh.vertex_colors[idx].active_render = l.active_render colidx = 0 for col in l.data: newMesh.vertex_colors[idx].data[colidx].color1 = col.color1 newMesh.vertex_colors[idx].data[colidx].color2 = col.color2 newMesh.vertex_colors[idx].data[colidx].color3 = col.color3 newMesh.vertex_colors[idx].data[colidx].color4 = col.color4 colidx += 1 idx += 1 newMesh.auto_smooth_angle = obmesh.auto_smooth_angle newMesh.show_all_edges = obmesh.show_all_edges newMesh.show_double_sided = obmesh.show_double_sided newMesh.show_edge_bevel_weight = obmesh.show_edge_bevel_weight newMesh.show_edge_crease = obmesh.show_edge_crease newMesh.show_edge_seams = obmesh.show_edge_seams newMesh.show_edge_sharp = obmesh.show_edge_sharp newMesh.show_edges = obmesh.show_edges newMesh.show_extra_edge_length = obmesh.show_extra_edge_length newMesh.show_extra_face_area = obmesh.show_extra_face_area newMesh.show_faces = obmesh.show_faces newMesh.show_normal_face = obmesh.show_normal_face newMesh.show_normal_vertex = obmesh.show_normal_vertex newMesh.texco_mesh = obmesh.texco_mesh #newMesh.texspace_location = obmesh.texspace_location #newMesh.texspace_size = obmesh.texspace_size newMesh.texture_mesh = obmesh.texture_mesh newMesh.use_auto_smooth = obmesh.use_auto_smooth newMesh.use_auto_texspace = obmesh.use_auto_texspace newMesh.use_mirror_topology = obmesh.use_mirror_topology newMesh.use_mirror_x = obmesh.use_mirror_x newMesh.use_paint_mask = obmesh.use_paint_mask newMesh.uv_texture_clone = obmesh.uv_texture_clone newMesh.uv_texture_clone_index = obmesh.uv_texture_clone_index newMesh.uv_texture_stencil = obmesh.uv_texture_stencil newMesh.uv_texture_stencil_index = obmesh.uv_texture_stencil_index newMesh.update() bpy.data.objects[objname].data = newMesh if use_x_axis: bpy.data.objects[objname].location = (oborigin[0]*(-1.0), oborigin[1], oborigin[2]) bpy.data.objects[objname].rotation_euler[0] *= (1.0) bpy.data.objects[objname].rotation_euler[1] *= (-1.0) bpy.data.objects[objname].rotation_euler[2] *= (-1.0) elif use_y_axis: bpy.data.objects[objname].location = (oborigin[0], oborigin[1]*(-1.0), oborigin[2]) bpy.data.objects[objname].rotation_euler[0] *= (-1.0) bpy.data.objects[objname].rotation_euler[1] *= (1.0) bpy.data.objects[objname].rotation_euler[2] *= (-1.0) elif use_z_axis: bpy.data.objects[objname].location = (oborigin[0], oborigin[1], oborigin[2]*(-1.0)) bpy.data.objects[objname].rotation_euler[0] *= (-1.0) bpy.data.objects[objname].rotation_euler[1] *= (-1.0) bpy.data.objects[objname].rotation_euler[2] *= (1.0) bpy.data.meshes.remove(obmesh)