[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27070] trunk/blender: bugfix [#21233] Crash in pyapi, with new object.

Campbell Barton ideasman42 at gmail.com
Mon Feb 22 01:07:46 CET 2010


Revision: 27070
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27070
Author:   campbellbarton
Date:     2010-02-22 01:07:46 +0100 (Mon, 22 Feb 2010)

Log Message:
-----------
bugfix [#21233] Crash in pyapi, with new object.
pass the obdata as an argument rather then assigning later so as not to allow an invalid state.

Modified Paths:
--------------
    trunk/blender/release/scripts/extensions/add_mesh_gears.py
    trunk/blender/release/scripts/io/export_obj.py
    trunk/blender/release/scripts/io/import_anim_bvh.py
    trunk/blender/release/scripts/io/import_scene_3ds.py
    trunk/blender/release/scripts/io/import_scene_obj.py
    trunk/blender/release/scripts/modules/rigify/__init__.py
    trunk/blender/release/scripts/op/add_mesh_torus.py
    trunk/blender/release/scripts/op/object.py
    trunk/blender/source/blender/makesrna/intern/rna_main_api.c

Modified: trunk/blender/release/scripts/extensions/add_mesh_gears.py
===================================================================
--- trunk/blender/release/scripts/extensions/add_mesh_gears.py	2010-02-21 22:55:35 UTC (rev 27069)
+++ trunk/blender/release/scripts/extensions/add_mesh_gears.py	2010-02-22 00:07:46 UTC (rev 27070)
@@ -322,8 +322,7 @@
 
         mesh.update()
         
-        ob_new = bpy.data.objects.new('Gear','MESH')
-        ob_new.data = mesh
+        ob_new = bpy.data.objects.new('Gear', mesh)
 
         tipgroup = ob_new.add_vertex_group('Tips')
         # for some reason the name does not 'stick' and we have to set it this way:

Modified: trunk/blender/release/scripts/io/export_obj.py
===================================================================
--- trunk/blender/release/scripts/io/export_obj.py	2010-02-21 22:55:35 UTC (rev 27069)
+++ trunk/blender/release/scripts/io/export_obj.py	2010-02-22 00:07:46 UTC (rev 27070)
@@ -447,8 +447,7 @@
                         break
 
                 if has_quads:
-                    newob = bpy.data.objects.new('temp_object', 'MESH')
-                    newob.data = me
+                    newob = bpy.data.objects.new('temp_object', me)
                     # if we forget to set Object.data - crash
                     scene.objects.link(newob)
                     newob.convert_to_triface(scene)

Modified: trunk/blender/release/scripts/io/import_anim_bvh.py
===================================================================
--- trunk/blender/release/scripts/io/import_anim_bvh.py	2010-02-21 22:55:35 UTC (rev 27069)
+++ trunk/blender/release/scripts/io/import_anim_bvh.py	2010-02-22 00:07:46 UTC (rev 27070)
@@ -295,7 +295,7 @@
     objects = []
 
     def add_ob(name):
-        ob = scn.objects.new('Empty')
+        ob = scn.objects.new('Empty', None)
         objects.append(ob)
         return ob
 
@@ -352,8 +352,7 @@
     scn.set_frame(IMPORT_START_FRAME)
 
     arm_data = bpy.data.armatures.new("MyBVH")
-    arm_ob = bpy.data.objects.new("MyBVH", 'ARMATURE')
-    arm_ob.data = arm_data
+    arm_ob = bpy.data.objects.new("MyBVH", arm_data)
 
     scn.objects.link(arm_ob)
 

Modified: trunk/blender/release/scripts/io/import_scene_3ds.py
===================================================================
--- trunk/blender/release/scripts/io/import_scene_3ds.py	2010-02-21 22:55:35 UTC (rev 27069)
+++ trunk/blender/release/scripts/io/import_scene_3ds.py	2010-02-22 00:07:46 UTC (rev 27070)
@@ -418,8 +418,7 @@
                                 uf.tex = True 
 
             # bmesh.transform(contextMatrix)
-            ob = bpy.data.objects.new(tempName, 'MESH')
-            ob.data = bmesh
+            ob = bpy.data.objects.new(tempName, bmesh)
             SCN.objects.link(ob)
 # 			ob = SCN_OBJECTS.new(bmesh, tempName)
             '''
@@ -638,8 +637,7 @@
             x,y,z = struct.unpack('<3f', temp_data)
             new_chunk.bytes_read += STRUCT_SIZE_3FLOAT
 
-            ob = bpy.data.objects.new("Lamp", 'LAMP')
-            ob.data = bpy.data.lamps.new("Lamp")
+            ob = bpy.data.objects.new("Lamp", bpy.data.lamps.new("Lamp"))
             SCN.objects.link(ob)
 
             contextLamp[1]= ob.data

Modified: trunk/blender/release/scripts/io/import_scene_obj.py
===================================================================
--- trunk/blender/release/scripts/io/import_scene_obj.py	2010-02-21 22:55:35 UTC (rev 27069)
+++ trunk/blender/release/scripts/io/import_scene_obj.py	2010-02-22 00:07:46 UTC (rev 27070)
@@ -863,10 +863,8 @@
     me.update()
 # 	me.calcNormals()
 
-    ob= bpy.data.objects.new("Mesh", 'MESH')
-    ob.data= me
+    ob= bpy.data.objects.new("Mesh", me)
     scn.objects.link(ob)
-# 	ob= scn.objects.new(me)
     new_objects.append(ob)
 
     # Create the vertex groups. No need to have the flag passed here since we test for the

Modified: trunk/blender/release/scripts/modules/rigify/__init__.py
===================================================================
--- trunk/blender/release/scripts/modules/rigify/__init__.py	2010-02-21 22:55:35 UTC (rev 27069)
+++ trunk/blender/release/scripts/modules/rigify/__init__.py	2010-02-22 00:07:46 UTC (rev 27070)
@@ -182,8 +182,7 @@
     try:
         obj = scene.objects[name]
     except KeyError:
-        obj = bpy.data.objects.new(name, type='ARMATURE')
-        obj.data = bpy.data.armatures.new(name)
+        obj = bpy.data.objects.new(name, bpy.data.armatures.new(name))
         scene.objects.link(obj)
 
     obj.data.pose_position = 'POSE'
@@ -487,9 +486,8 @@
     scene = context.scene
 
     def create_empty_armature(name):
-        obj_new = bpy.data.objects.new(name, 'ARMATURE')
         armature = bpy.data.armatures.new(name)
-        obj_new.data = armature
+        obj_new = bpy.data.objects.new(name, armature)
         scene.objects.link(obj_new)
         scene.objects.active = obj_new
         for obj in scene.objects:

Modified: trunk/blender/release/scripts/op/add_mesh_torus.py
===================================================================
--- trunk/blender/release/scripts/op/add_mesh_torus.py	2010-02-21 22:55:35 UTC (rev 27069)
+++ trunk/blender/release/scripts/op/add_mesh_torus.py	2010-02-22 00:07:46 UTC (rev 27070)
@@ -130,8 +130,7 @@
             ob.selected = False
 
         mesh.update()
-        ob_new = bpy.data.objects.new("Torus", 'MESH')
-        ob_new.data = mesh
+        ob_new = bpy.data.objects.new("Torus", mesh)
         scene.objects.link(ob_new)
         ob_new.selected = True
 

Modified: trunk/blender/release/scripts/op/object.py
===================================================================
--- trunk/blender/release/scripts/op/object.py	2010-02-21 22:55:35 UTC (rev 27069)
+++ trunk/blender/release/scripts/op/object.py	2010-02-22 00:07:46 UTC (rev 27070)
@@ -447,13 +447,11 @@
             # pick an object to use 
             obj = objects[0]
 
-            ob_new = bpy.data.objects.new(mesh.name, 'MESH')
-            ob_new.data = mesh
+            ob_new = bpy.data.objects.new(mesh.name, mesh)
             base = scene.objects.link(ob_new)
             base.layers[:] = obj.layers
             
-            ob_inst = bpy.data.objects.new(data.name, obj.type)
-            ob_inst.data = data
+            ob_inst = bpy.data.objects.new(data.name, data)
             base = scene.objects.link(ob_inst)
             base.layers[:] = obj.layers
             

Modified: trunk/blender/source/blender/makesrna/intern/rna_main_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_main_api.c	2010-02-21 22:55:35 UTC (rev 27069)
+++ trunk/blender/source/blender/makesrna/intern/rna_main_api.c	2010-02-22 00:07:46 UTC (rev 27070)
@@ -30,6 +30,7 @@
 #include <stdio.h>
 
 #include "RNA_define.h"
+#include "RNA_access.h"
 #include "RNA_types.h"
 #include "RNA_enum_types.h"
 
@@ -38,6 +39,7 @@
 #ifdef RNA_RUNTIME
 
 #include "BKE_main.h"
+#include "BKE_curve.h"
 #include "BKE_mesh.h"
 #include "BKE_armature.h"
 #include "BKE_library.h"
@@ -109,12 +111,54 @@
 	unlink_scene(bmain, scene, newscene);
 }
 
-Object *rna_Main_objects_new(Main *bmain, char* name, int type)
+Object *rna_Main_objects_new(Main *bmain, ReportList *reports, char* name, ID *data)
 {
-	Object *ob= add_only_object(type, name);
+	Object *ob;
+	int type= OB_EMPTY;
+	if(data) {
+		switch(GS(data->name)) {
+			case ID_ME:
+				type= OB_MESH;
+				break;
+			case ID_CU:
+				type= curve_type((struct Curve *)data);
+				break;
+			case ID_MB:
+				type= OB_MBALL;
+				break;
+			case ID_LA:
+				type= OB_LAMP;
+				break;
+			case ID_CA:
+				type= OB_CAMERA;
+				break;
+			case ID_LT:
+				type= OB_LATTICE;
+				break;
+			case ID_AR:
+				type= OB_ARMATURE;
+				break;
+			default:
+			{
+				const char *idname;
+				if(RNA_enum_id_from_value(id_type_items, GS(data->name), &idname) == 0)
+					idname= "UNKNOWN";
+
+				BKE_reportf(reports, RPT_ERROR, "ID type '%s' is not valid for a object.", idname);
+				return NULL;
+			}
+		}
+
+		data->us++;
+	}
+
+	ob= add_only_object(type, name);
 	ob->id.us--;
+
+	ob->data= data;
 	return ob;
 }
+
 void rna_Main_objects_remove(Main *bmain, ReportList *reports, struct Object *object)
 {
 	/*
@@ -337,10 +381,11 @@
 	RNA_def_struct_ui_text(srna, "Main Objects", "Collection of objects");
 
 	func= RNA_def_function(srna, "new", "rna_Main_objects_new");
+	RNA_def_function_flag(func, FUNC_USE_REPORTS);
 	RNA_def_function_ui_description(func, "Add a new object to the main database");
 	parm= RNA_def_string(func, "name", "Object", 0, "", "New name for the datablock.");
 	RNA_def_property_flag(parm, PROP_REQUIRED);
-	parm= RNA_def_enum(func, "type", object_type_items, 0, "", "Type of Object.");
+	parm= RNA_def_pointer(func, "object_data", "ID", "", "Object data or None for an empty object.");
 	RNA_def_property_flag(parm, PROP_REQUIRED);
 
 	/* return type */





More information about the Bf-blender-cvs mailing list