diff --git a/oscurart_mesh_cache_tools.py b/oscurart_mesh_cache_tools.py index 23e26b789471262b2e8f64547ae11bd4abb170cf..3aad15d0fef4d069ba40c1c40bfeac235c6d4496 100755 --- a/oscurart_mesh_cache_tools.py +++ b/oscurart_mesh_cache_tools.py @@ -35,56 +35,55 @@ class OscEPc2ExporterPanel(bpy.types.Panel): def draw(self, context): layout = self.layout - obj = context.object - row= layout.column(align=1) - row.prop(bpy.context.scene,"muu_pc2_folder",text="Folder") - row.operator("import_shape.pc2_copy" , icon='FILESEL', text="Set Filepath") + obj = context.object + row = layout.column(align=1) + row.prop(bpy.context.scene, "muu_pc2_folder", text="Folder") + row.operator("import_shape.pc2_copy", icon='FILESEL', text="Set Filepath") row = layout.box().column(align=1) row.label("EXPORTER:") - row.operator("group.linked_group_to_local", text="Linked To Local" , icon="LINKED") - row.operator("object.remove_subsurf_modifier" , text="Remove Gen Modifiers" , icon="MOD_SUBSURF") - row.operator("export_shape.pc2_selection", text="Export!" , icon="POSE_DATA") + row.operator("group.linked_group_to_local", text="Linked To Local", icon="LINKED") + row.operator("object.remove_subsurf_modifier", text="Remove Gen Modifiers", icon="MOD_SUBSURF") + row.operator("export_shape.pc2_selection", text="Export!", icon="POSE_DATA") #row.prop(bpy.context.scene,"muu_pc2_rotx", text= "RotX90") - row.prop(bpy.context.scene,"muu_pc2_world_space", text="World Space") - #row.prop(bpy.context.scene,"muu_pc2_modifiers", text="Apply Modifiers") - #row.prop(bpy.context.scene,"muu_pc2_subsurf", text="Turn Off SubSurf") + row.prop(bpy.context.scene, "muu_pc2_world_space", text="World Space") + #row.prop(bpy.context.scene,"muu_pc2_modifiers", text="Apply Modifiers") + #row.prop(bpy.context.scene,"muu_pc2_subsurf", text="Turn Off SubSurf") row = layout.column(align=1) - row.prop(bpy.context.scene,"muu_pc2_start", text="Frame Start") - row.prop(bpy.context.scene,"muu_pc2_end", text="Frame End") - row.prop_search(bpy.context.scene, "muu_pc2_group", bpy.data, "groups", text= "") + row.prop(bpy.context.scene, "muu_pc2_start", text="Frame Start") + row.prop(bpy.context.scene, "muu_pc2_end", text="Frame End") + row.prop_search(bpy.context.scene, "muu_pc2_group", bpy.data, "groups", text="") row = layout.box().column(align=1) row.label("IMPORTER:") - row.operator("import_shape.pc2_selection", text="Import", icon="POSE_DATA") - + row.operator("import_shape.pc2_selection", text="Import", icon="POSE_DATA") + def OscFuncExportPc2(self): start = bpy.context.scene.muu_pc2_start end = bpy.context.scene.muu_pc2_end folderpath = bpy.context.scene.muu_pc2_folder - - + for ob in bpy.data.groups[bpy.context.scene.muu_pc2_group].objects[:]: pc2list = [] if ob.type == "MESH": - with open("%s/%s.pc2" % (os.path.normpath(folderpath),ob.name), mode="wb") as file: + with open("%s/%s.pc2" % (os.path.normpath(folderpath), ob.name), mode="wb") as file: #encabezado - headerFormat='<12siiffi' - headerStr = struct.pack(headerFormat, - b'POINTCACHE2\0', 1, len(ob.data.vertices[:]), 0, 1.0, (end+1)-start) - file.write(headerStr) + headerFormat = '<12siiffi' + headerStr = struct.pack(headerFormat, + b'POINTCACHE2\0', 1, len(ob.data.vertices[:]), 0, 1.0, (end + 1) - start) + file.write(headerStr) #bakeado - obmat = ob.matrix_world - for frame in range((end+1)-start): - print("Percentage of %s bake: %s " % ( ob.name, frame/end*100)) - bpy.context.scene.frame_set(frame) + obmat = ob.matrix_world + for frame in range((end + 1) - start): + print("Percentage of %s bake: %s " % (ob.name, frame / end * 100)) + bpy.context.scene.frame_set(frame) me = bpy.data.meshes.new_from_object( scene=bpy.context.scene, object=ob, apply_modifiers=True, settings="RENDER", calc_tessface=True, - calc_undeformed=False) + calc_undeformed=False) #rotate - if bpy.context.scene.muu_pc2_world_space: + if bpy.context.scene.muu_pc2_world_space: me.transform(obmat) me.calc_normals() #creo archivo @@ -92,29 +91,29 @@ def OscFuncExportPc2(self): pc2list.append(( float(vert.co[0]), float(vert.co[1]), - float(vert.co[2]) + float(vert.co[2]) )) - #dreno mesh - bpy.data.meshes.remove(me) - + #dreno mesh + bpy.data.meshes.remove(me) + print("%s Bake finished! \nAwaiting Compile file..." % (ob.name)) - + # write file - for i,frame in enumerate(pc2list): + for i, frame in enumerate(pc2list): #print("Percentage of %s Compiled file: %s " % ( ob.name, i*100/len(pc2list))) - file.write(struct.pack("<3f", *frame)) - print("%s File Compiled Write finished!" % (ob.name)) + file.write(struct.pack("<3f", *frame)) + print("%s File Compiled Write finished!" % (ob.name)) del(pc2list) - - print("Bake Finished!") - + + print("Bake Finished!") + class OscPc2ExporterBatch(bpy.types.Operator): bl_idname = "export_shape.pc2_selection" bl_label = "Export pc2 for selected Objects" bl_description = "Export pc2 for selected Objects" bl_options = {'REGISTER', 'UNDO'} - + def execute(self, context): OscFuncExportPc2(self) return {'FINISHED'} @@ -123,8 +122,8 @@ class OscRemoveSubsurf(bpy.types.Operator): bl_idname = "object.remove_subsurf_modifier" bl_label = "Remove SubSurf Modifier" bl_description = "Remove SubSurf Modifier" - bl_options = {'REGISTER', 'UNDO'} - + bl_options = {'REGISTER', 'UNDO'} + def execute(self, context): GENERATE = ['MULTIRES', 'ARRAY', 'BEVEL', 'BOOLEAN', 'BUILD', 'DECIMATE', 'MASK', 'MIRROR', 'REMESH', 'SCREW', 'SKIN', 'SOLIDIFY', 'SUBSURF', 'TRIANGULATE'] for OBJ in bpy.data.groups[bpy.context.scene.muu_pc2_group].objects[:]: @@ -138,16 +137,16 @@ class OscPc2iMporterBatch(bpy.types.Operator): bl_idname = "import_shape.pc2_selection" bl_label = "Import pc2 for selected Objects" bl_description = "Import pc2 for selected Objects" - bl_options = {'REGISTER', 'UNDO'} + bl_options = {'REGISTER', 'UNDO'} def execute(self, context): for OBJ in bpy.context.selected_objects[:]: - MOD=OBJ.modifiers.new("MeshCache", 'MESH_CACHE') - MOD.filepath="%s%s%s.pc2" % (bpy.context.scene.muu_pc2_folder,os.sep,OBJ.name) - MOD.cache_format = "PC2" + MOD = OBJ.modifiers.new("MeshCache", 'MESH_CACHE') + MOD.filepath = "%s%s%s.pc2" % (bpy.context.scene.muu_pc2_folder, os.sep, OBJ.name) + MOD.cache_format = "PC2" MOD.forward_axis = "POS_Y" MOD.up_axis = "POS_Z" - MOD.flip_axis = set(()) + MOD.flip_axis = set(()) return {'FINISHED'} @@ -155,42 +154,40 @@ class OscPc2iMporterCopy(bpy.types.Operator): bl_idname = "import_shape.pc2_copy" bl_label = "Copy Filepath" bl_description = "Copy Filepath" - bl_options = {'REGISTER', 'UNDO'} + bl_options = {'REGISTER', 'UNDO'} def execute(self, context): - bpy.context.scene.muu_pc2_folder=str(bpy.data.filepath.rpartition(os.sep)[0]) + bpy.context.scene.muu_pc2_folder = str(bpy.data.filepath.rpartition(os.sep)[0]) return {'FINISHED'} def OscLinkedGroupToLocal(): ACTOBJ = bpy.context.active_object GROBJS = [ob for ob in ACTOBJ.id_data.dupli_group.objects[:] if ob.type == "MESH"] - for ob in ACTOBJ.id_data.dupli_group.objects[:]: + for ob in ACTOBJ.id_data.dupli_group.objects[:]: bpy.context.scene.objects.link(ob) NEWGROUP = bpy.data.groups.new("%s_CLEAN" % (ACTOBJ.name)) - bpy.context.scene.objects.unlink(ACTOBJ) - NEWOBJ = [] + bpy.context.scene.objects.unlink(ACTOBJ) + NEWOBJ = [] for ob in GROBJS: - NEWGROUP.objects.link(ob) - NEWOBJ.append(ob) - for ob in NEWOBJ: - if ob.type == "MESH": + NEWGROUP.objects.link(ob) + NEWOBJ.append(ob) + for ob in NEWOBJ: + if ob.type == "MESH": if len(ob.modifiers): for MODIFIER in ob.modifiers[:]: if MODIFIER.type == "SUBSURF" or MODIFIER.type == "MASK": - ob.modifiers.remove(MODIFIER) - - + ob.modifiers.remove(MODIFIER) + class OscGroupLinkedToLocal(bpy.types.Operator): bl_idname = "group.linked_group_to_local" bl_label = "Group Linked To Local" bl_description = "Group Linked To Local" - bl_options = {'REGISTER', 'UNDO'} + bl_options = {'REGISTER', 'UNDO'} def execute(self, context): OscLinkedGroupToLocal() return {'FINISHED'} - def register(): bpy.utils.register_module(__name__) @@ -199,8 +196,4 @@ def unregister(): bpy.utils.unregister_module(__name__) if __name__ == "__main__": - register() - - - -import bpy \ No newline at end of file + register() \ No newline at end of file