[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41000] trunk/blender/source: fix [#28909] OpenCollada export / import sintel lite v2.1 crashes on import.

Campbell Barton ideasman42 at gmail.com
Fri Oct 14 04:31:04 CEST 2011


Revision: 41000
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41000
Author:   campbellbarton
Date:     2011-10-14 02:31:04 +0000 (Fri, 14 Oct 2011)
Log Message:
-----------
fix [#28909] OpenCollada export / import sintel lite v2.1 crashes on import.

Modified Paths:
--------------
    trunk/blender/source/blender/collada/AnimationImporter.cpp
    trunk/blender/source/blender/makesrna/rna_cleanup/rna_cleaner.py
    trunk/blender/source/blender/makesrna/rna_cleanup/rna_cleaner_merge.py
    trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp

Modified: trunk/blender/source/blender/collada/AnimationImporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/AnimationImporter.cpp	2011-10-14 02:30:58 UTC (rev 40999)
+++ trunk/blender/source/blender/collada/AnimationImporter.cpp	2011-10-14 02:31:04 UTC (rev 41000)
@@ -962,30 +962,32 @@
 			for (unsigned int j = 0; j < matBinds.getCount(); j++) {
 				const COLLADAFW::UniqueId & matuid = matBinds[j].getReferencedMaterial();
 				const COLLADAFW::Effect *ef = (COLLADAFW::Effect *) (FW_object_map[matuid]);
-				const COLLADAFW::CommonEffectPointerArray& commonEffects  =  ef->getCommonEffects();
-				COLLADAFW::EffectCommon *efc = commonEffects[0];
-				if((animType->material & MATERIAL_SHININESS) != 0){
-					const COLLADAFW::FloatOrParam *shin = &(efc->getShininess());
-					const COLLADAFW::UniqueId& listid =  shin->getAnimationList();
-					Assign_float_animations( listid, AnimCurves , "specular_hardness" );
-				}
+				if (ef != NULL) { /* can be NULL [#28909] */
+					const COLLADAFW::CommonEffectPointerArray& commonEffects  =  ef->getCommonEffects();
+					COLLADAFW::EffectCommon *efc = commonEffects[0];
+					if((animType->material & MATERIAL_SHININESS) != 0){
+						const COLLADAFW::FloatOrParam *shin = &(efc->getShininess());
+						const COLLADAFW::UniqueId& listid =  shin->getAnimationList();
+						Assign_float_animations( listid, AnimCurves , "specular_hardness" );
+					}
 
-				if((animType->material & MATERIAL_IOR) != 0){
-					const COLLADAFW::FloatOrParam *ior = &(efc->getIndexOfRefraction());
-					const COLLADAFW::UniqueId& listid =  ior->getAnimationList();
-					Assign_float_animations( listid, AnimCurves , "raytrace_transparency.ior" );
-				}
+					if((animType->material & MATERIAL_IOR) != 0){
+						const COLLADAFW::FloatOrParam *ior = &(efc->getIndexOfRefraction());
+						const COLLADAFW::UniqueId& listid =  ior->getAnimationList();
+						Assign_float_animations( listid, AnimCurves , "raytrace_transparency.ior" );
+					}
 
-				if((animType->material & MATERIAL_SPEC_COLOR) != 0){
-					const COLLADAFW::ColorOrTexture *cot = &(efc->getSpecular());
-					const COLLADAFW::UniqueId& listid =  cot->getColor().getAnimationList();
-					Assign_color_animations( listid, AnimCurves , "specular_color" );
-				}
+					if((animType->material & MATERIAL_SPEC_COLOR) != 0){
+						const COLLADAFW::ColorOrTexture *cot = &(efc->getSpecular());
+						const COLLADAFW::UniqueId& listid =  cot->getColor().getAnimationList();
+						Assign_color_animations( listid, AnimCurves , "specular_color" );
+					}
 
-				if((animType->material & MATERIAL_DIFF_COLOR) != 0){
-					const COLLADAFW::ColorOrTexture *cot = &(efc->getDiffuse());
-					const COLLADAFW::UniqueId& listid =  cot->getColor().getAnimationList();
-					Assign_color_animations( listid, AnimCurves , "diffuse_color" );
+					if((animType->material & MATERIAL_DIFF_COLOR) != 0){
+						const COLLADAFW::ColorOrTexture *cot = &(efc->getDiffuse());
+						const COLLADAFW::UniqueId& listid =  cot->getColor().getAnimationList();
+						Assign_color_animations( listid, AnimCurves , "diffuse_color" );
+					}
 				}
 			}
 		}	
@@ -1051,14 +1053,16 @@
 		for (unsigned int j = 0; j < matBinds.getCount(); j++) {
 			const COLLADAFW::UniqueId & matuid = matBinds[j].getReferencedMaterial();
 			const COLLADAFW::Effect *ef = (COLLADAFW::Effect *) (FW_object_map[matuid]);
-			const COLLADAFW::CommonEffectPointerArray& commonEffects  =  ef->getCommonEffects();
-			if(!commonEffects.empty()) {
-				COLLADAFW::EffectCommon *efc = commonEffects[0];
-				types->material =  setAnimType(&(efc->getShininess()),(types->material), MATERIAL_SHININESS);
-				types->material =  setAnimType(&(efc->getSpecular().getColor()),(types->material), MATERIAL_SPEC_COLOR);
-				types->material =  setAnimType(&(efc->getDiffuse().getColor()),(types->material), MATERIAL_DIFF_COLOR);
-				// types->material =  setAnimType(&(efc->get()),(types->material), MATERIAL_TRANSPARENCY);
-				types->material =  setAnimType(&(efc->getIndexOfRefraction()),(types->material), MATERIAL_IOR);
+			if (ef != NULL) { /* can be NULL [#28909] */
+				const COLLADAFW::CommonEffectPointerArray& commonEffects = ef->getCommonEffects();
+				if(!commonEffects.empty()) {
+					COLLADAFW::EffectCommon *efc = commonEffects[0];
+					types->material =  setAnimType(&(efc->getShininess()),(types->material), MATERIAL_SHININESS);
+					types->material =  setAnimType(&(efc->getSpecular().getColor()),(types->material), MATERIAL_SPEC_COLOR);
+					types->material =  setAnimType(&(efc->getDiffuse().getColor()),(types->material), MATERIAL_DIFF_COLOR);
+					// types->material =  setAnimType(&(efc->get()),(types->material), MATERIAL_TRANSPARENCY);
+					types->material =  setAnimType(&(efc->getIndexOfRefraction()),(types->material), MATERIAL_IOR);
+				}
 			}
 		}
 	}
@@ -1067,10 +1071,10 @@
 
 int AnimationImporter::setAnimType ( const COLLADAFW::Animatable * prop , int types, int addition)
 {
-		const COLLADAFW::UniqueId& listid =  prop->getAnimationList();
-		if (animlist_map.find(listid) != animlist_map.end()) 
-				return types|addition;
-		else return types;
+	const COLLADAFW::UniqueId& listid =  prop->getAnimationList();
+	if (animlist_map.find(listid) != animlist_map.end())
+		return types|addition;
+	else return types;
 }		
 
 // Is not used anymore.

Modified: trunk/blender/source/blender/makesrna/rna_cleanup/rna_cleaner.py
===================================================================
--- trunk/blender/source/blender/makesrna/rna_cleanup/rna_cleaner.py	2011-10-14 02:30:58 UTC (rev 40999)
+++ trunk/blender/source/blender/makesrna/rna_cleanup/rna_cleaner.py	2011-10-14 02:31:04 UTC (rev 41000)
@@ -1,4 +1,4 @@
-#! /usr/bin/env python3.1
+#! /usr/bin/env python3
 
 """
 This script is used to help cleaning RNA api.

Modified: trunk/blender/source/blender/makesrna/rna_cleanup/rna_cleaner_merge.py
===================================================================
--- trunk/blender/source/blender/makesrna/rna_cleanup/rna_cleaner_merge.py	2011-10-14 02:30:58 UTC (rev 40999)
+++ trunk/blender/source/blender/makesrna/rna_cleanup/rna_cleaner_merge.py	2011-10-14 02:31:04 UTC (rev 41000)
@@ -1,4 +1,4 @@
-#! /usr/bin/env python3.1
+#! /usr/bin/env python3
 
 import sys
 

Modified: trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp	2011-10-14 02:30:58 UTC (rev 40999)
+++ trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp	2011-10-14 02:31:04 UTC (rev 41000)
@@ -1596,7 +1596,7 @@
 					objprop.m_boundclass = KX_BOUNDPOLYTOPE;
 					break;
 				}
-				// Object is not a mesh... fall through OB_BOUND_POLYH to 
+				// Object is not a mesh... fall through OB_BOUND_TRIANGLE_MESH to
 				// OB_BOUND_SPHERE
 			case OB_BOUND_TRIANGLE_MESH:
 				if (blenderobject->type == OB_MESH)




More information about the Bf-blender-cvs mailing list