[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