[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42221] trunk/blender/source/blender: view3d - replace magic numbers with an enum to be used with mesh_foreachScreenVert , mesh_foreachScreenEdge since it wasnt clear how the values are used.

Campbell Barton ideasman42 at gmail.com
Mon Nov 28 17:44:21 CET 2011


Revision: 42221
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42221
Author:   campbellbarton
Date:     2011-11-28 16:44:17 +0000 (Mon, 28 Nov 2011)
Log Message:
-----------
view3d - replace magic numbers with an enum to be used with mesh_foreachScreenVert, mesh_foreachScreenEdge since it wasnt clear how the values are used.

also resolved use of un-initialized variable.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/tracking.c
    trunk/blender/source/blender/editors/include/ED_view3d.h
    trunk/blender/source/blender/editors/mesh/editmesh_mods.c
    trunk/blender/source/blender/editors/mesh/editmesh_tools.c
    trunk/blender/source/blender/editors/space_view3d/drawobject.c
    trunk/blender/source/blender/editors/space_view3d/view3d_select.c

Modified: trunk/blender/source/blender/blenkernel/intern/tracking.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/tracking.c	2011-11-28 16:25:42 UTC (rev 42220)
+++ trunk/blender/source/blender/blenkernel/intern/tracking.c	2011-11-28 16:44:17 UTC (rev 42221)
@@ -1702,6 +1702,8 @@
 	(void) stop;
 	(void) do_update;
 	(void) progress;
+	(void) stats_message;
+	(void) message_size;
 #endif
 }
 

Modified: trunk/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_view3d.h	2011-11-28 16:25:42 UTC (rev 42220)
+++ trunk/blender/source/blender/editors/include/ED_view3d.h	2011-11-28 16:44:17 UTC (rev 42221)
@@ -75,6 +75,12 @@
 	char damaged;
 } ViewDepths;
 
+/* 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;
 
 float *give_cursor(struct Scene *scene, struct View3D *v3d);
 
@@ -214,8 +220,8 @@
 void ED_view3d_calc_camera_border_size(struct Scene *scene, struct ARegion *ar, struct View3D *v3d, struct RegionView3D *rv3d, float size_r[2]);
 
 /* drawobject.c iterators */
-void mesh_foreachScreenVert(struct ViewContext *vc, void (*func)(void *userData, struct EditVert *eve, int x, int y, int index), void *userData, int clipVerts);
-void mesh_foreachScreenEdge(struct ViewContext *vc, void (*func)(void *userData, struct EditEdge *eed, int x0, int y0, int x1, int y1, int index), void *userData, int clipVerts);
+void mesh_foreachScreenVert(struct ViewContext *vc, void (*func)(void *userData, struct EditVert *eve, int x, int y, int index), void *userData, eV3DClipTest clipVerts);
+void mesh_foreachScreenEdge(struct ViewContext *vc, void (*func)(void *userData, struct EditEdge *eed, int x0, int y0, int x1, int y1, int index), void *userData, eV3DClipTest clipVerts);
 void mesh_foreachScreenFace(struct ViewContext *vc, void (*func)(void *userData, struct EditFace *efa, int x, int y, int index), void *userData);
 void nurbs_foreachScreenVert(struct ViewContext *vc, void (*func)(void *userData, struct Nurb *nu, struct BPoint *bp, struct BezTriple *bezt, int beztindex, int x, int y), void *userData);
 void lattice_foreachScreenVert(struct ViewContext *vc, void (*func)(void *userData, struct BPoint *bp, int x, int y), void *userData);

Modified: trunk/blender/source/blender/editors/mesh/editmesh_mods.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_mods.c	2011-11-28 16:25:42 UTC (rev 42220)
+++ trunk/blender/source/blender/editors/mesh/editmesh_mods.c	2011-11-28 16:44:17 UTC (rev 42221)
@@ -448,11 +448,11 @@
 
 		ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
 
-		mesh_foreachScreenVert(vc, findnearestvert__doClosest, &data, 1);
+		mesh_foreachScreenVert(vc, findnearestvert__doClosest, &data, V3D_CLIP_TEST_RV3D_CLIPPING);
 
 		if (data.dist>3) {
 			data.pass = 1;
-			mesh_foreachScreenVert(vc, findnearestvert__doClosest, &data, 1);
+			mesh_foreachScreenVert(vc, findnearestvert__doClosest, &data, V3D_CLIP_TEST_RV3D_CLIPPING);
 		}
 
 		*dist = data.dist;
@@ -540,7 +540,7 @@
 		data.closest = NULL;
 
 		ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
-		mesh_foreachScreenEdge(vc, findnearestedge__doClosest, &data, 2);
+		mesh_foreachScreenEdge(vc, findnearestedge__doClosest, &data, V3D_CLIP_TEST_REGION);
 
 		*dist = data.dist;
 		return data.closest;

Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2011-11-28 16:25:42 UTC (rev 42220)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2011-11-28 16:44:17 UTC (rev 42221)
@@ -547,7 +547,7 @@
 			sortblock[i].v1 = eve;
 
 	ED_view3d_init_mats_rv3d(vc.obedit, vc.rv3d);
-	mesh_foreachScreenVert(&vc, xsortvert_flag__doSetX, sortblock, 0);
+	mesh_foreachScreenVert(&vc, xsortvert_flag__doSetX, sortblock, V3D_CLIP_TEST_OFF);
 
 	qsort(sortblock, amount, sizeof(xvertsort), vergxco);
 

Modified: trunk/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawobject.c	2011-11-28 16:25:42 UTC (rev 42220)
+++ trunk/blender/source/blender/editors/space_view3d/drawobject.c	2011-11-28 16:44:17 UTC (rev 42221)
@@ -149,7 +149,7 @@
 /* ************* only use while object drawing **************
  * or after running ED_view3d_init_mats_rv3d
  * */
-static void view3d_project_short_clip(ARegion *ar, const float vec[3], short *adr, int local)
+static void view3d_project_short_clip(ARegion *ar, const float vec[3], short adr[2], int local)
 {
 	RegionView3D *rv3d= ar->regiondata;
 	float fx, fy, vec4[4];
@@ -184,7 +184,7 @@
 }
 
 /* only use while object drawing */
-static void view3d_project_short_noclip(ARegion *ar, const float vec[3], short *adr)
+static void view3d_project_short_noclip(ARegion *ar, const float vec[3], short adr[2])
 {
 	RegionView3D *rv3d= ar->regiondata;
 	float fx, fy, vec4[4];
@@ -212,7 +212,7 @@
 }
 
 /* same as view3d_project_short_clip but use persmat instead of persmatob for projection */
-static void view3d_project_short_clip_persmat(ARegion *ar, float *vec, short *adr, int local)
+static void view3d_project_short_clip_persmat(ARegion *ar, float *vec, short adr[2], int local)
 {
 	RegionView3D *rv3d= ar->regiondata;
 	float fx, fy, vec4[4];
@@ -1900,13 +1900,15 @@
  * use the object matrix in the useual way */
 static void mesh_foreachScreenVert__mapFunc(void *userData, int index, float *co, float *UNUSED(no_f), short *UNUSED(no_s))
 {
-	struct { void (*func)(void *userData, EditVert *eve, int x, int y, int index); void *userData; ViewContext vc; int clipVerts; } *data = userData;
+	struct { void (*func)(void *userData, EditVert *eve, int x, int y, int index);
+		     void *userData; ViewContext vc; eV3DClipTest clipVerts; } *data = userData;
+
 	EditVert *eve = EM_get_vert_for_index(index);
 
 	if (eve->h==0) {
 		short s[2]= {IS_CLIPPED, 0};
 
-		if (data->clipVerts) {
+		if (data->clipVerts != V3D_CLIP_TEST_OFF) {
 			view3d_project_short_clip(data->vc.ar, co, s, 1);
 		} else {
 			view3d_project_short_noclip(data->vc.ar, co, s);
@@ -1917,9 +1919,11 @@
 	}
 }
 
-void mesh_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, EditVert *eve, int x, int y, int index), void *userData, int clipVerts)
+void mesh_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, EditVert *eve, int x, int y, int index), void *userData, eV3DClipTest clipVerts)
 {
-	struct { void (*func)(void *userData, EditVert *eve, int x, int y, int index); void *userData; ViewContext vc; int clipVerts; } data;
+	struct { void (*func)(void *userData, EditVert *eve, int x, int y, int index);
+		     void *userData; ViewContext vc; eV3DClipTest clipVerts; } data;
+
 	DerivedMesh *dm = editmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
 	
 	data.vc= *vc;
@@ -1927,7 +1931,7 @@
 	data.userData = userData;
 	data.clipVerts = clipVerts;
 
-	if(clipVerts)
+	if(clipVerts != V3D_CLIP_TEST_OFF)
 		ED_view3d_local_clipping(vc->rv3d, vc->obedit->obmat); /* for local clipping lookups */
 
 	EM_init_index_arrays(vc->em, 1, 0, 0);
@@ -1963,24 +1967,36 @@
 	dm->foreachMappedVert(dm, drawSelectedVertices__mapFunc, me->mvert);
 	glEnd();
 }
+static int is_co_in_region(ARegion *ar, const short co[2])
+{
+	return ( (co[0] != IS_CLIPPED) && /* may be the only initialized value, check first */
+	         (co[0] >= 0)          &&
+	         (co[0] <  ar->winx)   &&
+	         (co[1] >= 0)          &&
+	         (co[1] <  ar->winy));
+}
 static void mesh_foreachScreenEdge__mapFunc(void *userData, int index, float *v0co, float *v1co)
 {
-	struct { void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index); void *userData; ViewContext vc; int clipVerts; } *data = userData;
+	struct { void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index);
+		     void *userData; ViewContext vc; eV3DClipTest clipVerts; } *data = userData;
 	EditEdge *eed = EM_get_edge_for_index(index);
 	short s[2][2];
 
 	if (eed->h==0) {
-		if (data->clipVerts==1) {
+		if (data->clipVerts == V3D_CLIP_TEST_RV3D_CLIPPING) {
 			view3d_project_short_clip(data->vc.ar, v0co, s[0], 1);
 			view3d_project_short_clip(data->vc.ar, v1co, s[1], 1);
-		} else {
+		}
+		else {
 			view3d_project_short_noclip(data->vc.ar, v0co, s[0]);
 			view3d_project_short_noclip(data->vc.ar, v1co, s[1]);
 
-			if (data->clipVerts==2) {
-				if (!(s[0][0]>=0 && s[0][1]>= 0 && s[0][0]<data->vc.ar->winx && s[0][1]<data->vc.ar->winy))
-					if (!(s[1][0]>=0 && s[1][1]>= 0 && s[1][0]<data->vc.ar->winx && s[1][1]<data->vc.ar->winy)) 
-						return;
+			if (data->clipVerts == V3D_CLIP_TEST_REGION) {
+				if ( !is_co_in_region(data->vc.ar, s[0]) &&
+				     !is_co_in_region(data->vc.ar, s[1]))
+				{
+					return;
+				}
 			}
 		}
 
@@ -1988,9 +2004,10 @@
 	}
 }
 
-void mesh_foreachScreenEdge(ViewContext *vc, void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index), void *userData, int clipVerts)
+void mesh_foreachScreenEdge(ViewContext *vc, void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index), void *userData, eV3DClipTest clipVerts)
 {
-	struct { void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index); void *userData; ViewContext vc; int clipVerts; } data;
+	struct { void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index);
+		     void *userData; ViewContext vc; eV3DClipTest clipVerts; } data;
 	DerivedMesh *dm = editmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
 
 	data.vc= *vc;
@@ -1998,7 +2015,7 @@
 	data.userData = userData;
 	data.clipVerts = clipVerts;
 
-	if(clipVerts)
+	if(clipVerts != V3D_CLIP_TEST_OFF)
 		ED_view3d_local_clipping(vc->rv3d, vc->obedit->obmat); /* for local clipping lookups */
 
 	EM_init_index_arrays(vc->em, 0, 1, 0);


@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list