[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37327] trunk/blender/source/blender/ editors: [#27615] Box select of mesh object disabled or translated due to curve object

Campbell Barton ideasman42 at gmail.com
Thu Jun 9 05:56:34 CEST 2011


Revision: 37327
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37327
Author:   campbellbarton
Date:     2011-06-09 03:56:32 +0000 (Thu, 09 Jun 2011)
Log Message:
-----------
[#27615] Box select of mesh object disabled or translated due to curve object

ED_view3d_init_mats_rv3d was calling glMultMatrixf() which was mostly harmless but could also lead to confusing bugs (2 reported previously).
Looked into this and every call to ED_view3d_init_mats_rv3d except for object drawing, doesn't need this so made a second version of ED_view3d_init_mats_rv3d - ED_view3d_init_mats_rv3d_gl which does the matrix multiplication, remove confusing checks in selection code.

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/space_view3d.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	2011-06-09 02:47:22 UTC (rev 37326)
+++ trunk/blender/source/blender/editors/include/ED_view3d.h	2011-06-09 03:56:32 UTC (rev 37327)
@@ -265,6 +265,7 @@
 int ED_operator_rv3d_unlock_poll(struct bContext *C);
 
 void ED_view3d_init_mats_rv3d(struct Object *ob, struct RegionView3D *rv3d);
+void ED_view3d_init_mats_rv3d_gl(struct Object *ob, struct RegionView3D *rv3d);
 
 int ED_view3d_scene_layer_set(int lay, const int *values, int *active);
 

Modified: trunk/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawobject.c	2011-06-09 02:47:22 UTC (rev 37326)
+++ trunk/blender/source/blender/editors/space_view3d/drawobject.c	2011-06-09 03:56:32 UTC (rev 37327)
@@ -5812,7 +5812,7 @@
 
 	/* multiply view with object matrix.
 	 * local viewmat and persmat, to calculate projections */
-	ED_view3d_init_mats_rv3d(ob, rv3d);
+	ED_view3d_init_mats_rv3d_gl(ob, rv3d);
 
 	/* which wire color */
 	if((flag & DRAW_CONSTCOLOR) == 0) {

Modified: trunk/blender/source/blender/editors/space_view3d/space_view3d.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/space_view3d.c	2011-06-09 02:47:22 UTC (rev 37326)
+++ trunk/blender/source/blender/editors/space_view3d/space_view3d.c	2011-06-09 03:56:32 UTC (rev 37327)
@@ -208,13 +208,18 @@
 	mul_m4_m4m4(rv3d->viewmatob, ob->obmat, rv3d->viewmat);
 	mul_m4_m4m4(rv3d->persmatob, ob->obmat, rv3d->persmat);
 
+	/* initializes object space clipping, speeds up clip tests */
+	ED_view3d_local_clipping(rv3d, ob->obmat);
+}
+
+void ED_view3d_init_mats_rv3d_gl(struct Object *ob, struct RegionView3D *rv3d)
+{
+	ED_view3d_init_mats_rv3d(ob, rv3d);
+
 	/* we have to multiply instead of loading viewmatob to make
 	   it work with duplis using displists, otherwise it will
 	   override the dupli-matrix */
 	glMultMatrixf(ob->obmat);
-
-	/* initializes object space clipping, speeds up clip tests */
-	ED_view3d_local_clipping(rv3d, ob->obmat);
 }
 
 /* ******************** default callbacks for view3d space ***************** */

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_select.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_select.c	2011-06-09 02:47:22 UTC (rev 37326)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_select.c	2011-06-09 03:56:32 UTC (rev 37327)
@@ -485,27 +485,22 @@
 	if (extend == 0 && select)
 		EM_deselect_all(vc->em);
 
-	/* workaround: init mats first, EM_mask_init_backbuf_border can change
-	   view matrix to pixel space, breaking edge select with backbuf. fixes bug [#20936] */
+	 /* for non zbuf projections, dont change the GL state */
+	ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
 
-	/* [#21018] breaks zbuf select. run below. only if bbsel fails */
-	/* ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d) */
-
 	glLoadMatrixf(vc->rv3d->viewmat);
 	bbsel= EM_mask_init_backbuf_border(vc, mcords, moves, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
 	
 	if(ts->selectmode & SCE_SELECT_VERTEX) {
 		if (bbsel) {
 			EM_backbuf_checkAndSelectVerts(vc->em, select);
-		} else {
-			ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
+		}
+		else {
 			mesh_foreachScreenVert(vc, do_lasso_select_mesh__doSelectVert, &data, 1);
 		}
 	}
 	if(ts->selectmode & SCE_SELECT_EDGE) {
-			/* Does both bbsel and non-bbsel versions (need screen cos for both) */
-		ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
-
+		/* Does both bbsel and non-bbsel versions (need screen cos for both) */
 		data.pass = 0;
 		mesh_foreachScreenEdge(vc, do_lasso_select_mesh__doSelectEdge, &data, 0);
 
@@ -518,8 +513,8 @@
 	if(ts->selectmode & SCE_SELECT_FACE) {
 		if (bbsel) {
 			EM_backbuf_checkAndSelectFaces(vc->em, select);
-		} else {
-			ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
+		}
+		else {
 			mesh_foreachScreenFace(vc, do_lasso_select_mesh__doSelectFace, &data);
 		}
 	}
@@ -1491,13 +1486,9 @@
 	if (extend == 0 && select)
 		EM_deselect_all(vc->em);
 
-	/* workaround: init mats first, EM_mask_init_backbuf_border can change
-	   view matrix to pixel space, breaking edge select with backbuf. fixes bug #20936 */
-	/*ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);*/ /* for foreach's screen/vert projection */
+	/* for non zbuf projections, dont change the GL state */
+	ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
 
-	/* [#21018] breaks zbuf select. run below. only if bbsel fails */
-	/* ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d) */
-
 	glLoadMatrixf(vc->rv3d->viewmat);
 	bbsel= EM_init_backbuf_border(vc, rect->xmin, rect->ymin, rect->xmax, rect->ymax);
 
@@ -1505,7 +1496,6 @@
 		if (bbsel) {
 			EM_backbuf_checkAndSelectVerts(vc->em, select);
 		} else {
-			ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
 			mesh_foreachScreenVert(vc, do_mesh_box_select__doSelectVert, &data, 1);
 		}
 	}
@@ -1525,7 +1515,6 @@
 		if(bbsel) {
 			EM_backbuf_checkAndSelectFaces(vc->em, select);
 		} else {
-			ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
 			mesh_foreachScreenFace(vc, do_mesh_box_select__doSelectFace, &data);
 		}
 	}




More information about the Bf-blender-cvs mailing list