From c5b55df8b51888c4511401fa68ee0792ec942285 Mon Sep 17 00:00:00 2001 From: John Phan <darkneter@gmail.com> Date: Sun, 15 Apr 2012 15:55:18 +0000 Subject: [PATCH] update a bit of animation import a bit. --- io_export_unreal_psk_psa.py | 2 +- io_import_scene_unreal_psk.py | 558 ++++------------------------------ 2 files changed, 67 insertions(+), 493 deletions(-) diff --git a/io_export_unreal_psk_psa.py b/io_export_unreal_psk_psa.py index 642038e36..ff728f7f3 100644 --- a/io_export_unreal_psk_psa.py +++ b/io_export_unreal_psk_psa.py @@ -2052,7 +2052,7 @@ class OBJECT_OT_UTSelectedFaceSmooth(bpy.types.Operator): for i in bpy.context.scene.objects: i.select = False #deselect all objects obj.select = True #set current object select bpy.context.scene.objects.active = obj #set active object - for face in obj.data.faces: + for face in obj.data.tessfaces: if face.use_smooth == True: face.select = True smoothcount += 1 diff --git a/io_import_scene_unreal_psk.py b/io_import_scene_unreal_psk.py index d8fdcccc1..9d583436f 100644 --- a/io_import_scene_unreal_psk.py +++ b/io_import_scene_unreal_psk.py @@ -20,7 +20,7 @@ bl_info = { "name": "Import Unreal Skeleton Mesh (.psk)", "author": "Darknet", "version": (2, 1), - "blender": (2, 6, 2), + "blender": (2, 6, 3), "location": "File > Import > Skeleton Mesh (.psk)", "description": "Import Skeleleton Mesh", "warning": "", @@ -74,13 +74,6 @@ skala = 1 flipyz = False flipuv = True -""" -def unpack_list(list_of_tuples): - l = [] - for t in list_of_tuples: - l.extend(t) - return l -""" #pack read words def word(long): s='' @@ -154,289 +147,7 @@ def drawmesh(): ob.vertex_groups.new(namebone) me_ob.update() bpy.context.scene.objects.link(ob) -def drawmesh4(): - global DEBUGLOG, plik,vertexes,uvcoord,faceslist,num_faces,facemat,facesmooth,m - global vertexes_ids,bonesdata,meshesdata,groups,num_materials,skala,flipyz,flipuv,mat_faceslist - global vertices,faces - print("CREATING MESH") - me_ob = bpy.data.meshes.new('testmesh') - print("CREATING BMESH") - bm = bmesh.new() # create an empty BMesh - #print(dir(bm)) - bm.from_mesh(me_ob) # fill it in from a Mesh - - #print("CREATING:") - - #vertices - #print("-VERTICES") - #for v_co in vertices: - #bm.verts.new(v_co) - - #faces - #print("-FACES") - for f_idx in faces: - #face idx - bm.faces.new([bm.verts[i] for i in f_idx]) - - print("-FACE SMOOTHS") - for face in bm.faces: - face.smooth = facesmooth[face.index] - - bm.to_mesh(me_ob) #write mesh - ob = bpy.data.objects.new("TestObject",me_ob) - me_ob.update() #update object - bpy.context.scene.objects.link(ob) #link to scene - - #print(dir(bm)) - - #create vertex group - for bone_id in range(len(bonesdata)): - bonedata = bonesdata[str(bone_id)] - namebone = bonedata[0]#.strip()[-25:] - #print("NAME:",namebone) - ob.vertex_groups.new(namebone) - - #print("CREATING > Assign Weights") - - - materialname = "pskmat" - psktexname = "psktex" - - me_ob.uv_textures.new() - for matcount in range(1): - matdata = bpy.data.materials.new(materialname + str(1)) - me_ob.materials.append(matdata) - - - print(dir(me_ob)) - #me_ob.tessface_uv_textures.new(name=psktexname) - #me_ob.uv_textures.new(name=psktexname) - #me_ob.uv_textures[0].active =True - - #print((me_ob.uv_textures[0].name)) - #print(dir(me_ob.uv_textures[0])) - #for uv in me_ob.uv_textures: - #print(dir(uv.data[0])) - - """ - print("NEW TEXTURE") - me_ob.uv_textures.new() - - print("CREATING UV") - for uv in me_ob.uv_textures: - #print(len(uv.data)) - for face in bm.faces: - print(dir(face.verts[0])) - #print(dir(uv.data[face.index].image)) - #print(dir(uv.data[face.index])) - - print("CREATING > Vertex Group") - """ - bpy.context.scene.update() -def drawmesh3(): - global DEBUGLOG, plik,vertexes,uvcoord,faceslist,num_faces,facemat,facesmooth,m - global vertexes_ids,bonesdata,meshesdata,groups,num_materials,skala,flipyz,flipuv,mat_faceslist - global vertices,faces - print("CREATING MESH") - me_ob = bpy.data.meshes.new('testmesh') - print("CREATING BMESH") - bm = bmesh.new() # create an empty BMesh - #print(dir(bm)) - bm.from_mesh(me_ob) # fill it in from a Mesh - - print("CREATING:") - - #vertices - print("-VERTICES") - for v_co in vertices: - bm.verts.new(v_co) - - #faces - print("-FACES") - for f_idx in faces: - #face idx - bm.faces.new([bm.verts[i] for i in f_idx]) - - print("-FACE SMOOTHS") - for face in bm.faces: - face.smooth = facesmooth[face.index] - - bm.to_mesh(me_ob) #write mesh - ob = bpy.data.objects.new("TestObject",me_ob) - me_ob.update() #update object - bpy.context.scene.objects.link(ob) #link to scene - - #print(dir(bm)) - - #create vertex group - for bone_id in range(len(bonesdata)): - bonedata = bonesdata[str(bone_id)] - namebone = bonedata[0]#.strip()[-25:] - #print("NAME:",namebone) - ob.vertex_groups.new(namebone) - - #print("CREATING > Assign Weights") - - - materialname = "pskmat" - psktexname = "psktex" - - me_ob.uv_textures.new() - for matcount in range(1): - matdata = bpy.data.materials.new(materialname + str(1)) - me_ob.materials.append(matdata) - - - print(dir(me_ob)) - me_ob.tessface_uv_textures.new(name=psktexname) - #me_ob.uv_textures.new(name=psktexname) - #me_ob.uv_textures[0].active =True - - #print((me_ob.uv_textures[0].name)) - #print(dir(me_ob.uv_textures[0])) - #for uv in me_ob.uv_textures: - #print(dir(uv.data[0])) - - """ - print("NEW TEXTURE") - me_ob.uv_textures.new() - - print("CREATING UV") - for uv in me_ob.uv_textures: - #print(len(uv.data)) - for face in bm.faces: - print(dir(face.verts[0])) - #print(dir(uv.data[face.index].image)) - #print(dir(uv.data[face.index])) - - print("CREATING > Vertex Group") - """ - bpy.context.scene.update() -def drawmesh1(): - global DEBUGLOG, plik,vertexes,uvcoord,faceslist,num_faces,facemat,facesmooth,m - global vertexes_ids,bonesdata,meshesdata,groups,num_materials,skala,flipyz,flipuv,mat_faceslist - global vertices,faces - print(faces[0]) - me_ob = bpy.data.meshes.new('testmesh') - #obmesh = bpy.data.objects.new('testdata',me_ob) - #uvtex = me_ob.uv_textures.new(name="pskuvtexture") - #uvtex = me_ob.tessface_uv_textures.new(name="pskuvtexture") - - #material = bpy.data.materials.new('pskmat') - #me_ob.materials.append(material) - #uvtex = me_ob.uv_textures.new('pskuvtexture') - - #create mesh - #me_ob.from_pydata(vertexes,[],faceslist)#create the faces and vertices - - me_ob.vertices.add(len(vertices)) - me_ob.tessfaces.add(len(faces)) - me_ob.vertices.foreach_set("co", unpack_list(vertices)) - me_ob.tessfaces.foreach_set("vertices_raw",unpack_list( faces)) - - - - #bm = bmesh.new() # create an empty BMesh - #print(dir(bm)) - #bm.from_mesh(me_ob) # fill it in from a Mesh - - - #for v_co in vertices: - #bm.verts.new(v_co) - #for f_idx in faces: - #bm.faces.new([bm.verts[i] for i in f_idx]) - - - #bm.to_mesh(me_ob) - ob = bpy.data.objects.new("TestObject",me_ob) - me_ob.update() - bpy.context.scene.objects.link(ob) - - #set face smooth list boolean - #for face in bm.faces: - #face.smooth = facesmooth[face.index] - #bm.uv_textures.new() - #print(dir(bm)) - #bm.verts.foreach_set("co", vertices) - #bm.faces.add(len(faces)) - #bm.faces.foreach_set("vertices_raw", faces) - - #print(dir(me_ob)) - #print(dir(bm)) - - #print(dir(uvtex.data[0].image)) - #for countm in range(len(me_ob.uv_textures)): - #me_ob.update() - #uvtex = me_ob.uv_textures[countm] #add one uv texture - #me_ob.update() - #for i, face in enumerate(bm.faces): - #print(dir(face)) - - - - - #texture - #texture = bpy.data.textures.new(name="texture",type='IMAGE') - #material - #matdata = bpy.data.materials.new(name="pskmat") - #mtex = matdata.texture_slots.add() - #mtex.texture = texture - #mtex.texture_coords = 'UV' - #mtex.use_map_color_diffuse = True - #mtex.use_map_alpha = True - #uvtex = me_ob.uv_textures[0] - - #print(dir(uvtex.data[0])) - #print(dir(uvtex.data[0].image)) - #print(dir(texture)) - - #for i, face in enumerate(bm.faces): - #print(face.material_index) - #face.material_index = faceuv[i][1] - #blender_tface = uvtex.data[i].image #face - """ - - #mesh vertex group #not done - #create vertex group - for bone_id in range(len(bonesdata)): - bonedata = bonesdata[str(bone_id)] - namebone = bonedata[0]#.strip()[-25:] - obmesh.vertex_groups.new(namebone) - #assgin group - for m in range(len(groups)): - data = groups[m] - w = float(data[0]) - v_id = data[1] - gr = data[2] - gr = bonenames[gr] - - #for vgroup in obmesh.vertex_groups: - #print(vgroup.name,":",vgroup.index) - - for vgp in RWghts: - #bone index - if vgp[1] == vgroup.index: - #print(vgp) - #[vertex id],weight - vgroup.add([vgp[0]], vgp[2], 'ADD') - """ - - - # Finish up, write the bmesh back to the mesh - #bm.to_mesh(me_ob) - - - - #print((uvtex.name)) - #print((uvtex.data)) - #print(dir(uvtex)) - #print(dir(uvtex.data[0].image)) - #print(type(uvtex.data[0].image)) - - - - #bpy.context.scene.objects.link(obmesh) - bpy.context.scene.update() + #Create Armature def check_armature(): global DEBUGLOG, plik,vertexes,uvcoord,faceslist,num_faces,facemat,facesmooth,m @@ -802,6 +513,67 @@ def pskimport(filename,importmesh,importbone,bDebugLogPSK,importmultiuvtextures) print ("IMPORTER PSK Blender 2.6 completed") #End of def pskimport######################### +def psaimport(filename): + global plik,bonesdata,animdata,anim_offset,animation_names + bonesdata = {} + animation_names = [] + animation_num_bones = [] + animation_num_keys = [] + animation_loc_keys = [] + animation_rot_keys = [] + animdata = {} + plik = open(filename,'rb') + print (word(20),i(3)) + + #-------BONES------ + #check_armature_for_psa() + print (word(20)) + data = i(3) + #print data + num_bones = data[2] + for m in range(num_bones): + bonesdata[str(m)] = [] + name = word(64) + bonesdata[str(m)].append(name) + bonesdata[str(m)].append(i(3)) + bonesdata[str(m)].append(f(11)) + + + #--------ANIMATIONS-INFO + print (word(20)) + data = i(3) + #print data + for m in range(data[2]): + name_animation = word(64)#name animation + print("NAME:",name_animation) + animation_names.append(name_animation) + word(64)#name of owner of animation ? + data = i(4)#num bones - 0 - 0 - num keys for all bones for this animation + num_bones = data[0] + animation_num_bones.append(num_bones) + f(3) + data = i(3) + num_keys = data[2] + animation_num_keys.append(num_keys) + print (plik.tell()) + + #--------ANIMATIONS-KEYS + print (word(20)) + data = i(3) + #print data + anim_offset = {} + seek = plik.tell() + for m in range(len(animation_names)): + anim_name = animation_names[m] + anim_bones = animation_num_bones[m] + anim_keys = animation_num_keys[m] + anim_offset[anim_name] = [] + anim_offset[anim_name].append(seek) + anim_offset[anim_name].append(anim_keys) + anim_offset[anim_name].append(anim_bones) + seek+=anim_keys*anim_bones*32 + + def getInputFilename(self,filename,importmesh,importbone,bDebugLogPSK,importmultiuvtextures): checktype = filename.split('\\')[-1].split('.')[1] print ("------------",filename) @@ -932,7 +704,8 @@ class OBJECT_OT_PSAPath(bpy.types.Operator): options={'HIDDEN'}, ) def execute(self, context): - context.scene.importpsapath = self.properties.filepath + #context.scene.importpsapath = self.properties.filepath + psaimport(self.filepath) return {'FINISHED'} def invoke(self, context, event): @@ -941,7 +714,7 @@ class OBJECT_OT_PSAPath(bpy.types.Operator): class OBJECT_OT_Path(bpy.types.Operator): bl_idname = "object.path" - bl_label = "MESH BUILD" + bl_label = "MESH BUILD TEST" __doc__ = "" # generic transform props view_align = BoolProperty( @@ -991,206 +764,7 @@ class OBJECT_OT_Path(bpy.types.Operator): #print(dir(uv.data[0])) #print(dir(uv.data[0].uv1)) return {'RUNNING_MODAL'} -""" -class OBJECT_OT_Path(bpy.types.Operator): - bl_idname = "object.path" - bl_label = "MESH BUILD" - __doc__ = "" - # generic transform props - view_align = BoolProperty( - name="Align to View", - default=False, - ) - location = FloatVectorProperty( - name="Location", - subtype='TRANSLATION', - ) - rotation = FloatVectorProperty( - name="Rotation", - subtype='EULER', - ) - def execute(self, context): - return {'FINISHED'} - - def invoke(self, context, event): - me = bpy.data.meshes.new("test") - obmade = bpy.data.objects.new("TestObject",me) - print("Create Simple Mesh") - bpy.data.scenes[0].objects.link(obmade) - for i in bpy.context.scene.objects: i.select = False #deselect all objects - obmade.select = True - bpy.context.scene.objects.active = obmade - - #bpy.ops.object.mode_set(mode='EDIT') - #me.from_pydata([(0,0,0),(2,0,0),(2,0,2)],[(1,2),(2,3),(3,1)],[(1,2,3)]) - #me.from_pydata([(0,0,0),(2,0,0),(2,0,2)],[(1,2),(2,3),(3,1)],[(1,2,3)]) - verts = [(0,0,0),(2,0,0),(2,0,2)] - #faces = [([0, 1, 2])] - - faces = [] - #faces.extend([(1,2,3,0)]) - faces.extend([(0,1,2,0)]) - #print(faces[0][0]) - #print(dir(me.tessfaces)) - me.vertices.add(len(verts)) - me.vertices.foreach_set("co", unpack_list(verts)) - - me.tessfaces.add(len(faces)) - #me.tessfaces.foreach_set("vertices_raw", unpack_list(faces)) - me.tessfaces.foreach_set("vertices", unpack_list(faces)) - #me.tessfaces.foreach_set("vertices_raw", (faces)) - print(len(me.tessfaces)) - me.tessface_uv_textures.new("uvtexture") - for uv in me.tessface_uv_textures: - print(len(uv.data)) - print(dir(uv.data[0])) - bm = bmesh.new() - bm.to_mesh(me) - #for v_co in verts: - #bm.verts.new(v_co) - for f_idx in faces: - bm.faces.new([bm.verts[i] for i in f_idx]) - #bm.to_mesh(me) - #ob = bpy.data.objects.new("TestObject",me) - #me.update() - - #print(dir(me)) - #me.uv_textures.new("uvtexture") - #for uv in me.uv_textures: - #print(len(uv.data)) - #from bpy_extras import object_utils - #object_utils.object_data_add(context, me, operator=self) - #ob = bpy.data.objects.new("TestObject",me) - #bpy.context.scene.objects.link(ob) - return {'RUNNING_MODAL'} -""" -""" -class OBJECT_OT_Path(bpy.types.Operator): - bl_idname = "object.path" - bl_label = "PSA Path" - __doc__ = "" - # generic transform props - view_align = BoolProperty( - name="Align to View", - default=False, - ) - location = FloatVectorProperty( - name="Location", - subtype='TRANSLATION', - ) - rotation = FloatVectorProperty( - name="Rotation", - subtype='EULER', - ) - def execute(self, context): - return {'FINISHED'} - - def invoke(self, context, event): - me = bpy.data.meshes.new("test") - #ob = bpy.data.objects.new("TestObject",me) - print("Create Simple Mesh") - #bpy.data.scenes[0].objects.link(ob) - - #me.from_pydata([(0,0,0),(2,0,0),(2,0,2)],[(1,2),(2,3),(3,1)],[(1,2,3)]) - #me.from_pydata([(0,0,0),(2,0,0),(2,0,2)],[(1,2),(2,3),(3,1)],[(1,2,3)]) - verts = [(0,0,0),(2,0,0),(2,0,2)] - faces = [(0, 1, 2)] - #faces = [([1,2,3])] - - - bm = bmesh.new() - - for v_co in verts: - bm.verts.new(v_co) - - for f_idx in faces: - bm.faces.new([bm.verts[i] for i in f_idx]) - - bm.to_mesh(me) - ob = bpy.data.objects.new("TestObject",me) - me.update() - - print(dir(me)) - me.uv_textures.new("uvtexture") - for uv in me.uv_textures: - print(len(uv.data)) - - - - - #from bpy_extras import object_utils - #object_utils.object_data_add(context, me, operator=self) - bpy.context.scene.objects.link(ob) - - return {'RUNNING_MODAL'} -""" -""" -class OBJECT_OT_Path(bpy.types.Operator): - bl_idname = "object.path" - bl_label = "PSA Path" - __doc__ = "" - # generic transform props - view_align = BoolProperty( - name="Align to View", - default=False, - ) - location = FloatVectorProperty( - name="Location", - subtype='TRANSLATION', - ) - rotation = FloatVectorProperty( - name="Rotation", - subtype='EULER', - ) - #filepath = StringProperty(name="PSA File Path", description="Filepath used for importing the PSA file", maxlen= 1024, default= "") - #filter_glob = StringProperty( - #default="*.psa", - #options={'HIDDEN'}, - #) - def execute(self, context): - #context.scene.importpsapath = self.properties.filepath - return {'FINISHED'} - - def invoke(self, context, event): - me = bpy.data.meshes.new("test") - #ob = bpy.data.objects.new("TestObject",me) - print("Create Simple Mesh") - #bpy.data.scenes[0].objects.link(ob) - - #me.from_pydata([(0,0,0),(2,0,0),(2,0,2)],[(1,2),(2,3),(3,1)],[(1,2,3)]) - #me.from_pydata([(0,0,0),(2,0,0),(2,0,2)],[(1,2),(2,3),(3,1)],[(1,2,3)]) - verts = [(0,0,0),(2,0,0),(2,0,2)] - faces = [(0, 1, 2, 3)] - #faces = [([1,2,3])] - - - bm = bmesh.new() - - for v_co in verts: - bm.verts.new(v_co) - - #for f_idx in faces: - #bm.faces.new([bm.verts[i] for i in f_idx]) - bm.to_mesh(me) - me.update() - from bpy_extras import object_utils - object_utils.object_data_add(context, me, operator=self) - - #bpy.context.scene.objects.link(me) - - #me.from_pydata(verts,[],faces) - me.vertices.add(len(verts)) - me.tessfaces.add(len(faces)) - - me.vertices.foreach_set("co", unpack_list(verts)) - me.tessfaces.foreach_set("vertices_raw", (faces))#not working - - me.update() - - #bpy.context.window_manager.fileselect_add(self) - return {'RUNNING_MODAL'} -""" #import menu panel tool bar class VIEW3D_PT_unrealimport_objectmode(bpy.types.Panel): bl_space_type = "VIEW_3D" -- GitLab