[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3351] trunk/py/scripts/addons/ io_export_unreal_psk_psa.py: add back the features.
John Phan
darkneter at gmail.com
Sat May 5 18:51:32 CEST 2012
Revision: 3351
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3351
Author: darknet
Date: 2012-05-05 16:51:32 +0000 (Sat, 05 May 2012)
Log Message:
-----------
add back the features. That was clean up from Spoof.
Modified Paths:
--------------
trunk/py/scripts/addons/io_export_unreal_psk_psa.py
Modified: trunk/py/scripts/addons/io_export_unreal_psk_psa.py
===================================================================
--- trunk/py/scripts/addons/io_export_unreal_psk_psa.py 2012-05-05 10:30:33 UTC (rev 3350)
+++ trunk/py/scripts/addons/io_export_unreal_psk_psa.py 2012-05-05 16:51:32 UTC (rev 3351)
@@ -969,6 +969,56 @@
bpy.context.scene.update()
return me_ob
+#copy mesh data and then merge them into one object
+def meshmerge(selectedobjects):
+ bpy.ops.object.mode_set(mode='OBJECT')
+ cloneobjects = []
+ if len(selectedobjects) > 1:
+ print("selectedobjects:",len(selectedobjects))
+ count = 0 #reset count
+ for count in range(len( selectedobjects)):
+ #print("Index:",count)
+ if selectedobjects[count] != None:
+ me_da = selectedobjects[count].data.copy() #copy data
+ me_ob = selectedobjects[count].copy() #copy object
+ #note two copy two types else it will use the current data or mesh
+ me_ob.data = me_da
+ bpy.context.scene.objects.link(me_ob)#link the object to the scene #current object location
+ print("Index:",count,"clone object",me_ob.name)
+ cloneobjects.append(me_ob)
+ #bpy.ops.object.mode_set(mode='OBJECT')
+ for i in bpy.data.objects: i.select = False #deselect all objects
+ count = 0 #reset count
+ #bpy.ops.object.mode_set(mode='OBJECT')
+ for count in range(len( cloneobjects)):
+ if count == 0:
+ bpy.context.scene.objects.active = cloneobjects[count]
+ print("Set Active Object:",cloneobjects[count].name)
+ cloneobjects[count].select = True
+ bpy.ops.object.join()
+ if len(cloneobjects) > 1:
+ bpy.types.Scene.udk_copy_merge = True
+ return cloneobjects[0]
+
+#sort the mesh center top list and not center at the last array. Base on order while select to merge mesh to make them center.
+def sortmesh(selectmesh):
+ print("MESH SORTING...")
+ centermesh = []
+ notcentermesh = []
+ for countm in range(len(selectmesh)):
+ if selectmesh[countm].location.x == 0 and selectmesh[countm].location.y == 0 and selectmesh[countm].location.z == 0:
+ centermesh.append(selectmesh[countm])
+ else:
+ notcentermesh.append(selectmesh[countm])
+ selectmesh = []
+ for countm in range(len(centermesh)):
+ selectmesh.append(centermesh[countm])
+ for countm in range(len(notcentermesh)):
+ selectmesh.append(notcentermesh[countm])
+ if len(selectmesh) == 1:
+ return selectmesh[0]
+ else:
+ return meshmerge(selectmesh)
#===========================================================================
# parse_mesh
@@ -1535,24 +1585,7 @@
return actions_to_export
-def sortmesh(selectmesh):
- print("MESH SORTING...")
- centermesh = []
- notcentermesh = []
- for countm in range(len(selectmesh)):
- if selectmesh[countm].location.x == 0 and selectmesh[countm].location.y == 0 and selectmesh[countm].location.z == 0:
- centermesh.append(selectmesh[countm])
- else:
- notcentermesh.append(selectmesh[countm])
- selectmesh = []
- for countm in range(len(centermesh)):
- selectmesh.append(centermesh[countm])
- for countm in range(len(notcentermesh)):
- selectmesh.append(notcentermesh[countm])
- if len(selectmesh) == 1:
- return selectmesh[0]
- else:
- return meshmerge(selectmesh)
+
#===========================================================================
# Locate the target armature and mesh for export
# RETURNS armature, mesh
@@ -1640,36 +1673,6 @@
verbose(" " + group.name)
return groups
-
-def meshmerge(selectedobjects):
- bpy.ops.object.mode_set(mode='OBJECT')
- cloneobjects = []
- if len(selectedobjects) > 1:
- print("selectedobjects:",len(selectedobjects))
- count = 0 #reset count
- for count in range(len( selectedobjects)):
- #print("Index:",count)
- if selectedobjects[count] != None:
- me_da = selectedobjects[count].data.copy() #copy data
- me_ob = selectedobjects[count].copy() #copy object
- #note two copy two types else it will use the current data or mesh
- me_ob.data = me_da
- bpy.context.scene.objects.link(me_ob)#link the object to the scene #current object location
- print("Index:",count,"clone object",me_ob.name)
- cloneobjects.append(me_ob)
- #bpy.ops.object.mode_set(mode='OBJECT')
- for i in bpy.data.objects: i.select = False #deselect all objects
- count = 0 #reset count
- #bpy.ops.object.mode_set(mode='OBJECT')
- for count in range(len( cloneobjects)):
- if count == 0:
- bpy.context.scene.objects.active = cloneobjects[count]
- print("Set Active Object:",cloneobjects[count].name)
- cloneobjects[count].select = True
- bpy.ops.object.join()
- if len(cloneobjects) > 1:
- bpy.types.Scene.udk_copy_merge = True
- return cloneobjects[0]
#===========================================================================
# Main
@@ -1878,9 +1881,246 @@
default = False)
+import bmesh
#===========================================================================
# User interface
#===========================================================================
+class OBJECT_OT_UTSelectedFaceSmooth(bpy.types.Operator):
+ bl_idname = "object.utselectfacesmooth" # XXX, name???
+ bl_label = "Select Smooth faces"
+ __doc__ = """It will only select smooth faces that is select mesh"""
+
+ def invoke(self, context, event):
+ print("----------------------------------------")
+ print("Init Select Face(s):")
+ bselected = False
+ for obj in bpy.data.objects:
+ if obj.type == 'MESH' and obj.select == True:
+ smoothcount = 0
+ flatcount = 0
+ bpy.ops.object.mode_set(mode='OBJECT')#it need to go into object mode to able to select the faces
+ 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
+ mesh = bmesh.new();
+ mesh.from_mesh(obj.data)
+ for face in mesh.faces:
+ face.select = False
+ for face in mesh.faces:
+ if face.smooth == True:
+ face.select = True
+ smoothcount += 1
+ else:
+ flatcount += 1
+ face.select = False
+ mesh.to_mesh(obj.data)
+ bpy.context.scene.update()
+ bpy.ops.object.mode_set(mode='EDIT')
+ print("Select Smooth Count(s):",smoothcount," Flat Count(s):",flatcount)
+ bselected = True
+ break
+ if bselected:
+ print("Selected Face(s) Exectue!")
+ self.report({'INFO'}, "Selected Face(s) Exectue!")
+ else:
+ print("Didn't select Mesh Object!")
+ self.report({'INFO'}, "Didn't Select Mesh Object!")
+ print("----------------------------------------")
+ return{'FINISHED'}
+
+class OBJECT_OT_MeshClearWeights(bpy.types.Operator):
+ bl_idname = "object.meshclearweights" # XXX, name???
+ bl_label = "Remove Mesh vertex weights"
+ __doc__ = """Remove all mesh vertex groups weights for the bones."""
+
+ def invoke(self, context, event):
+ for obj in bpy.data.objects:
+ if obj.type == 'MESH' and obj.select == True:
+ for vg in obj.vertex_groups:
+ obj.vertex_groups.remove(vg)
+ self.report({'INFO'}, "Mesh Vertex Groups Remove!")
+ break
+ return{'FINISHED'}
+
+def unpack_list(list_of_tuples):
+ l = []
+ for t in list_of_tuples:
+ l.extend(t)
+ return l
+
+class OBJECT_OT_UTRebuildMesh(bpy.types.Operator):
+ bl_idname = "object.utrebuildmesh" # XXX, name???
+ bl_label = "Rebuild Mesh"
+ __doc__ = """It rebuild the mesh from scrape from the selected mesh object. Note the scale will be 1:1 for object mode. To keep from deforming"""
+
+ def invoke(self, context, event):
+ print("----------------------------------------")
+ print("Init Mesh Bebuild...")
+ bselected = False
+ for obj in bpy.data.objects:
+ if obj.type == 'MESH' and obj.select == True:
+ for i in bpy.context.scene.objects: i.select = False #deselect all objects
+ obj.select = True
+ bpy.context.scene.objects.active = obj
+ bpy.ops.object.mode_set(mode='OBJECT')
+ me_ob = bpy.data.meshes.new(("Re_"+obj.name))
+ mesh = obj.data
+ faces = []
+ verts = []
+ smoothings = []
+ uvfaces = []
+ print("creating array build mesh...")
+ mmesh = obj.to_mesh(bpy.context.scene,True,'PREVIEW')
+ uv_layer = mmesh.tessface_uv_textures.active
+ for face in mmesh.tessfaces:
+ smoothings.append(face.use_smooth)#smooth or flat in boolean
+ if uv_layer != None:#check if there texture data exist
+ faceUV = uv_layer.data[face.index]
+ uvs = []
+ for uv in faceUV.uv:
+ uvs.append((uv[0],uv[1]))
+ uvfaces.append(uvs)
+ print((face.vertices[:]))
+ if len(face.vertices) == 3:
+ faces.extend([(face.vertices[0],face.vertices[1],face.vertices[2],0)])
+ else:
+ faces.extend([(face.vertices[0],face.vertices[1],face.vertices[2],face.vertices[3])])
+ #vertex positions
+ for vertex in mesh.vertices:
+ verts.append(vertex.co.to_tuple())
+ #vertices weight groups into array
+ vertGroups = {} #array in strings
+ for vgroup in obj.vertex_groups:
+ vlist = []
+ for v in mesh.vertices:
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list