[Bf-blender-cvs] [54ae1e9] gooseberry: Merge branch 'master' into gooseberry
Lukas Tönne
noreply at git.blender.org
Mon Nov 17 14:53:10 CET 2014
Commit: 54ae1e90d72a8fb46e55672697a0a570143b6cb3
Author: Lukas Tönne
Date: Mon Nov 17 14:52:53 2014 +0100
Branches: gooseberry
https://developer.blender.org/rB54ae1e90d72a8fb46e55672697a0a570143b6cb3
Merge branch 'master' into gooseberry
Conflicts:
source/blender/blenkernel/BKE_key.h
source/blender/editors/transform/transform_manipulator.c
===================================================================
===================================================================
diff --cc source/blender/blenkernel/BKE_key.h
index 142245b,31b2c7d..0a92bb9
--- a/source/blender/blenkernel/BKE_key.h
+++ b/source/blender/blenkernel/BKE_key.h
@@@ -91,25 -81,31 +91,35 @@@ typedef struct WeightsArrayCache
float **defgroup_weights;
} WeightsArrayCache;
- float **BKE_key_get_per_block_object_weights(struct Object *ob, struct Key *key, struct WeightsArrayCache *cache);
- float **BKE_key_get_per_block_particle_weights(struct ParticleSystem *psys, struct Key *key, struct WeightsArrayCache *cache);
-float **BKE_keyblock_get_per_block_weights(struct Object *ob, struct Key *key, struct WeightsArrayCache *cache);
++float **BKE_keyblock_get_per_block_object_weights(struct Object *ob, struct Key *key, struct WeightsArrayCache *cache);
++float **BKE_keyblock_get_per_block_particle_weights(struct ParticleSystem *psys, struct Key *key, struct WeightsArrayCache *cache);
void BKE_keyblock_free_per_block_weights(struct Key *key, float **per_keyblock_weights, struct WeightsArrayCache *cache);
void BKE_key_evaluate_relative(const int start, int end, const int tot, char *basispoin, struct Key *key, struct KeyBlock *actkb,
float **per_keyblock_weights, const int mode);
/* conversion functions */
- void BKE_key_convert_to_mesh(struct KeyBlock *kb, struct Mesh *me);
- void BKE_key_convert_from_mesh(struct Mesh *me, struct KeyBlock *kb);
- void BKE_key_convert_to_lattice(struct KeyBlock *kb, struct Lattice *lt);
- void BKE_key_convert_from_lattice(struct Lattice *lt, struct KeyBlock *kb);
- void BKE_key_convert_to_curve(struct KeyBlock *kb, struct Curve *cu, struct ListBase *nurb);
- void BKE_key_convert_from_curve(struct Curve *cu, struct KeyBlock *kb, struct ListBase *nurb);
- float (*BKE_key_convert_to_vertcos(struct Object *ob, struct KeyBlock *kb))[3];
- void BKE_key_convert_from_vertcos(struct Object *ob, struct KeyBlock *kb, float (*vertCos)[3]);
- void BKE_key_convert_from_offset(struct Object *ob, struct KeyBlock *kb, float (*ofs)[3]);
- void BKE_key_convert_to_hair_keys(struct KeyBlock *kb, struct Object *ob, struct ParticleSystem *psys);
- void BKE_key_convert_from_hair_keys(struct Object *ob, struct ParticleSystem *psys, struct KeyBlock *kb);
+ /* Note: 'update_from' versions do not (re)allocate mem in kb, while 'convert_from' do. */
+ void BKE_keyblock_update_from_lattice(struct Lattice *lt, struct KeyBlock *kb);
+ void BKE_keyblock_convert_from_lattice(struct Lattice *lt, struct KeyBlock *kb);
+ void BKE_keyblock_convert_to_lattice(struct KeyBlock *kb, struct Lattice *lt);
+
+ void BKE_keyblock_update_from_curve(struct Curve *cu, struct KeyBlock *kb, struct ListBase *nurb);
+ void BKE_keyblock_convert_from_curve(struct Curve *cu, struct KeyBlock *kb, struct ListBase *nurb);
+ void BKE_keyblock_convert_to_curve(struct KeyBlock *kb, struct Curve *cu, struct ListBase *nurb);
+
+ void BKE_keyblock_update_from_mesh(struct Mesh *me, struct KeyBlock *kb);
+ void BKE_keyblock_convert_from_mesh(struct Mesh *me, struct KeyBlock *kb);
+ void BKE_keyblock_convert_to_mesh(struct KeyBlock *kb, struct Mesh *me);
+
+ void BKE_keyblock_update_from_vertcos(struct Object *ob, struct KeyBlock *kb, float (*vertCos)[3]);
+ void BKE_keyblock_convert_from_vertcos(struct Object *ob, struct KeyBlock *kb, float (*vertCos)[3]);
+ float (*BKE_keyblock_convert_to_vertcos(struct Object *ob, struct KeyBlock *kb))[3];
+
+ void BKE_keyblock_update_from_offset(struct Object *ob, struct KeyBlock *kb, float (*ofs)[3]);
+
++void BKE_keyblock_convert_to_hair_keys(struct KeyBlock *kb, struct Object *ob, struct ParticleSystem *psys);
++void BKE_keyblock_convert_from_hair_keys(struct Object *ob, struct ParticleSystem *psys, struct KeyBlock *kb);
+
/* other management */
bool BKE_keyblock_move(struct Object *ob, int org_index, int new_index);
diff --cc source/blender/blenkernel/intern/key.c
index 479444c,3ba0c6e..5b1aa63
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@@ -1168,7 -1122,7 +1168,7 @@@ static float *get_object_weights_array(
return NULL;
}
- float **BKE_key_get_per_block_object_weights(Object *ob, Key *key, WeightsArrayCache *cache)
-float **BKE_keyblock_get_per_block_weights(Object *ob, Key *key, WeightsArrayCache *cache)
++float **BKE_keyblock_get_per_block_object_weights(Object *ob, Key *key, WeightsArrayCache *cache)
{
KeyBlock *keyblock;
float **per_keyblock_weights;
@@@ -1182,40 -1136,7 +1182,40 @@@
keyblock;
keyblock = keyblock->next, keyblock_index++)
{
- per_keyblock_weights[keyblock_index] = get_weights_array(ob, keyblock->vgroup, cache);
+ per_keyblock_weights[keyblock_index] = get_object_weights_array(ob, keyblock->vgroup, cache);
+ }
+
+ return per_keyblock_weights;
+}
+
+static float *get_particle_weights_array(ParticleSystem *UNUSED(psys), char *vgroup, WeightsArrayCache *UNUSED(cache))
+{
+// MDeformVert *dvert = NULL;
+// int totvert = 0, defgrp_index = 0;
+
+ /* no vgroup string set? */
+ if (vgroup[0] == 0) return NULL;
+
+ // XXX TODO
+
+ return NULL;
+}
+
- float **BKE_key_get_per_block_particle_weights(ParticleSystem *psys, Key *key, WeightsArrayCache *cache)
++float **BKE_keyblock_get_per_block_particle_weights(ParticleSystem *psys, Key *key, WeightsArrayCache *cache)
+{
+ KeyBlock *keyblock;
+ float **per_keyblock_weights;
+ int keyblock_index;
+
+ per_keyblock_weights =
+ MEM_mallocN(sizeof(*per_keyblock_weights) * key->totkey,
+ "per keyblock weights");
+
+ for (keyblock = key->block.first, keyblock_index = 0;
+ keyblock;
+ keyblock = keyblock->next, keyblock_index++)
+ {
+ per_keyblock_weights[keyblock_index] = get_particle_weights_array(psys, keyblock->vgroup, cache);
}
return per_keyblock_weights;
@@@ -1281,7 -1202,7 +1281,7 @@@ static void do_mesh_key(Scene *scene, O
if (key->type == KEY_RELATIVE) {
WeightsArrayCache cache = {0, NULL};
float **per_keyblock_weights;
- per_keyblock_weights = BKE_key_get_per_block_object_weights(ob, key, &cache);
- per_keyblock_weights = BKE_keyblock_get_per_block_weights(ob, key, &cache);
++ per_keyblock_weights = BKE_keyblock_get_per_block_object_weights(ob, key, &cache);
BKE_key_evaluate_relative(0, tot, tot, (char *)out, key, actkb, per_keyblock_weights, KEY_MODE_DUMMY);
BKE_keyblock_free_per_block_weights(key, per_keyblock_weights, &cache);
}
@@@ -1445,7 -1366,7 +1445,7 @@@ static void do_latt_key(Scene *scene, O
else {
if (key->type == KEY_RELATIVE) {
float **per_keyblock_weights;
- per_keyblock_weights = BKE_key_get_per_block_object_weights(ob, key, NULL);
- per_keyblock_weights = BKE_keyblock_get_per_block_weights(ob, key, NULL);
++ per_keyblock_weights = BKE_keyblock_get_per_block_object_weights(ob, key, NULL);
BKE_key_evaluate_relative(0, tot, tot, (char *)out, key, actkb, per_keyblock_weights, KEY_MODE_DUMMY);
BKE_keyblock_free_per_block_weights(key, per_keyblock_weights, NULL);
}
@@@ -1464,32 -1385,6 +1464,32 @@@
if (lt->flag & LT_OUTSIDE) outside_lattice(lt);
}
+static void do_psys_key(ParticleSystem *psys, Key *key, char *out, const int tot)
+{
+ KeyBlock *k[4], *actkb = BKE_keyblock_from_particles(psys);
+ float t[4];
+ int flag = 0;
+
+ if (key->type == KEY_RELATIVE) {
+ WeightsArrayCache cache = {0, NULL};
+ float **per_keyblock_weights;
+
- per_keyblock_weights = BKE_key_get_per_block_particle_weights(psys, key, &cache);
++ per_keyblock_weights = BKE_keyblock_get_per_block_particle_weights(psys, key, &cache);
+ BKE_key_evaluate_relative(0, tot, tot, (char *)out, key, actkb, per_keyblock_weights, KEY_MODE_DUMMY);
+ BKE_keyblock_free_per_block_weights(key, per_keyblock_weights, &cache);
+ }
+ else {
+ const float ctime_scaled = key->ctime / 100.0f;
+
+ flag = setkeys(ctime_scaled, &key->block, k, t, 0);
+
+ if (flag == 0)
+ do_key(0, tot, tot, (char *)out, key, actkb, k, t, KEY_MODE_DUMMY);
+ else
+ cp_key(0, tot, tot, (char *)out, key, actkb, k[2], NULL, KEY_MODE_DUMMY);
+ }
+}
+
/* returns key coordinates (+ tilt) when key applied, NULL otherwise */
float *BKE_key_evaluate_object_ex(Scene *scene, Object *ob, int *r_totelem,
float *arr, size_t arr_size)
@@@ -2256,48 -2042,6 +2242,48 @@@ void BKE_keyblock_update_from_offset(Ob
}
}
+/************************* Mesh ************************/
+
- void BKE_key_convert_to_hair_keys(struct KeyBlock *kb, struct Object *UNUSED(ob), struct ParticleSystem *psys)
++void BKE_keyblock_convert_to_hair_keys(struct KeyBlock *kb, struct Object *UNUSED(ob), struct ParticleSystem *psys)
+{
+ ParticleData *pa;
+ HairKey *hkey;
+ float *fp;
+ int i, k;
+
+ fp = kb->data;
+ for (i = 0, pa = psys->particles; i < psys->totpart; ++i, ++pa) {
+ for (k = 0, hkey = pa->hair; k < pa->totkey; ++k, ++hkey) {
+ copy_v3_v3(hkey->co, fp);
+ fp += 3;
+ }
+ }
+}
+
- void BKE_key_convert_from_hair_keys(struct Object *UNUSED(ob), struct ParticleSystem *psys, struct KeyBlock *kb)
++void BKE_keyblock_convert_from_hair_keys(struct Object *UNUSED(ob), struct ParticleSystem *psys, struct KeyBlock *kb)
+{
+ ParticleData *pa;
+ HairKey *hkey;
+ float *fp;
+ int i, k;
+
+ if (kb->data) MEM_freeN(kb->data);
+
+ kb->totelem = 0;
+ for (i = 0, pa = psys->particles; i < psys->totpart; ++i, ++pa) {
+ kb->totelem += pa->totkey;
+ }
+ kb->data = MEM_mallocN(psys->key->elemsize * kb->totelem, "kb->data");
+
+ fp = kb->data;
+ for (i = 0, pa = psys->particles; i < psys->totpart; ++i, ++pa) {
+ for (k = 0, hkey = pa->hair; k < pa->totkey; ++k, ++hkey) {
+ copy_v3_v3(fp, hkey->co);
+ fp += 3;
+ }
+ }
+}
+
/* ==========================================================*/
/** Move shape key from org_index to new_index. Safe, clamps index to valid range, updates reference keys,
diff --cc source/blender/blenkernel/intern/particle.c
index e3f4cf1,bfb7802..0b7aaf7
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@@ -359,34 -358,6 +359,3
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list