[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20323] trunk/blender/release/scripts/ bpymodules/colladaImEx: Collada scripts updated,
Remigiusz Fiedler
migius at 4d-vectors.de
Thu May 21 19:21:59 CEST 2009
Revision: 20323
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20323
Author: migius
Date: 2009-05-21 19:21:57 +0200 (Thu, 21 May 2009)
Log Message:
-----------
Collada scripts updated,
patch commited by Jan Diederich (collad)
[#18782] COLLADA exporter: Added a helpful errormessage if the parenting is wrong and a progress bar
# 2009.05.17 by jan:
# - More information for the user if an error happened (wrong/missing parenting).
# - Added a progress bar for export (bar for import already exists).
Modified Paths:
--------------
trunk/blender/release/scripts/bpymodules/colladaImEx/cutils.py
trunk/blender/release/scripts/bpymodules/colladaImEx/translator.py
Modified: trunk/blender/release/scripts/bpymodules/colladaImEx/cutils.py
===================================================================
--- trunk/blender/release/scripts/bpymodules/colladaImEx/cutils.py 2009-05-21 17:13:50 UTC (rev 20322)
+++ trunk/blender/release/scripts/bpymodules/colladaImEx/cutils.py 2009-05-21 17:21:57 UTC (rev 20323)
@@ -379,3 +379,26 @@
if len(adjustedName) > 0 and not adjustedName[0].isalpha():
adjustedName = "i"+adjustedName
return MakeIDXMLConform(adjustedName)
+
+'''
+List of error IDs and common strings.
+'''
+# Expects 1 argument: The mesh name.
+# Means that the armature modifier for a mesh couldn't be found,
+# probably the parenting is wrong.
+ERROR_MESH_ARMATURE_PARENT = 1
+
+MSG_ERROR_FATAL = "Fatal error. Exit script."
+
+def HandleError(failureId, *args):
+ '''
+ Prints the error message belonging to the given Id.
+ May raise an exception if it's a fatal error.
+ '''
+ if (failureId == ERROR_MESH_ARMATURE_PARENT):
+ print("Can't read armature modifier for mesh %s.\n" \
+ "Most likely your armature isn't correctly parenting the mesh.\n" \
+ % args[0])
+ raise MSG_ERROR_FATAL
+ else:
+ print("Wrong failure id: %i" % failureId)
Modified: trunk/blender/release/scripts/bpymodules/colladaImEx/translator.py
===================================================================
--- trunk/blender/release/scripts/bpymodules/colladaImEx/translator.py 2009-05-21 17:13:50 UTC (rev 20322)
+++ trunk/blender/release/scripts/bpymodules/colladaImEx/translator.py 2009-05-21 17:21:57 UTC (rev 20323)
@@ -5,6 +5,7 @@
#
# Copyright (C) 2006: Illusoft - colladablender at illusoft.com
# - 2008.08: multiple bugfixes by migius (AKA Remigiusz Fiedler)
+# - 2009.05: bugfixes by jan (AKA Jan Diederich)
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -24,6 +25,9 @@
# --------------------------------------------------------------------------
# History
+# 2009.05.17 by jan:
+# - More information for the user if an error happened (wrong/missing parenting).
+# - Added a progress bar for export (bar for import already exists).
# 2009.05.11 by jan:
# - Perfected the id renaming to fulfill at 100.0% the COLLADA standard for allowed UTF-8
# chars. The new renaming method is also much faster then the old one (benchmarked with
@@ -315,7 +319,7 @@
#TODO: for what is this good? (migius)
if 0: animations = AnimationInfo.CreateAnimations(self.animationsLibrary, self.fps, self.axiss)
- # Read the COLLADA stucture and build the scene in Blender.
+ # Read the COLLADA structure and build the scene in Blender.
Blender.Window.DrawProgressBar(0.4, 'Translate Collada 2 Blender')
self.sceneGraph.LoadFromCollada(self.colladaDocument.visualScenesLibrary.items, self.colladaDocument.scene)
@@ -355,6 +359,7 @@
self.ids = []
self.isImport = False
Blender.Window.EditMode(0)
+ Blender.Window.DrawProgressBar(0.0, 'Starting Export')
# Create a new Collada document
self.colladaDocument = collada.DaeDocument(debugMode)
@@ -397,7 +402,11 @@
del temp_mesh
#------------ [end] Copied from export OBJ ------------------------
- # Loop throug all scenes
+ # Loop through all scenes
+ sceneCount = len(Blender.Scene.Get())
+ self.progressStep = self.progressField / sceneCount
+ Blender.Window.DrawProgressBar(0.1, \
+ 'Exporting ' + str(sceneCount) + ' scene(s)')
for bScene in Blender.Scene.Get():
if not exportCurrentScene or self.currentBScene == bScene:
self.fps = bScene.getRenderingContext().framesPerSec()
@@ -426,21 +435,36 @@
#self.colladaDocument.visualScenesLibrary.AddItem(sceneGraph.ObjectToDae(bScene))
#daeScene = collada.DaeScene()
#daeScene.AddInstance()
+
+ self.ProgressExport()
self.colladaDocument.scene = daeScene
+
+ Blender.Window.DrawProgressBar(0.98, 'Saving file to disk...')
self.colladaDocument.SaveDocumentToFile(fileName)
+
+ Blender.Window.DrawProgressBar(1.0, 'Export finished.')
def Progress(self):
self.progressPartCount = 0.0
self.progressCount += self.progressStep
Blender.Window.DrawProgressBar(self.progressCount, 'Creating Blender Nodes...')
-
+
def ProgressPart(self, val, text):
self.progressPartCount += val
Blender.Window.DrawProgressBar(self.progressCount+self.progressPartCount*self.progressStep,text)
+
+ def ProgressExport(self):
+ self.progressPartCount = 0.0
+ self.progressCount += self.progressStep
+ Blender.Window.DrawProgressBar(self.progressCount, 'Exporting Blender Scenes...')
+ def ProgressPartExport(self, val, text):
+ self.progressPartCount += val
+ Blender.Window.DrawProgressBar(self.progressCount+self.progressPartCount, text)
+
class SceneGraph(object):
def __init__(self, document):
@@ -552,15 +576,20 @@
else:
# Now loop trough all nodes in this scene and create a list with
# root nodes and children.
- for node in bScene.objects:
- pNode = node.parent
- if pNode is None:
- self.rootNodes.append(node)
- else:
- try:
- self.childNodes[pNode.name].append(node)
- except:
- self.childNodes[pNode.name] = [node]
+ sceneObjects = bScene.objects
+ if len(sceneObjects) > 0:
+ progressStep = self.document.progressStep / len(sceneObjects)
+ for node in sceneObjects:
+ pNode = node.parent
+ if pNode is None:
+ self.rootNodes.append(node)
+ else:
+ try:
+ self.childNodes[pNode.name].append(node)
+ except:
+ self.childNodes[pNode.name] = [node]
+
+ self.document.ProgressPartExport(progressStep, "Saving node(s)...")
# Create a new Physics Model.
daePhysicsModel = collada.DaePhysicsModel()
@@ -1000,6 +1029,8 @@
daeSkin.bindShapeMatrix = Matrix(bMeshObject.matrix).transpose()##bMeshObject.getMatrix('localspace').transpose()
bArmatureObject = bModifier[Blender.Modifier.Settings.OBJECT]
+ if (bArmatureObject is None):
+ HandleError(ERROR_MESH_ARMATURE_PARENT, meshName)
bArmature = bArmatureObject.data
# Create the joints elements
@@ -2118,7 +2149,10 @@
daeController = controller.SaveToDae(bModifier, bNode, meshID)
#Get the root bone
- bArmature = bModifier[Blender.Modifier.Settings.OBJECT].getData()
+ bArmatureObject = bModifier[Blender.Modifier.Settings.OBJECT]
+ if (bArmatureObject is None):
+ HandleError(ERROR_MESH_ARMATURE_PARENT, meshID)
+ bArmature = bArmatureObject.getData()
rootBones = []
for boneName in bArmature.bones.keys():
bone = bArmature.bones[boneName]
More information about the Bf-blender-cvs
mailing list