Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenkernel/intern/mball.c')
-rw-r--r--source/blender/blenkernel/intern/mball.c52
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);
+ }
+}