[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57858] trunk/blender/source/blender: view-selected didnt work for metaballs in object mode ( radius from previous commit was 2x too large too).

Campbell Barton ideasman42 at gmail.com
Fri Jun 28 20:19:55 CEST 2013


Revision: 57858
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57858
Author:   campbellbarton
Date:     2013-06-28 18:19:55 +0000 (Fri, 28 Jun 2013)
Log Message:
-----------
view-selected didnt work for metaballs in object mode (radius from previous commit was 2x too large too).

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_mball.h
    trunk/blender/source/blender/blenkernel/intern/mball.c
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/editors/space_view3d/view3d_snap.c

Modified: trunk/blender/source/blender/blenkernel/BKE_mball.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_mball.h	2013-06-28 17:58:48 UTC (rev 57857)
+++ trunk/blender/source/blender/blenkernel/BKE_mball.h	2013-06-28 18:19:55 UTC (rev 57858)
@@ -57,9 +57,11 @@
 
 void BKE_mball_properties_copy(struct Scene *scene, struct Object *active_object);
 
-int BKE_mball_minmax(struct MetaBall *mb, float min[3], float max[3]);
-int BKE_mball_center_median(struct MetaBall *mb, float r_cent[3]);
-int BKE_mball_center_bounds(struct MetaBall *mb, float r_cent[3]);
+bool BKE_mball_minmax(struct MetaBall *mb, float min[3], float max[3]);
+bool BKE_mball_minmax_ex(struct MetaBall *mb, float min[3], float max[3],
+                         float obmat[4][4], const short flag);
+bool BKE_mball_center_median(struct MetaBall *mb, float r_cent[3]);
+bool BKE_mball_center_bounds(struct MetaBall *mb, float r_cent[3]);
 void BKE_mball_translate(struct MetaBall *mb, const float offset[3]);
 
 struct MetaElem *BKE_mball_element_add(struct MetaBall *mb, const int type);

Modified: trunk/blender/source/blender/blenkernel/intern/mball.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mball.c	2013-06-28 17:58:48 UTC (rev 57857)
+++ trunk/blender/source/blender/blenkernel/intern/mball.c	2013-06-28 18:19:55 UTC (rev 57858)
@@ -2375,8 +2375,44 @@
 	freepolygonize(&process);
 }
 
+bool BKE_mball_minmax_ex(MetaBall *mb, float min[3], float max[3],
+                         float obmat[4][4], const short flag)
+{
+	const float scale = obmat ? mat4_to_scale(obmat) : 1.0f;
+	MetaElem *ml;
+	bool change = false;
+	float centroid[3], vec[3];
+
+	INIT_MINMAX(min, max);
+
+	for (ml = mb->elems.first; ml; ml = ml->next) {
+		if ((ml->flag & flag) == flag) {
+			const float scale_mb = (ml->rad * 0.5f) * scale;
+			int i;
+
+			if (obmat) {
+				mul_v3_m4v3(centroid, obmat, &ml->x);
+			}
+			else {
+				copy_v3_v3(centroid, &ml->x);
+			}
+
+			/* TODO, non circle shapes cubes etc, probably nobody notices - campbell */
+			for (i = -1; i != 3; i += 2) {
+				copy_v3_v3(vec, centroid);
+				add_v3_fl(vec, scale_mb * i);
+				minmax_v3v3_v3(min, max, vec);
+			}
+			change = true;
+		}
+	}
+
+	return change;
+}
+
+
 /* basic vertex data functions */
-int BKE_mball_minmax(MetaBall *mb, float min[3], float max[3])
+bool BKE_mball_minmax(MetaBall *mb, float min[3], float max[3])
 {
 	MetaElem *ml;
 
@@ -2389,7 +2425,7 @@
 	return (mb->elems.first != NULL);
 }
 
-int BKE_mball_center_median(MetaBall *mb, float r_cent[3])
+bool BKE_mball_center_median(MetaBall *mb, float r_cent[3])
 {
 	MetaElem *ml;
 	int total = 0;
@@ -2407,7 +2443,7 @@
 	return (total != 0);
 }
 
-int BKE_mball_center_bounds(MetaBall *mb, float r_cent[3])
+bool BKE_mball_center_bounds(MetaBall *mb, float r_cent[3])
 {
 	float min[3], max[3];
 

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2013-06-28 17:58:48 UTC (rev 57857)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2013-06-28 18:19:55 UTC (rev 57858)
@@ -2313,7 +2313,7 @@
 	BoundBox bb;
 	float vec[3];
 	int a;
-	short change = FALSE;
+	bool change = false;
 	
 	switch (ob->type) {
 		case OB_CURVE:
@@ -2390,6 +2390,17 @@
 			}
 		}
 		break;
+		case OB_MBALL:
+		{
+			float ob_min[3], ob_max[3];
+
+			change = BKE_mball_minmax_ex(ob->data, ob_min, ob_max, ob->obmat, 0);
+			if (change) {
+				minmax_v3v3_v3(min_r, max_r, ob_min);
+				minmax_v3v3_v3(min_r, max_r, ob_max);
+			}
+			break;
+		}
 	}
 
 	if (change == FALSE) {

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_snap.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_snap.c	2013-06-28 17:58:48 UTC (rev 57857)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_snap.c	2013-06-28 18:19:55 UTC (rev 57858)
@@ -54,6 +54,7 @@
 #include "BKE_depsgraph.h"
 #include "BKE_lattice.h"
 #include "BKE_main.h"
+#include "BKE_mball.h"
 #include "BKE_object.h"
 #include "BKE_editmesh.h"
 #include "BKE_DerivedMesh.h"
@@ -1091,25 +1092,14 @@
 
 	/* metaballs are an exception */
 	if (obedit->type == OB_MBALL) {
-		const float scale = mat4_to_scale(obedit->obmat);
-		MetaBall *mb = obedit->data;
-		MetaElem *ml;
-		bool change = false;
+		float ob_min[3], ob_max[3];
+		bool change;
 
-		for (ml = mb->elems.first; ml; ml = ml->next) {
-			if (ml->flag & SELECT) {
-				const float scale_mb = ml->rad * scale;
-				int i;
-				mul_v3_m4v3(centroid, obedit->obmat, &ml->x);
-				for (i = -1; i != 3; i += 2) {
-					copy_v3_v3(vec, centroid);
-					add_v3_fl(vec, scale_mb * i);
-					minmax_v3v3_v3(min, max, vec);
-				}
-				change = true;
-			}
+		change = BKE_mball_minmax_ex(obedit->data, ob_min, ob_max, obedit->obmat, SELECT);
+		if (change) {
+			minmax_v3v3_v3(min, max, ob_min);
+			minmax_v3v3_v3(min, max, ob_max);
 		}
-
 		return change;
 	}
 




More information about the Bf-blender-cvs mailing list