[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32847] trunk/blender/source/blender/ editors/space_view3d/view3d_select.c: added metaball lasso select.

Campbell Barton ideasman42 at gmail.com
Wed Nov 3 03:28:22 CET 2010


Revision: 32847
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32847
Author:   campbellbarton
Date:     2010-11-03 03:28:11 +0100 (Wed, 03 Nov 2010)

Log Message:
-----------
added metaball lasso select.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_view3d/view3d_select.c

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_select.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_select.c	2010-11-03 01:59:15 UTC (rev 32846)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_select.c	2010-11-03 02:28:11 UTC (rev 32847)
@@ -700,6 +700,34 @@
 	}
 }
 
+
+
+
+static void do_lasso_select_meta(ViewContext *vc, short mcords[][2], short moves, short extend, short select)
+{
+	MetaBall *mb = (MetaBall*)vc->obedit->data;
+	MetaElem *ml;
+	float vec[3];
+	short sco[2];
+
+	if (extend == 0 && select) {
+		for(ml= mb->editelems->first; ml; ml= ml->next) {
+			ml->flag &= ~SELECT;
+		}
+	}
+
+	for(ml= mb->editelems->first; ml; ml= ml->next) {
+		
+		mul_v3_m4v3(vec, vc->obedit->obmat, &ml->x);
+		project_short(vc->ar, vec, sco);
+
+		if(lasso_inside(mcords, moves, sco[0], sco[1])) {
+			if(select)	ml->flag |= SELECT;
+			else		ml->flag &= ~SELECT;
+		}
+	}
+}
+
 static void do_lasso_select_paintface(ViewContext *vc, short mcords[][2], short moves, short extend, short select)
 {
 	Object *ob= vc->obact;
@@ -772,15 +800,27 @@
 		}
 	}
 	else { /* Edit Mode */
-		if(vc->obedit->type==OB_MESH)
+		switch(vc->obedit->type) {
+		case OB_MESH:
 			do_lasso_select_mesh(vc, mcords, moves, extend, select);
-		else if(vc->obedit->type==OB_CURVE || vc->obedit->type==OB_SURF) 
+			break;
+		case OB_CURVE:
+		case OB_SURF:
 			do_lasso_select_curve(vc, mcords, moves, extend, select);
-		else if(vc->obedit->type==OB_LATTICE) 
+			break;
+		case OB_LATTICE:
 			do_lasso_select_lattice(vc, mcords, moves, extend, select);
-		else if(vc->obedit->type==OB_ARMATURE)
+			break;
+		case OB_ARMATURE:
 			do_lasso_select_armature(vc, mcords, moves, extend, select);
-	
+			break;
+		case OB_MBALL:
+			do_lasso_select_meta(vc, mcords, moves, extend, select);
+			break;
+		default:
+			assert(!"lasso select on incorrect object type");
+		}
+
 		WM_event_add_notifier(C, NC_GEOM|ND_SELECT, vc->obedit->data);
 	}
 }
@@ -1514,13 +1554,13 @@
 			if(ml->selcol1==buffer[ (4 * a) + 3 ]) {
 				ml->flag |= MB_SCALE_RAD;
 				if(select)	ml->flag |= SELECT;
-				else			ml->flag &= ~SELECT;
+				else		ml->flag &= ~SELECT;
 				break;
 			}
 			if(ml->selcol2==buffer[ (4 * a) + 3 ]) {
 				ml->flag &= ~MB_SCALE_RAD;
 				if(select)	ml->flag |= SELECT;
-				else			ml->flag &= ~SELECT;
+				else		ml->flag &= ~SELECT;
 				break;
 			}
 		}





More information about the Bf-blender-cvs mailing list