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)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to