[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53288] trunk/blender/source/blender/ editors: add zbuf/depth option to weight paint lasso select.

Campbell Barton ideasman42 at gmail.com
Sun Dec 23 04:04:20 CET 2012


Revision: 53288
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53288
Author:   campbellbarton
Date:     2012-12-23 03:04:19 +0000 (Sun, 23 Dec 2012)
Log Message:
-----------
add zbuf/depth option to weight paint lasso select.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_view3d.h
    trunk/blender/source/blender/editors/space_view3d/drawobject.c
    trunk/blender/source/blender/editors/space_view3d/view3d_iterators.c
    trunk/blender/source/blender/editors/space_view3d/view3d_select.c

Modified: trunk/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_view3d.h	2012-12-23 02:32:03 UTC (rev 53287)
+++ trunk/blender/source/blender/editors/include/ED_view3d.h	2012-12-23 03:04:19 UTC (rev 53288)
@@ -124,6 +124,10 @@
 /* view3d_iterators.c */
 
 /* foreach iterators */
+void meshobject_foreachScreenVert(
+        struct ViewContext *vc,
+        void (*func)(void *userData, struct MVert *eve, const float screen_co[2], int index),
+        void *userData, const eV3DProjTest clip_flag);
 void mesh_foreachScreenVert(
         struct ViewContext *vc,
         void (*func)(void *userData, struct BMVert *eve, const float screen_co[2], int index),

Modified: trunk/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawobject.c	2012-12-23 02:32:03 UTC (rev 53287)
+++ trunk/blender/source/blender/editors/space_view3d/drawobject.c	2012-12-23 03:04:19 UTC (rev 53288)
@@ -101,7 +101,7 @@
 } eWireDrawMode;
 
 typedef struct drawDMVerts_userData {
-	BMEditMesh *em; /* BMESH BRANCH ONLY */
+	BMEditMesh *em;
 
 	int sel;
 	BMVert *eve_act;
@@ -119,7 +119,7 @@
 } drawDMVerts_userData;
 
 typedef struct drawDMEdgesSel_userData {
-	BMEditMesh *em; /* BMESH BRANCH ONLY */
+	BMEditMesh *em;
 
 	unsigned char *baseCol, *selCol, *actCol;
 	BMEdge *eed_act;
@@ -128,8 +128,8 @@
 typedef struct drawDMFacesSel_userData {
 	unsigned char *cols[3];
 
-	DerivedMesh *dm; /* BMESH BRANCH ONLY */
-	BMEditMesh *em;  /* BMESH BRANCH ONLY */
+	DerivedMesh *dm;
+	BMEditMesh *em;
 
 	BMFace *efa_act;
 	int *orig_index_mf_to_mpoly;

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_iterators.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_iterators.c	2012-12-23 02:32:03 UTC (rev 53287)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_iterators.c	2012-12-23 03:04:19 UTC (rev 53288)
@@ -27,6 +27,7 @@
 #include "DNA_curve_types.h"
 #include "DNA_lattice_types.h"
 #include "DNA_meta_types.h"
+#include "DNA_mesh_types.h"
 #include "DNA_armature_types.h"
 #include "DNA_object_types.h"
 
@@ -47,6 +48,12 @@
 #include "ED_object.h"
 #include "ED_view3d.h"
 
+typedef struct foreachScreenObjectVert_userData {
+	void (*func)(void *userData, MVert *mv, const float screen_co_b[2], int index);
+	void *userData;
+	ViewContext vc;
+	eV3DProjTest clip_flag;
+} foreachScreenObjectVert_userData;
 
 typedef struct foreachScreenVert_userData {
 	void (*func)(void *userData, BMVert *eve, const float screen_co_b[2], int index);
@@ -79,6 +86,46 @@
 
 /* ------------------------------------------------------------------------ */
 
+
+static void meshobject_foreachScreenVert__mapFunc(void *userData, int index, const float co[3],
+                                            const float UNUSED(no_f[3]), const short UNUSED(no_s[3]))
+{
+	foreachScreenObjectVert_userData *data = userData;
+	struct MVert *mv = &((Mesh *)(data->vc.obact->data))->mvert[index];
+
+	if (!(mv->flag & ME_HIDE)) {
+		float screen_co[2];
+
+		if (ED_view3d_project_float_object(data->vc.ar, co, screen_co, data->clip_flag) != V3D_PROJ_RET_OK) {
+			return;
+		}
+
+		data->func(data->userData, mv, screen_co, index);
+	}
+}
+
+void meshobject_foreachScreenVert(
+        ViewContext *vc,
+        void (*func)(void *userData, MVert *eve, const float screen_co[2], int index),
+        void *userData, eV3DProjTest clip_flag)
+{
+	foreachScreenObjectVert_userData data;
+	DerivedMesh *dm = mesh_get_derived_deform(vc->scene, vc->obact, CD_MASK_BAREMESH);
+
+	data.vc = *vc;
+	data.func = func;
+	data.userData = userData;
+	data.clip_flag = clip_flag;
+
+	if (clip_flag & V3D_PROJ_TEST_CLIP_BB) {
+		ED_view3d_clipping_local(vc->rv3d, vc->obedit->obmat);  /* for local clipping lookups */
+	}
+
+	dm->foreachMappedVert(dm, meshobject_foreachScreenVert__mapFunc, &data);
+
+	dm->release(dm);
+}
+
 static void mesh_foreachScreenVert__mapFunc(void *userData, int index, const float co[3],
                                             const float UNUSED(no_f[3]), const short UNUSED(no_s[3]))
 {

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_select.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_select.c	2012-12-23 02:32:03 UTC (rev 53287)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_select.c	2012-12-23 03:04:19 UTC (rev 53288)
@@ -70,6 +70,7 @@
 #include "BKE_paint.h"
 #include "BKE_tessmesh.h"
 #include "BKE_tracking.h"
+#include "BKE_utildefines.h"
 
 
 #include "BIF_gl.h"
@@ -800,8 +801,19 @@
 	return OPERATOR_FINISHED;
 }
 
+static void do_lasso_select_meshobject__doSelectVert(void *userData, MVert *mv, const float screen_co[2], int UNUSED(index))
+{
+	LassoSelectUserData *data = userData;
+
+	if (BLI_rctf_isect_pt_v(data->rect_fl, screen_co) &&
+	    BLI_lasso_is_point_inside(data->mcords, data->moves, screen_co[0], screen_co[1], IS_CLIPPED))
+	{
+		BKE_BIT_TEST_SET(mv->flag, data->select, SELECT);
+	}
+}
 static void do_lasso_select_paintvert(ViewContext *vc, const int mcords[][2], short moves, short extend, short select)
 {
+	const int use_zbuf = (vc->v3d->flag & V3D_ZBUF_SELECT);
 	Object *ob = vc->obact;
 	Mesh *me = ob ? ob->data : NULL;
 	rcti rect;
@@ -811,15 +823,32 @@
 
 	if (extend == 0 && select)
 		paintvert_deselect_all_visible(ob, SEL_DESELECT, FALSE);  /* flush selection at the end */
-	bm_vertoffs = me->totvert + 1; /* max index array */
 
 	BLI_lasso_boundbox(&rect, mcords, moves);
-	EDBM_backbuf_border_mask_init(vc, mcords, moves, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
 
-	edbm_backbuf_check_and_select_verts_obmode(me, select);
+	if (use_zbuf) {
+		bm_vertoffs = me->totvert + 1; /* max index array */
 
-	EDBM_backbuf_free();
+		EDBM_backbuf_border_mask_init(vc, mcords, moves, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
 
+		edbm_backbuf_check_and_select_verts_obmode(me, select);
+
+		EDBM_backbuf_free();
+	}
+	else {
+		LassoSelectUserData data;
+		rcti rect;
+
+		BLI_lasso_boundbox(&rect, mcords, moves);
+
+		view3d_userdata_lassoselect_init(&data, vc, &rect, mcords, moves, select);
+
+		ED_view3d_init_mats_rv3d(vc->obact, vc->rv3d);
+
+		meshobject_foreachScreenVert(vc, do_lasso_select_meshobject__doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
+
+	}
+
 	paintvert_flush_flags(ob);
 }
 static void do_lasso_select_paintface(ViewContext *vc, const int mcords[][2], short moves, short extend, short select)




More information about the Bf-blender-cvs mailing list