[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