[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23774] trunk/blender/source/blender/ editors: realized some parts of the code might use screen/ vert projection on instance objects which dont use the object matrix normally .

Campbell Barton ideasman42 at gmail.com
Sun Oct 11 22:32:25 CEST 2009


Revision: 23774
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23774
Author:   campbellbarton
Date:     2009-10-11 22:32:25 +0200 (Sun, 11 Oct 2009)

Log Message:
-----------
realized some parts of the code might use screen/vert projection on instance objects which dont use the object matrix normally.
moved functions outside *_foreachScreen' funcs into their callers (mainly selection tools)

Modified Paths:
--------------
    trunk/blender/source/blender/editors/curve/editcurve.c
    trunk/blender/source/blender/editors/mesh/editmesh_mods.c
    trunk/blender/source/blender/editors/mesh/editmesh_tools.c
    trunk/blender/source/blender/editors/object/object_lattice.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/editors/curve/editcurve.c
===================================================================
--- trunk/blender/source/blender/editors/curve/editcurve.c	2009-10-11 20:03:55 UTC (rev 23773)
+++ trunk/blender/source/blender/editors/curve/editcurve.c	2009-10-11 20:32:25 UTC (rev 23774)
@@ -2242,6 +2242,7 @@
 	data.mval[0] = mval[0];
 	data.mval[1] = mval[1];
 
+	ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
 	nurbs_foreachScreenVert(vc, findnearestNurbvert__doClosest, &data);
 
 	*nurb = data.nurb;

Modified: trunk/blender/source/blender/editors/mesh/editmesh_mods.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_mods.c	2009-10-11 20:03:55 UTC (rev 23773)
+++ trunk/blender/source/blender/editors/mesh/editmesh_mods.c	2009-10-11 20:32:25 UTC (rev 23774)
@@ -422,6 +422,9 @@
 		data.closestIndex = 0;
 
 		data.pass = 0;
+
+		ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
+
 		mesh_foreachScreenVert(vc, findnearestvert__doClosest, &data, 1);
 
 		if (data.dist>3) {
@@ -511,6 +514,7 @@
 		data.dist = *dist;
 		data.closest = NULL;
 
+		ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
 		mesh_foreachScreenEdge(vc, findnearestedge__doClosest, &data, 2);
 
 		*dist = data.dist;
@@ -566,6 +570,7 @@
 			data.dist = 0x7FFF;		/* largest short */
 			data.toFace = efa;
 
+			ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
 			mesh_foreachScreenFace(vc, findnearestface__getDistance, &data);
 
 			if(vc->em->selectmode == SCE_SELECT_FACE || data.dist<*dist) {	/* only faces, no dist check */
@@ -594,6 +599,8 @@
 		data.closestIndex = 0;
 
 		data.pass = 0;
+
+		ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
 		mesh_foreachScreenFace(vc, findnearestface__doClosest, &data);
 
 		if (data.dist>3) {

Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2009-10-11 20:03:55 UTC (rev 23773)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2009-10-11 20:32:25 UTC (rev 23774)
@@ -543,7 +543,9 @@
 		if(eve->f & flag)
 			sortblock[i].v1 = eve;
 
+	ED_view3d_init_mats_rv3d(vc.obedit, vc.rv3d);
 	mesh_foreachScreenVert(&vc, xsortvert_flag__doSetX, sortblock, 0);
+
 	qsort(sortblock, amount, sizeof(xvertsort), vergxco);
 
 		/* make temporal listbase */

Modified: trunk/blender/source/blender/editors/object/object_lattice.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_lattice.c	2009-10-11 20:03:55 UTC (rev 23773)
+++ trunk/blender/source/blender/editors/object/object_lattice.c	2009-10-11 20:32:25 UTC (rev 23774)
@@ -292,6 +292,7 @@
 	data.mval[0]= mval[0];
 	data.mval[1]= mval[1];
 
+	ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
 	lattice_foreachScreenVert(vc, findnearestLattvert__doClosest, &data);
 
 	return data.bp;

Modified: trunk/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawobject.c	2009-10-11 20:03:55 UTC (rev 23773)
+++ trunk/blender/source/blender/editors/space_view3d/drawobject.c	2009-10-11 20:32:25 UTC (rev 23774)
@@ -1207,8 +1207,6 @@
 	int i, N = lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
 	short s[2] = {IS_CLIPPED, 0};
 
-	ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* so view3d_project_short works */
-
 	for (i=0; i<N; i++, bp++, co+=3) {
 		if (bp->hide==0) {
 			view3d_project_short_clip(vc->ar, dl?co:bp->vec, s);
@@ -1303,6 +1301,10 @@
 
 /* ***************** ******************** */
 
+/* Note! - foreach funcs should be called while drawing or directly after
+ * if not, ED_view3d_init_mats_rv3d() can be used for selection tools
+ * but would not give correct results with dupli's for eg. which dont
+ * use the object matrix in the useual way */
 static void mesh_foreachScreenVert__mapFunc(void *userData, int index, float *co, float *no_f, short *no_s)
 {
 	struct { void (*func)(void *userData, EditVert *eve, int x, int y, int index); void *userData; ViewContext vc; int clipVerts; } *data = userData;
@@ -1332,7 +1334,6 @@
 	data.userData = userData;
 	data.clipVerts = clipVerts;
 
-	ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* so view3d_project_short works */
 	EM_init_index_arrays(vc->em, 1, 0, 0);
 	dm->foreachMappedVert(dm, mesh_foreachScreenVert__mapFunc, &data);
 	EM_free_index_arrays();
@@ -1375,7 +1376,6 @@
 	data.userData = userData;
 	data.clipVerts = clipVerts;
 
-	ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* so view3d_project_short works */
 	EM_init_index_arrays(vc->em, 0, 1, 0);
 	dm->foreachMappedEdge(dm, mesh_foreachScreenEdge__mapFunc, &data);
 	EM_free_index_arrays();
@@ -1405,7 +1405,6 @@
 	data.func = func;
 	data.userData = userData;
 
-	ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* so view3d_project_short works */
 	EM_init_index_arrays(vc->em, 0, 0, 1);
 	dm->foreachMappedFaceCenter(dm, mesh_foreachScreenFace__mapFunc, &data);
 	EM_free_index_arrays();
@@ -1420,8 +1419,6 @@
 	Nurb *nu;
 	int i;
 
-	ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* so view3d_project_short works */
-
 	for (nu= cu->editnurb->first; nu; nu=nu->next) {
 		if(nu->type == CU_BEZIER) {
 			for (i=0; i<nu->pntsu; i++) {

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_select.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_select.c	2009-10-11 20:03:55 UTC (rev 23773)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_select.c	2009-10-11 20:32:25 UTC (rev 23774)
@@ -459,7 +459,10 @@
 	data.pass = 0;
 
 	bbsel= EM_mask_init_backbuf_border(vc, mcords, moves, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
+	ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
 	
+	ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
+
 	if(ts->selectmode & SCE_SELECT_VERTEX) {
 		if (bbsel) {
 			EM_backbuf_checkAndSelectVerts(vc->em, select);
@@ -584,6 +587,7 @@
 	data.moves = moves;
 	data.select = select;
 
+	ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
 	nurbs_foreachScreenVert(vc, do_lasso_select_curve__doSelect, &data);
 }
 
@@ -604,6 +608,7 @@
 	data.moves = moves;
 	data.select = select;
 
+	ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
 	lattice_foreachScreenVert(vc, do_lasso_select_lattice__doSelect, &data);
 }
 
@@ -1256,6 +1261,7 @@
 	data.rect = rect;
 	data.select = select;
 
+	ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
 	nurbs_foreachScreenVert(vc, do_nurbs_box_select__doSelect, &data);
 }
 
@@ -1275,6 +1281,7 @@
 	data.rect = rect;
 	data.select = select;
 
+	ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
 	lattice_foreachScreenVert(vc, do_lattice_box_select__doSelect, &data);
 }
 
@@ -1324,6 +1331,7 @@
 	data.done = 0;
 
 	bbsel= EM_init_backbuf_border(vc, rect->xmin, rect->ymin, rect->xmax, rect->ymax);
+	ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
 
 	if(ts->selectmode & SCE_SELECT_VERTEX) {
 		if (bbsel) {
@@ -1705,6 +1713,8 @@
 		struct {ViewContext *vc; short select, mval[2]; float radius; } data;
 		
 		bbsel= EM_init_backbuf_circle(vc, mval[0], mval[1], (short)(rad+1.0));
+		ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
+
 		vc->em= ((Mesh *)vc->obedit->data)->edit_mesh;
 
 		data.select = selecting;
@@ -1773,6 +1783,7 @@
 	data.mval[1] = mval[1];
 	data.radius = rad;
 
+	ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
 	nurbs_foreachScreenVert(vc, nurbscurve_circle_doSelect, &data);
 }
 
@@ -1798,6 +1809,7 @@
 	data.mval[1] = mval[1];
 	data.radius = rad;
 
+	ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
 	lattice_foreachScreenVert(vc, latticecurve_circle_doSelect, &data);
 }
 





More information about the Bf-blender-cvs mailing list