Revision: 51240
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51240
Author:   campbellbarton
Date:     2012-10-10 04:03:22 +0000 (Wed, 10 Oct 2012)
Log Message:
-----------
refactor foreachScreen functions for clipping, now the projection clipping flag 
is passed down directly rather then converting the enum into a flag, also fix 
own recent crash lasso seleting in object mode with pose objects.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/curve/editcurve.c
    trunk/blender/source/blender/editors/include/ED_object.h
    trunk/blender/source/blender/editors/include/ED_view3d.h
    trunk/blender/source/blender/editors/mesh/editmesh_select.c
    trunk/blender/source/blender/editors/object/object_iterators.c
    trunk/blender/source/blender/editors/object/object_lattice.c
    trunk/blender/source/blender/editors/space_view3d/view3d_select.c
    trunk/blender/source/blender/editors/space_view3d/view3d_view.c

Modified: trunk/blender/source/blender/editors/curve/editcurve.c
===================================================================
--- trunk/blender/source/blender/editors/curve/editcurve.c      2012-10-10 
03:13:02 UTC (rev 51239)
+++ trunk/blender/source/blender/editors/curve/editcurve.c      2012-10-10 
04:03:22 UTC (rev 51240)
@@ -3276,7 +3276,7 @@
        data.mval_fl[1] = mval[1];
 
        ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
-       nurbs_foreachScreenVert(vc, findnearestNurbvert__doClosest, &data);
+       nurbs_foreachScreenVert(vc, findnearestNurbvert__doClosest, &data, 
V3D_PROJ_TEST_CLIP_DEFAULT);
 
        *nurb = data.nurb;
        *bezt = data.bezt;

Modified: trunk/blender/source/blender/editors/include/ED_object.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_object.h    2012-10-10 
03:13:02 UTC (rev 51239)
+++ trunk/blender/source/blender/editors/include/ED_object.h    2012-10-10 
04:03:22 UTC (rev 51240)
@@ -200,51 +200,46 @@
 
 /* object_iterators.c */
 
-/* enum for passing to foreach functions to test RV3D_CLIPPING */
-typedef enum eV3DClipTest {
-       V3D_CLIP_TEST_OFF =            0, /* clipping is off */
-       V3D_CLIP_TEST_RV3D_CLIPPING =  1, /* clip single points */
-       V3D_CLIP_TEST_REGION =         2  /* use for edges to check if both 
verts are in the view, but not RV3D_CLIPPING */
-} eV3DClipTest;
+#include "ED_view3d.h"  /* XXX, needed for eV3DProjTest */
 
 /* foreach iterators */
 void mesh_foreachScreenVert(
         struct ViewContext *vc,
         void (*func)(void *userData, struct BMVert *eve, const float 
screen_co[2], int index),
-        void *userData, eV3DClipTest clipVerts);
+        void *userData, const eV3DProjTest clip_flag);
 void mesh_foreachScreenEdge(
         struct ViewContext *vc,
         void (*func)(void *userData, struct BMEdge *eed, const float 
screen_co_a[2], const float screen_co_b[2],
                      int index),
-        void *userData, eV3DClipTest clipVerts);
+        void *userData, const eV3DProjTest clip_flag);
 void mesh_foreachScreenFace(
         struct ViewContext *vc,
         void (*func)(void *userData, struct BMFace *efa, const float 
screen_co[2], int index),
-        void *userData);
+        void *userData, const eV3DProjTest clip_flag);
 void nurbs_foreachScreenVert(
         struct ViewContext *vc,
         void (*func)(void *userData, struct Nurb *nu, struct BPoint *bp, 
struct BezTriple *bezt,
                      int beztindex, const float screen_co[2]),
-        void *userData);
+        void *userData, const eV3DProjTest clip_flag);
 void mball_foreachScreenElem(
         struct ViewContext *vc,
         void (*func)(void *userData, struct MetaElem *ml, const float 
screen_co[2]),
-        void *userData);
+        void *userData, const eV3DProjTest clip_flag);
 void lattice_foreachScreenVert(
         struct ViewContext *vc,
         void (*func)(void *userData, struct BPoint *bp,
                      const float screen_co[2]),
-        void *userData);
+        void *userData, const eV3DProjTest clip_flag);
 void armature_foreachScreenBone(
         struct ViewContext *vc,
         void (*func)(void *userData, struct EditBone *ebone,
                      const float screen_co_a[2], const float screen_co_b[2]),
-        void *userData);
+        void *userData, const eV3DProjTest clip_flag);
 void pose_foreachScreenBone(
         struct ViewContext *vc,
         void (*func)(void *userData, struct bPoseChannel *pchan,
                      const float screen_co_a[2], const float screen_co_b[2]),
-        void *userData);
+        void *userData, const eV3DProjTest clip_flag);
 
 #ifdef __cplusplus
 }

Modified: trunk/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_view3d.h    2012-10-10 
03:13:02 UTC (rev 51239)
+++ trunk/blender/source/blender/editors/include/ED_view3d.h    2012-10-10 
04:03:22 UTC (rev 51240)
@@ -50,6 +50,8 @@
 struct Object;
 struct RegionView3D;
 struct Scene;
+struct bScreen;
+struct ScrArea;
 struct View3D;
 struct ViewContext;
 struct bContext;
@@ -126,24 +128,27 @@
        V3D_PROJ_TEST_CLIP_WIN   = (1 << 1),
 } eV3DProjTest;
 
+#define V3D_PROJ_TEST_CLIP_DEFAULT (V3D_PROJ_TEST_CLIP_BB | 
V3D_PROJ_TEST_CLIP_WIN)
+#define V3D_PROJ_TEST_ALL          (V3D_PROJ_TEST_CLIP_BB | 
V3D_PROJ_TEST_CLIP_WIN)
 
+
 /* *** short *** */
 eV3DProjStatus ED_view3d_project_short_ex(struct ARegion *ar, float 
perspmat[4][4], const int is_local,
-                                          const float co[3], short r_co[2], 
eV3DProjTest flag);
-eV3DProjStatus ED_view3d_project_short_global(struct ARegion *ar, const float 
co[3], short r_co[2], eV3DProjTest flag);
-eV3DProjStatus ED_view3d_project_short_object(struct ARegion *ar, const float 
co[3], short r_co[2], eV3DProjTest flag);
+                                          const float co[3], short r_co[2], 
const eV3DProjTest flag);
+eV3DProjStatus ED_view3d_project_short_global(struct ARegion *ar, const float 
co[3], short r_co[2], const eV3DProjTest flag);
+eV3DProjStatus ED_view3d_project_short_object(struct ARegion *ar, const float 
co[3], short r_co[2], const eV3DProjTest flag);
 
 /* *** int *** */
 eV3DProjStatus ED_view3d_project_int_ex(struct ARegion *ar, float 
perspmat[4][4], const int is_local,
-                                        const float co[3], int r_co[2], 
eV3DProjTest flag);
-eV3DProjStatus ED_view3d_project_int_global(struct ARegion *ar, const float 
co[3], int r_co[2], eV3DProjTest flag);
-eV3DProjStatus ED_view3d_project_int_object(struct ARegion *ar, const float 
co[3], int r_co[2], eV3DProjTest flag);
+                                        const float co[3], int r_co[2], const 
eV3DProjTest flag);
+eV3DProjStatus ED_view3d_project_int_global(struct ARegion *ar, const float 
co[3], int r_co[2], const eV3DProjTest flag);
+eV3DProjStatus ED_view3d_project_int_object(struct ARegion *ar, const float 
co[3], int r_co[2], const eV3DProjTest flag);
 
 /* *** float *** */
 eV3DProjStatus ED_view3d_project_float_ex(struct ARegion *ar, float 
perspmat[4][4], const int is_local,
-                                        const float co[3], float r_co[2], 
eV3DProjTest flag);
-eV3DProjStatus ED_view3d_project_float_global(struct ARegion *ar, const float 
co[3], float r_co[2], eV3DProjTest flag);
-eV3DProjStatus ED_view3d_project_float_object(struct ARegion *ar, const float 
co[3], float r_co[2], eV3DProjTest flag);
+                                        const float co[3], float r_co[2], 
const eV3DProjTest flag);
+eV3DProjStatus ED_view3d_project_float_global(struct ARegion *ar, const float 
co[3], float r_co[2], const eV3DProjTest flag);
+eV3DProjStatus ED_view3d_project_float_object(struct ARegion *ar, const float 
co[3], float r_co[2], const eV3DProjTest flag);
 
 void ED_view3d_project_float_v2_m4(const struct ARegion *a, const float co[3], 
float r_co[2], float mat[4][4]);
 void ED_view3d_project_float_v3_m4(struct ARegion *a, const float co[3], float 
r_co[3], float mat[4][4]);

Modified: trunk/blender/source/blender/editors/mesh/editmesh_select.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_select.c 2012-10-10 
03:13:02 UTC (rev 51239)
+++ trunk/blender/source/blender/editors/mesh/editmesh_select.c 2012-10-10 
04:03:22 UTC (rev 51240)
@@ -433,11 +433,11 @@
 
                ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
 
-               mesh_foreachScreenVert(vc, findnearestvert__doClosest, &data, 
V3D_CLIP_TEST_RV3D_CLIPPING);
+               mesh_foreachScreenVert(vc, findnearestvert__doClosest, &data, 
V3D_PROJ_TEST_CLIP_DEFAULT);
 
                if (data.dist > 3) {
                        data.pass = 1;
-                       mesh_foreachScreenVert(vc, findnearestvert__doClosest, 
&data, V3D_CLIP_TEST_RV3D_CLIPPING);
+                       mesh_foreachScreenVert(vc, findnearestvert__doClosest, 
&data, V3D_PROJ_TEST_CLIP_DEFAULT);
                }
 
                *r_dist = data.dist;
@@ -525,7 +525,7 @@
                data.closest = NULL;
                ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
 
-               mesh_foreachScreenEdge(vc, findnearestedge__doClosest, &data, 
V3D_CLIP_TEST_REGION);
+               mesh_foreachScreenEdge(vc, findnearestedge__doClosest, &data, 
V3D_PROJ_TEST_CLIP_WIN);
 
                *r_dist = data.dist;
                return data.closest;
@@ -588,7 +588,7 @@
                        data.dist = 0x7FFF;     /* largest short */
                        data.toFace = efa;
 
-                       mesh_foreachScreenFace(vc, 
findnearestface__getDistance, &data);
+                       mesh_foreachScreenFace(vc, 
findnearestface__getDistance, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
 
                        if ((vc->em->selectmode == SCE_SELECT_FACE) || 
(data.dist < *r_dist)) {  /* only faces, no dist check */
                                *r_dist = data.dist;
@@ -617,12 +617,12 @@
                ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
 
                data.pass = 0;
-               mesh_foreachScreenFace(vc, findnearestface__doClosest, &data);
+               mesh_foreachScreenFace(vc, findnearestface__doClosest, &data, 
V3D_PROJ_TEST_CLIP_DEFAULT);
 
                if (data.dist > 3.0f) {
                        data.pass = 1;
                        ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
-                       mesh_foreachScreenFace(vc, findnearestface__doClosest, 
&data);
+                       mesh_foreachScreenFace(vc, findnearestface__doClosest, 
&data, V3D_PROJ_TEST_CLIP_DEFAULT);
                }
 
                *r_dist = data.dist;

Modified: trunk/blender/source/blender/editors/object/object_iterators.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_iterators.c      
2012-10-10 03:13:02 UTC (rev 51239)
+++ trunk/blender/source/blender/editors/object/object_iterators.c      
2012-10-10 04:03:22 UTC (rev 51240)
@@ -31,7 +31,8 @@
 #include "DNA_object_types.h"
 
 #include "BLI_utildefines.h"
-#include "BLI_blenlib.h"
+#include "BLI_listbase.h"
+#include "BLI_rect.h"
 
 #include "BKE_armature.h"
 #include "BKE_curve.h"
@@ -51,7 +52,7 @@
        void (*func)(void *userData, BMVert *eve, const float screen_co_b[2], 
int index);
        void *userData;
        ViewContext vc;
-       eV3DClipTest clipVerts;
+       eV3DProjTest clip_flag;
 } foreachScreenVert_userData;
 
 /* user data structures for derived mesh callbacks */
@@ -60,13 +61,14 @@
        void *userData;
        ViewContext vc;
        rctf win_rect; /* copy of: vc.ar->winx/winy, use for faster tests, 
minx/y will always be 0 */
-       eV3DClipTest clipVerts;
+       eV3DProjTest clip_flag;
 } foreachScreenEdge_userData;
 
 typedef struct foreachScreenFace_userData {
        void (*func)(void *userData, BMFace *efa, const float screen_co_b[2], 
int index);
        void *userData;

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to