[Bf-blender-cvs] [4f338df] gooseberry: Merge branch 'master' into gooseberry

Lukas Tönne noreply at git.blender.org
Wed Jan 7 14:52:36 CET 2015


Commit: 4f338dfdeaf15bb4a675bbc4070587f0976190ca
Author: Lukas Tönne
Date:   Wed Jan 7 14:52:08 2015 +0100
Branches: gooseberry
https://developer.blender.org/rB4f338dfdeaf15bb4a675bbc4070587f0976190ca

Merge branch 'master' into gooseberry

Conflicts:
	source/blender/blenkernel/BKE_key.h
	source/blender/blenkernel/intern/key.c

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



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

diff --cc source/blender/blenkernel/BKE_key.h
index 0a92bb9,9535b92..afa9a41
--- a/source/blender/blenkernel/BKE_key.h
+++ b/source/blender/blenkernel/BKE_key.h
@@@ -65,12 -60,11 +65,16 @@@ void key_curve_position_weights(float t
  void key_curve_tangent_weights(float t, float data[4], int type);
  void key_curve_normal_weights(float t, float data[4], int type);
  
- float *BKE_key_evaluate_object_ex(struct Scene *scene, struct Object *ob, int *r_totelem,
-                                   float *arr, size_t arr_size);
- float *BKE_key_evaluate_object(struct Scene *scene, struct Object *ob, int *r_totelem);
- float *BKE_key_evaluate_particles_ex(struct Object *ob, struct ParticleSystem *psys, int *r_totelem,
-                                      float *arr, size_t arr_size);
- float *BKE_key_evaluate_particles(struct Object *ob, struct ParticleSystem *psys, int *r_totelem);
+ float *BKE_key_evaluate_object_ex(
+         struct Object *ob, int *r_totelem,
+         float *arr, size_t arr_size);
+ float *BKE_key_evaluate_object(
+         struct Object *ob, int *r_totelem);
++float *BKE_key_evaluate_particles_ex(
++        struct Object *ob, struct ParticleSystem *psys, int *r_totelem,
++        float *arr, size_t arr_size);
++float *BKE_key_evaluate_particles(
++        struct Object *ob, struct ParticleSystem *psys, int *r_totelem);
  
  struct Key      *BKE_key_from_object(struct Object *ob);
  struct KeyBlock *BKE_keyblock_from_object(struct Object *ob);
diff --cc source/blender/blenkernel/intern/key.c
index 5b1aa63,32e95e7..f7dfa2d
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@@ -1253,47 -1170,23 +1249,23 @@@ static void do_mesh_key(Object *ob, Ke
  	float t[4];
  	int flag = 0;
  
- 	if (key->slurph && key->type != KEY_RELATIVE) {
+ 	if (key->type == KEY_RELATIVE) {
+ 		WeightsArrayCache cache = {0, NULL};
+ 		float **per_keyblock_weights;
 -		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);
+ 	}
+ 	else {
  		const float ctime_scaled = key->ctime / 100.0f;
- 		float delta = (float)key->slurph / tot;
- 		float cfra = BKE_scene_frame_get(scene);
- 		int step, a;
- 
- 		if (tot > 100 && slurph_opt) {
- 			step = tot / 50;
- 			delta *= step;
- 			/* in do_key and cp_key the case a>tot is handled */
- 		}
- 		else {
- 			step = 1;
- 		}
  
- 		for (a = 0; a < tot; a += step, cfra += delta) {
- 			flag = setkeys(ctime_scaled, &key->block, k, t, 0);
+ 		flag = setkeys(ctime_scaled, &key->block, k, t, 0);
  
- 			if (flag == 0)
- 				do_key(a, a + step, tot, (char *)out, key, actkb, k, t, KEY_MODE_DUMMY);
- 			else
- 				cp_key(a, a + step, tot, (char *)out, key, actkb, k[2], NULL, KEY_MODE_DUMMY);
- 		}
- 	}
- 	else {
- 		if (key->type == KEY_RELATIVE) {
- 			WeightsArrayCache cache = {0, NULL};
- 			float **per_keyblock_weights;
- 			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);
+ 		if (flag == 0) {
+ 			do_key(0, tot, tot, (char *)out, key, actkb, k, t, KEY_MODE_DUMMY);
  		}
  		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);
+ 			cp_key(0, tot, tot, (char *)out, key, actkb, k[2], NULL, KEY_MODE_DUMMY);
  		}
  	}
  }
@@@ -1427,72 -1262,32 +1341,58 @@@ static void do_latt_key(Object *ob, Ke
  	float t[4];
  	int flag;
  	
- 	if (key->slurph && key->type != KEY_RELATIVE) {
- 		const float ctime_scaled = key->ctime / 100.0f;
- 		float delta = (float)key->slurph / tot;
- 		float cfra = BKE_scene_frame_get(scene);
- 		int a;
- 
- 		for (a = 0; a < tot; a++, cfra += delta) {
- 			flag = setkeys(ctime_scaled, &key->block, k, t, 0);
- 
- 			if (flag == 0)
- 				do_key(a, a + 1, tot, out, key, actkb, k, t, KEY_MODE_DUMMY);
- 			else
- 				cp_key(a, a + 1, tot, out, key, actkb, k[2], NULL, KEY_MODE_DUMMY);
- 		}
+ 	if (key->type == KEY_RELATIVE) {
+ 		float **per_keyblock_weights;
 -		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);
  	}
  	else {
- 		if (key->type == KEY_RELATIVE) {
- 			float **per_keyblock_weights;
- 			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);
+ 		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 {
- 			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);
+ 			cp_key(0, tot, tot, (char *)out, key, actkb, k[2], NULL, KEY_MODE_DUMMY);
  		}
  	}
- 	
+ 
  	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_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)
+ float *BKE_key_evaluate_object_ex(
+         Object *ob, int *r_totelem,
+         float *arr, size_t arr_size)
  {
  	Key *key = BKE_key_from_object(ob);
  	KeyBlock *actkb = BKE_keyblock_from_object(ob);
@@@ -1586,83 -1381,11 +1486,83 @@@
  	return (float *)out;
  }
  
- float *BKE_key_evaluate_object(Scene *scene, Object *ob, int *r_totelem)
+ float *BKE_key_evaluate_object(Object *ob, int *r_totelem)
  {
- 	return BKE_key_evaluate_object_ex(scene, ob, r_totelem, NULL, 0);
+ 	return BKE_key_evaluate_object_ex(ob, r_totelem, NULL, 0);
  }
  
 +/* returns key coordinates when key applied, NULL otherwise */
 +float *BKE_key_evaluate_particles_ex(Object *ob, ParticleSystem *psys, int *r_totelem,
 +                                     float *arr, size_t arr_size)
 +{
 +	Key *key = psys->key;
 +	KeyBlock *actkb = BKE_keyblock_from_particles(psys);
 +	char *out;
 +	int tot = 0, size = 0;
 +	int i;
 +	
 +	if (key == NULL || BLI_listbase_is_empty(&key->block))
 +		return NULL;
 +	
 +	/* compute size of output array */
 +	tot = 0;
 +	for (i = 0; i < psys->totpart; ++i)
 +		tot += psys->particles[i].totkey;
 +	size = tot * 3 * sizeof(float);
 +	
 +	/* if nothing to interpolate, cancel */
 +	if (tot == 0 || size == 0)
 +		return NULL;
 +	
 +	/* allocate array */
 +	if (arr == NULL) {
 +		out = MEM_callocN(size, "BKE_key_evaluate_object out");
 +	}
 +	else {
 +		if (arr_size != size) {
 +			return NULL;
 +		}
 +		
 +		out = (char *)arr;
 +	}
 +	
 +	/* prevent python from screwing this up? anyhoo, the from pointer could be dropped */
 +	BKE_key_set_from_particles(key, ob, psys);
 +	
 +	if (ob->shapeflag & OB_SHAPE_LOCK) {
 +		/* shape locked, copy the locked shape instead of blending */
 +		KeyBlock *kb = BLI_findlink(&key->block, psys->shapenr - 1);
 +		float *weights;
 +		
 +		if (kb && (kb->flag & KEYBLOCK_MUTE))
 +			kb = key->refkey;
 +		
 +		if (kb == NULL) {
 +			kb = key->block.first;
 +			psys->shapenr = 1;
 +		}
 +		
 +		weights = get_particle_weights_array(psys, kb->vgroup, NULL);
 +		
 +		cp_key(0, tot, tot, out, key, actkb, kb, weights, 0);
 +		
 +		if (weights) MEM_freeN(weights);
 +	}
 +	else {
 +		do_psys_key(psys, key, out, tot);
 +	}
 +	
 +	if (r_totelem) {
 +		*r_totelem = tot;
 +	}
 +	return (float *)out;
 +}
 +
 +float *BKE_key_evaluate_particles(Object *ob, ParticleSystem *psys, int *r_totelem)
 +{
 +	return BKE_key_evaluate_particles_ex(ob, psys, r_totelem, NULL, 0);
 +}
 +
  Key *BKE_key_from_object(Object *ob)
  {
  	if (ob == NULL) return NULL;
diff --cc source/blender/makesdna/DNA_key_types.h
index 90cc1ef,60ab01c..4cd2a41
--- a/source/blender/makesdna/DNA_key_types.h
+++ b/source/blender/makesdna/DNA_key_types.h
@@@ -102,12 -90,11 +102,12 @@@ typedef struct Key 
  	struct Ipo *ipo  DNA_DEPRECATED;  /* old animation system, deprecated for 2.5 */
  
  	ID *from;
 +	KeyFrom from_extra;     /* supplementary info about the 'from' datablock */
  
- 	short type;    /* absolute or relative shape key */
- 	short totkey;  /* (totkey == BLI_listbase_count(&key->block)) */
- 	short slurph;  /* quaint feature to delay moving points based on their order (Key->type == KEY_NORMAL) only */
+ 	int totkey;  /*

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list