[Bf-blender-cvs] [936bb32] fracture_modifier: new splash screen and fixes for convert to keyframe operator, empty was parented incorrectly (depgraph update missing, but threaded option is broken now)

Martin Felke noreply at git.blender.org
Sun Nov 2 01:45:33 CET 2014


Commit: 936bb32d456e6d89051cd0c4808e0fed97c37b96
Author: Martin Felke
Date:   Sun Nov 2 01:44:22 2014 +0100
Branches: fracture_modifier
https://developer.blender.org/rB936bb32d456e6d89051cd0c4808e0fed97c37b96

new splash screen and fixes for convert to keyframe operator, empty was parented incorrectly (depgraph update missing, but threaded option is broken now)

===================================================================

M	release/datafiles/splash.png
M	release/datafiles/splash_2x.png
M	source/blender/blenkernel/BKE_object.h
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/rigidbody.c
M	source/blender/editors/object/object_modifier.c

===================================================================

diff --git a/release/datafiles/splash.png b/release/datafiles/splash.png
index 76bb67b..5e1f54f 100644
Binary files a/release/datafiles/splash.png and b/release/datafiles/splash.png differ
diff --git a/release/datafiles/splash_2x.png b/release/datafiles/splash_2x.png
index c0eaba5..8755989 100644
Binary files a/release/datafiles/splash_2x.png and b/release/datafiles/splash_2x.png differ
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index 1bfd26d..e3a66ba 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -87,6 +87,7 @@ bool BKE_object_is_in_wpaint_select_vert(struct Object *ob);
 
 struct Object *BKE_object_add_only_object(struct Main *bmain, int type, const char *name);
 struct Object *BKE_object_add(struct Main *bmain, struct Scene *scene, int type);
+struct Object *BKE_object_add_named(struct Main *bmain, struct Scene *scene, int type, const char *custname);
 void *BKE_object_obdata_add_from_type(struct Main *bmain, int type);
 
 void BKE_object_lod_add(struct Object *ob);
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 0f66389..a07ab5e 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -1023,6 +1023,35 @@ Object *BKE_object_add_only_object(Main *bmain, int type, const char *name)
 
 /* general add: to scene, with layer from area and default name */
 /* creates minimum required data, but without vertices etc. */
+Object *BKE_object_add_named(Main *bmain, Scene *scene, int type, const char *custname)
+{
+	Object *ob;
+	Base *base;
+	char name[MAX_ID_NAME];
+
+	if (custname) {
+		BLI_strncpy(name, custname, sizeof(name));
+	}
+	else {
+		BLI_strncpy(name, get_obdata_defname(type), sizeof(name));
+	}
+
+	ob = BKE_object_add_only_object(bmain, type, name);
+
+	ob->data = BKE_object_obdata_add_from_type(bmain, type);
+
+	ob->lay = scene->lay;
+
+	base = BKE_scene_base_add(scene, ob);
+	BKE_scene_base_deselect_all(scene);
+	BKE_scene_base_select(scene, base);
+	DAG_id_tag_update_ex(bmain, &ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+
+	return ob;
+}
+
+/* general add: to scene, with layer from area and default name */
+/* creates minimum required data, but without vertices etc. */
 Object *BKE_object_add(Main *bmain, Scene *scene, int type)
 {
 	Object *ob;
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index bac796e..f1a1da0 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -2688,7 +2688,6 @@ void BKE_rigidbody_sync_transforms(RigidBodyWorld *rbw, Object *ob, float ctime)
 				}
 
 				for (mi = rmd->meshIslands.first; mi; mi = mi->next) {
-					int frame;
 
 					rbo = mi->rigidbody;
 					if (!rbo) {
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
index 8144b95..6500a94 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -2688,7 +2688,11 @@ static bool convert_modifier_to_keyframes(FractureModifierData* fmd, Group* gr,
 	MeshIsland *mi = NULL;
 	int j = 0;
 	Object *parent = NULL;
+	Base *bas = NULL;
 	int count = BLI_countlist(&fmd->meshIslands);
+	const char *name = BLI_strdupcat(ob->id.name, "_p_key");
+	float diff[3] = {0.0f, 0.0f, 0.0f};
+	float obloc[3];
 
 	if (scene->rigidbody_world && scene->rigidbody_world)
 	{
@@ -2698,36 +2702,42 @@ static bool convert_modifier_to_keyframes(FractureModifierData* fmd, Group* gr,
 	if (cache && cache->flag & PTCACHE_BAKED)
 	{
 		start = cache->startframe;
-		end = cache->last_exact;
+		end = cache->simframe;
 		BKE_ptcache_id_from_rigidbody(&pid, NULL, scene->rigidbody_world);
 		is_baked = true;
 	}
 
-	if (cache && (cache->flag & PTCACHE_OUTDATED) && !(cache->flag & PTCACHE_BAKED))
+	if (cache && (cache->flag & PTCACHE_OUTDATED) /* && !(cache->flag & PTCACHE_BAKED)*/)
 	{
 		return false;
 	}
 
-	parent = BKE_object_add(G.main, scene, OB_EMPTY);
+	parent = BKE_object_add_named(G.main, scene, OB_EMPTY, name);
+	BKE_mesh_center_centroid(ob->data, obloc);
+	copy_v3_v3(parent->loc, ob->loc);
+	sub_v3_v3v3(diff, obloc, parent->loc);
+	MEM_freeN((void*)name);
 
 	for (mi = fmd->meshIslands.first; mi; mi = mi->next)
 	{
 		int i = 0;
 		Object* ob_new;
 		Mesh* me;
-		Base *bas;
 		float cent[3];
-		float origmat[4][4];
-		float origloc[3];
+
+		const char *name = BLI_strdupcat(ob->id.name, "_key");
 
 		if (fmd->frac_mesh->cancel == 1)
 		{
 			fmd->frac_mesh->cancel = 0;
+			fmd->frac_mesh->running = 0;
 			return true;
 		}
 
-		ob_new = BKE_object_add(G.main, scene, OB_MESH);
-		ob_new->parent = parent;
+		ob_new = BKE_object_add_named(G.main, scene, OB_MESH, name);
+		MEM_freeN((void*)name);
+
+		ED_object_parent_set(NULL, G.main, scene, ob_new, parent, PAR_OBJECT, false, false, NULL);
 
 		assign_matarar(ob_new, give_matarar(ob), *give_totcolp(ob));
 
@@ -2735,18 +2745,23 @@ static bool convert_modifier_to_keyframes(FractureModifierData* fmd, Group* gr,
 		BKE_group_object_add(gr, ob_new, scene, bas);
 
 		scene->basact = bas;
-		ED_base_object_select(bas, BA_SELECT);
+		//ED_base_object_select(bas, BA_SELECT);
 
 		me = (Mesh*)ob_new->data;
 		me->edit_btmesh = NULL;
 
 		DM_to_mesh(mi->physics_mesh, me, ob_new, CD_MASK_MESH);
 
+		ED_rigidbody_object_add(scene, ob_new, RBO_TYPE_ACTIVE, NULL);
+		ob_new->rigidbody_object->flag |= RBO_FLAG_KINEMATIC;
+
 		/*set origin to centroid*/
 		copy_v3_v3(cent, mi->centroid);
 		mul_m4_v3(ob_new->obmat, cent);
 		copy_v3_v3(ob_new->loc, cent);
 
+
+
 		if (start < mi->start_frame) {
 			start = mi->start_frame;
 		}
@@ -2755,13 +2770,11 @@ static bool convert_modifier_to_keyframes(FractureModifierData* fmd, Group* gr,
 			end = mi->start_frame + mi->frame_count;
 		}
 
-		copy_m4_m4(origmat, ob_new->obmat);
-		copy_v3_v3(origloc, ob_new->loc);
 		for (i = start+1; i < end-1; i++)
 		{
 			/*move object (loc, rot)*/
 
-			float loc[3], rot[4];
+			float loc[3] = {0.0f, 0.0f, 0.0f}, rot[4] = {0.0f, 0.0f, 0.0f, 0.0f};
 			float mat[4][4];
 			float size[3] = {1.0f, 1.0f, 1.0f};
 
@@ -2788,6 +2801,9 @@ static bool convert_modifier_to_keyframes(FractureModifierData* fmd, Group* gr,
 				rot[3] = mi->rots[i*4+3];
 			}
 
+			sub_v3_v3(loc, obloc);
+			add_v3_v3(loc, diff);
+
 			loc_quat_size_to_mat4(mat, loc, rot, size);
 
 			BKE_scene_frame_set(scene, (double)i);
@@ -2855,8 +2871,10 @@ static void convert_startjob(void *customdata, short *stop, short *do_update, fl
 	*do_update = true;
 	*stop = 0;
 
-	if (fmd->frac_mesh)
+	if (fmd->frac_mesh) {
 		fmd->frac_mesh->cancel = 0;
+		fmd->frac_mesh->running = 1;
+	}
 
 	convert_modifier_to_keyframes(fmd, gr, ob, scene, start, end);
 }
@@ -2929,6 +2947,9 @@ static int rigidbody_convert_keyframes_exec(bContext *C, wmOperator *op)
 		{
 			if (convert_modifier_to_keyframes(rmd, gr, obact, scene, start, end))
 			{
+				DAG_relations_tag_update(G.main);
+				WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
+				WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL);
 				return OPERATOR_FINISHED;
 			}
 			else
@@ -2944,24 +2965,17 @@ static int rigidbody_convert_keyframes_exec(bContext *C, wmOperator *op)
 
 void OBJECT_OT_rigidbody_convert_to_keyframes(wmOperatorType *ot)
 {
-	PropertyRNA *prop;
 
 	ot->name = "Convert To Keyframed Objects";
 	ot->description = "Convert the Rigid Body modifier shards to keyframed real objects";
 	ot->idname = "OBJECT_OT_rigidbody_convert_to_keyframes";
 
 	ot->poll = fracture_poll;
-	//ot->invoke = rigidbody_convert_invoke;
 	ot->exec = rigidbody_convert_keyframes_exec;
 
 	RNA_def_int(ot->srna, "start_frame", 1,  0, 100000, "Start Frame", "", 0, 100000);
 	RNA_def_int(ot->srna, "end_frame", 250, 0, 100000, "End Frame", "", 0, 100000);
 
-	//inlined from insert_keyframe op
-	prop = RNA_def_enum(ot->srna, "type", DummyRNA_DEFAULT_items, 0, "Keying Set", "The Keying Set to use");
-	//RNA_def_enum_funcs(prop, ANIM_keying_sets_enum_itemf);
-	RNA_def_property_flag(prop, PROP_HIDDEN);
-
 	/* flags */
 	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_INTERNAL;
 	edit_modifier_properties(ot);




More information about the Bf-blender-cvs mailing list