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 - [email protected]
 #    - 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]


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to