diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-02-26 12:55:31 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-02-26 12:55:31 +0400 |
commit | f268918d504e6c25de6c85e3cfa0a6e8e06aaf8f (patch) | |
tree | b3602e68590662c08fbc9e16f781fc4d460e8733 /source/blender/blenkernel/intern/mball.c | |
parent | 8285fef0e88e1816bf57b6e14cb659584344c99d (diff) |
Fix #30337: missed Set Origin for Metaball
Implemented Set Origin operator for Meta Balls.
Diffstat (limited to 'source/blender/blenkernel/intern/mball.c')
-rw-r--r-- | source/blender/blenkernel/intern/mball.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c index 7f05aaed9b0..2e8c026b75e 100644 --- a/source/blender/blenkernel/intern/mball.c +++ b/source/blender/blenkernel/intern/mball.c @@ -2282,3 +2282,55 @@ void metaball_polygonize(Scene *scene, Object *ob, ListBase *dispbase) freepolygonize(&mbproc); } +/* basic vertex data functions */ +int BKE_metaball_minmax(MetaBall *mb, float min[3], float max[3]) +{ + MetaElem *ml; + + INIT_MINMAX(min, max); + + for (ml = mb->elems.first; ml; ml = ml->next) { + DO_MINMAX(&ml->x, min, max); + } + + return (mb->elems.first != NULL); +} + +int BKE_metaball_center_median(MetaBall *mb, float cent[3]) +{ + MetaElem *ml; + int total= 0; + + zero_v3(cent); + + for (ml = mb->elems.first; ml; ml = ml->next) { + add_v3_v3(cent, &ml->x); + } + + if (total) + mul_v3_fl(cent, 1.0f/(float)total); + + return (total != 0); +} + +int BKE_metaball_center_bounds(MetaBall *mb, float cent[3]) +{ + float min[3], max[3]; + + if (BKE_metaball_minmax(mb, min, max)) { + mid_v3_v3v3(cent, min, max); + return 1; + } + + return 0; +} + +void BKE_metaball_translate(MetaBall *mb, float offset[3]) +{ + MetaElem *ml; + int i; + + for (ml = mb->elems.first; ml; ml = ml->next) { + add_v3_v3(&ml->x, offset); + } +} |