[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20439] trunk/blender/release/scripts/ bpymodules/colladaImEx: patch by Jan Diederich (collad)
Remigiusz Fiedler
migius at 4d-vectors.de
Wed May 27 01:37:40 CEST 2009
Revision: 20439
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20439
Author: migius
Date: 2009-05-27 01:37:40 +0200 (Wed, 27 May 2009)
Log Message:
-----------
patch by Jan Diederich (collad)
[#18829] COLLADA Export: Fixed bug, cleaned up deprecated code
translator.py:
1.fixed a bug that happened due to the explicit deletion of a temporary mesh (del temp_mesh).
2.removed redundant code. the execution time of the script increased significantly.
3.improved option to apply modifiers to handle absolutely every mesh instance created by a modifier.
cstartup.py:
1. improved the feedback for the end user about the time it took to process and the save the data.
Modified Paths:
--------------
trunk/blender/release/scripts/bpymodules/colladaImEx/cstartup.py
trunk/blender/release/scripts/bpymodules/colladaImEx/translator.py
Modified: trunk/blender/release/scripts/bpymodules/colladaImEx/cstartup.py
===================================================================
--- trunk/blender/release/scripts/bpymodules/colladaImEx/cstartup.py 2009-05-26 21:34:20 UTC (rev 20438)
+++ trunk/blender/release/scripts/bpymodules/colladaImEx/cstartup.py 2009-05-26 23:37:40 UTC (rev 20439)
@@ -523,6 +523,11 @@
LoadDefaultVals()
+def CalcElapsedTime(startTime):
+ '''
+ Calc elapsed time between now and start time.
+ '''
+ return Blender.sys.time() - startTime
def Event(evt, val):
pass
@@ -674,20 +679,20 @@
lookAt, usePhysics, exportCurrentScene, \
exportRelativePaths, useUV, sampleAnimation, \
onlyMainScene, applyModifiers)
- # Redraw al 3D windows.
+
+ cutils.Debug.Debug('Time to process and save data: %.1f' \
+ % CalcElapsedTime(startTime), 'FEEDBACK')
+
+ # Redraw all 3D windows.
Blender.Window.RedrawAll()
-
- # calculate the elapsed time
- endTime = Blender.sys.time()
- elapsedTime = endTime - startTime
+
Blender.Draw.PupMenu(importExportText + " Successful %t")
- except:
- endTime = Blender.sys.time()
- elapsedTime = endTime - startTime
+ except:
Blender.Draw.PupMenu(importExportText + "ing failed%t | Check the console for more info")
raise # throw the exception
- cutils.Debug.Debug('FINISHED - time elapsed: %.1f'%(elapsedTime),'FEEDBACK')
+ cutils.Debug.Debug('FINISHED - time elapsed: %.1f' % CalcElapsedTime(startTime), \
+ 'FEEDBACK')
# Hide the wait cursor in blender
Blender.Window.WaitCursor(0)
Modified: trunk/blender/release/scripts/bpymodules/colladaImEx/translator.py
===================================================================
--- trunk/blender/release/scripts/bpymodules/colladaImEx/translator.py 2009-05-26 21:34:20 UTC (rev 20438)
+++ trunk/blender/release/scripts/bpymodules/colladaImEx/translator.py 2009-05-26 23:37:40 UTC (rev 20439)
@@ -398,8 +398,6 @@
self.containerMesh = temp_mesh
if not self.containerMesh:
self.containerMesh = Blender.Mesh.New(temp_mesh_name)
-
- del temp_mesh
#------------ [end] Copied from export OBJ ------------------------
# Loop through all scenes
@@ -2107,29 +2105,30 @@
instance = collada.DaeGeometryInstance()
daeGeometry = self.document.colladaDocument.geometriesLibrary.FindObject(bNode.getData(True))
meshNode = MeshNode(self.document)
- if daeGeometry is None:
- # TODO: Maybe add a for-loop if multiple instance are made by
- # a transformation. But so far even a double mirror
- # (x and y axis) results only in _1_ instance.
- derivedObject = BPyObject.getDerivedObjects(bNode)[0][0]
- virtualMesh = BPyMesh.getMeshFromObject(derivedObject, \
- self.document.containerMesh, applyModifiers, False, bScene)
- if debprn:
- print("Virtual mesh: " + str(virtualMesh) )
- # + "; type: " + str(type(virtualMesh)))
- if not virtualMesh:
- # Fallback!
- # Should never happen!
- # (The "mesh=1" param on the getData() method ensures that
- # it gets a "Mesh" instead of a "NMesh".)
- print("Error while trying to save derived object / apply modifiers. Try saving " \
- + "more direct, all modifiers will be ignored.")
- daeGeometry = meshNode.SaveToDae(bNode.getData(mesh=1))
- else:
- # Apply original name from untransformed object
- # to transformed object (name is later copied 1:1 to id).
- virtualMesh.name = derivedObject.name
- daeGeometry = meshNode.SaveToDae(virtualMesh)
+ if daeGeometry is None:
+ derivedObjsMatrices = BPyObject.getDerivedObjects(bNode)
+ for derivedObject, matrix in derivedObjsMatrices:
+ virtualMesh = BPyMesh.getMeshFromObject(derivedObject, \
+ self.document.containerMesh, applyModifiers, False, bScene)
+ if debprn:
+ print("Virtual mesh: " + str(virtualMesh) )
+ # + "; type: " + str(type(virtualMesh)))
+ if not virtualMesh:
+ # Fallback!
+ # Should never happen!
+ # (The "mesh=1" param on the getData() method ensures that
+ # it gets a "Mesh" instead of a "NMesh".)
+ print("Error while trying to save derived object / apply modifiers. Try saving " \
+ + "more direct, all modifiers will be ignored.")
+ daeGeometry = meshNode.SaveToDae(bNode.getData(mesh=1))
+ else:
+ # Apply original name from untransformed object
+ # to transformed object (name is later copied 1:1 to id).
+ virtualMesh.name = derivedObject.name
+ # _Don't_ apply transformation matrix "matrix"!
+ # The transformation will get instead written in the file itself
+ # seperately!
+ daeGeometry = meshNode.SaveToDae(virtualMesh)
meshID = daeGeometry.id
bindMaterials = meshNode.GetBindMaterials(bNode.getData(),\
@@ -2808,14 +2807,14 @@
return bMesh2
return
- def SaveToDae(self, bMesh):
+ def SaveToDae(self, mesh):
global useTriangles, usePolygons, useUV
uvTextures = dict()
uvIndex = dict()
daeGeometry = collada.DaeGeometry()
- daeGeometry.id = daeGeometry.name = self.document.CreateID(bMesh.name,'-Geometry')
+ daeGeometry.id = daeGeometry.name = self.document.CreateID(mesh.name,'-Geometry')
daeMesh = collada.DaeMesh()
@@ -2831,7 +2830,7 @@
accessor = collada.DaeAccessor()
daeSource.techniqueCommon.accessor = accessor
accessor.source = daeFloatArray.id
- accessor.count = len(bMesh.verts)
+ accessor.count = len(mesh.verts)
accessor.AddParam('X','float')
accessor.AddParam('Y','float')
accessor.AddParam('Z','float')
@@ -2878,7 +2877,7 @@
hasColor = False
#Vertex colors:
- if ( bMesh.vertexColors ) :
+ if ( mesh.vertexColors ) :
hasColor = True
daeSourceColors = collada.DaeSource()
daeSourceColors.id = self.document.CreateID(daeGeometry.id , '-color')
@@ -2894,7 +2893,7 @@
accessorColors.AddParam('B','float')
accessorColors.AddParam('A','float')
- for vert in bMesh.verts:
+ for vert in mesh.verts:
#print vert
for co in vert.co:
daeFloatArray.data.append(co)
@@ -2906,14 +2905,13 @@
daeTrianglesDict = dict()
daeLines = None
- mesh = Blender.Mesh.Get(bMesh.name)
# Loop trough all the faces
for face in mesh.faces:
matIndex = -1
- if not useUV and bMesh.materials and len(bMesh.materials) > 0:
+ if not useUV and mesh.materials and len(mesh.materials) > 0:
matIndex = face.mat
- elif mesh.faceUV and (useUV or bMesh.materials is None or len(bMesh.materials) == 0):
+ elif mesh.faceUV and (useUV or mesh.materials is None or len(mesh.materials) == 0):
if not face.image is None:
matIndex = face.image.name
@@ -2970,6 +2968,7 @@
# Update the prevVert vertice.
prevVert = vert
+ # Now use that AddVerts(...) function exactly in this "if"-block
if (vertCount == 3 and not usePolygons) or (useTriangles and vertCount == 4): # triangle
# Iff a Triangle Item for the current material not exists, create one.
daeTrianglesDict.setdefault(matIndex, collada.DaeTriangles())
@@ -2979,14 +2978,14 @@
daeFloatArrayNormals.data.append(no)
accessorNormals.count = accessorNormals.count + 1
if vertCount == 3:
- # Add al the vertices to the triangle list.
+ # Add all the vertices to the triangle list.
AddVerts(face.verts,daeTrianglesDict[matIndex].triangles, face.smooth )
# Update the vertice count for the trianglelist.
daeTrianglesDict[matIndex].count += 1
else: # Convert polygon to triangles
verts1 = face.verts[:3]
verts2 = face.verts[2:] + tuple([face.verts[0]])
- # Add al the vertices to the triangle list.
+ # Add all the vertices to the triangle list.
AddVerts(verts1,daeTrianglesDict[matIndex].triangles, face.smooth)
AddVerts(verts2, daeTrianglesDict[matIndex].triangles,face.smooth,True)
# Update the vertice count for the trianglelist.
@@ -3001,7 +3000,7 @@
for no in face.no:
daeFloatArrayNormals.data.append(no)
accessorNormals.count = accessorNormals.count + 1
- # Add al the vertices to the pverts list.
+ # Add all the vertices to the pverts list.
AddVerts(face.verts,pverts, face.smooth)
# Add the pverts list to the polygons list.
daePolygonsDict[matIndex].polygons.append(pverts)
@@ -3041,9 +3040,9 @@
for k, daeTriangles in daeTrianglesDict.iteritems():
##print k
if k != -1:
- if not useUV and not bMesh.materials is None and len(bMesh.materials) > 0 and k >= 0:
- daeTriangles.material = bMesh.materials[k].name
- elif mesh.faceUV and (useUV or bMesh.materials is None or len(bMesh.materials) == 0):
+ if not useUV and not mesh.materials is None and len(mesh.materials) > 0 and k >= 0:
+ daeTriangles.material = mesh.materials[k].name
+ elif mesh.faceUV and (useUV or mesh.materials is None or len(mesh.materials) == 0):
daeTriangles.material = uvTextures[k]
offsetCount = 0
daeInput.offset = offsetCount
@@ -3065,9 +3064,9 @@
daeMesh.primitives.append(daeTriangles)
for k, daePolygons in daePolygonsDict.iteritems():
if k != -1:
- if not useUV and not bMesh.materials is None and len(bMesh.materials) > 0 and k >= 0:
- daePolygons.material = bMesh.materials[k].name
- elif mesh.faceUV and (useUV or bMesh.materials is None or len(bMesh.materials) == 0):
+ if not useUV and not mesh.materials is None and len(mesh.materials) > 0 and k >= 0:
+ daePolygons.material = mesh.materials[k].name
+ elif mesh.faceUV and (useUV or mesh.materials is None or len(mesh.materials) == 0):
daePolygons.material = uvTextures[k]
offsetCount = 0
daeInput.offset = offsetCount
More information about the Bf-blender-cvs
mailing list