[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53818] trunk/blender/source/blender: Bug fix #33748

Ton Roosendaal ton at blender.org
Tue Jan 15 16:42:14 CET 2013


Revision: 53818
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53818
Author:   ton
Date:     2013-01-15 15:42:12 +0000 (Tue, 15 Jan 2013)
Log Message:
-----------
Bug fix #33748

Old fixes, since 2009 and before! Related to Curve object editmode:

- normals are not being drawn for hidden curves anymore
- even worse: Blender also didn't hide the extrusions or bevels for hidden curves
- outside edit mode, it shows all (as for all other modes)
- (de)select-all now works when 1st (or any) handle was hidden.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/curve.c
    trunk/blender/source/blender/blenkernel/intern/displist.c
    trunk/blender/source/blender/editors/curve/editcurve.c
    trunk/blender/source/blender/editors/space_view3d/drawobject.c

Modified: trunk/blender/source/blender/blenkernel/intern/curve.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/curve.c	2013-01-15 14:46:55 UTC (rev 53817)
+++ trunk/blender/source/blender/blenkernel/intern/curve.c	2013-01-15 15:42:12 UTC (rev 53818)
@@ -2220,6 +2220,7 @@
 	struct bevelsort *sortdata, *sd, *sd1;
 	int a, b, nr, poly, resolu = 0, len = 0;
 	int do_tilt, do_radius, do_weight;
+	int is_editmode = 0;
 
 	/* this function needs an object, because of tflag and upflag */
 	cu = ob->data;
@@ -2233,12 +2234,17 @@
 	if (cu->editnurb && ob->type != OB_FONT) {
 		ListBase *nurbs = BKE_curve_editNurbs_get(cu);
 		nu = nurbs->first;
+		is_editmode = 1;
 	}
 	else {
 		nu = cu->nurb.first;
 	}
 
-	while (nu) {
+	for (; nu; nu = nu->next) {
+		
+		if (nu->hide && is_editmode)
+			continue;
+		
 		/* check if we will calculate tilt data */
 		do_tilt = CU_DO_TILT(cu, nu);
 		do_radius = CU_DO_RADIUS(cu, nu); /* normal display uses the radius, better just to calculate them */
@@ -2384,7 +2390,6 @@
 				}
 			}
 		}
-		nu = nu->next;
 	}
 
 	/* STEP 2: DOUBLE POINTS AND AUTOMATIC RESOLUTION, REDUCE DATABLOCKS */

Modified: trunk/blender/source/blender/blenkernel/intern/displist.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/displist.c	2013-01-15 14:46:55 UTC (rev 53817)
+++ trunk/blender/source/blender/blenkernel/intern/displist.c	2013-01-15 15:42:12 UTC (rev 53818)
@@ -309,10 +309,11 @@
 	BPoint *bp;
 	float *data;
 	int a, len, resolu;
+	const int editmode = (!forRender && (cu->editnurb || cu->editfont));
 
 	nu = nubase->first;
 	while (nu) {
-		if (nu->hide == 0) {
+		if (nu->hide == 0 || editmode == 0) {
 			if (forRender && cu->resolu_ren != 0)
 				resolu = cu->resolu_ren;
 			else

Modified: trunk/blender/source/blender/editors/curve/editcurve.c
===================================================================
--- trunk/blender/source/blender/editors/curve/editcurve.c	2013-01-15 14:46:55 UTC (rev 53817)
+++ trunk/blender/source/blender/editors/curve/editcurve.c	2013-01-15 15:42:12 UTC (rev 53818)
@@ -1279,8 +1279,24 @@
 	ListBase *editnurb = object_editcurve_get(obedit);
 
 	if (editnurb) {
-		selectend_nurb(obedit, FIRST, 0, DESELECT); /* set first control points as unselected */
-		select_adjacent_cp(editnurb, 1, 1, DESELECT); /* cascade selection */
+		Nurb *nu;
+		int a;
+		for (nu = editnurb->first; nu; nu = nu->next) {
+			if (nu->bezt) {
+				BezTriple *bezt;
+				for (bezt = nu->bezt, a = 0; a < nu->pntsu; a++, bezt++) {
+					bezt->f1 &= ~SELECT;
+					bezt->f2 &= ~SELECT;
+					bezt->f3 &= ~SELECT;
+				}
+			}
+			else if (nu->bp) {
+				BPoint *bp;
+				for (bp = nu->bp, a = 0; a < nu->pntsu * nu->pntsv; a++, bp++) {
+					bp->f1 & ~SELECT;
+				}
+			}
+		}
 	}
 }
 
@@ -1289,8 +1305,27 @@
 	ListBase *editnurb = object_editcurve_get(obedit);
 
 	if (editnurb) {
-		selectend_nurb(obedit, FIRST, 0, SELECT); /* set first control points as unselected */
-		select_adjacent_cp(editnurb, 1, 1, SELECT); /* cascade selection */
+		Nurb *nu;
+		int a;
+		for (nu = editnurb->first; nu; nu = nu->next) {
+			if (nu->bezt) {
+				BezTriple *bezt;
+				for (bezt = nu->bezt, a = 0; a < nu->pntsu; a++, bezt++) {
+					if (bezt->hide == 0) {
+						bezt->f1 |= SELECT;
+						bezt->f2 |= SELECT;
+						bezt->f3 |= SELECT;
+					}
+				}
+			}
+			else if (nu->bp) {
+				BPoint *bp;
+				for (bp = nu->bp, a = 0; a < nu->pntsu * nu->pntsv; a++, bp++) {
+					if (bp->hide == 0)
+						bp->f1 |= SELECT;
+				}
+			}
+		}
 	}
 }
 

Modified: trunk/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawobject.c	2013-01-15 14:46:55 UTC (rev 53817)
+++ trunk/blender/source/blender/editors/space_view3d/drawobject.c	2013-01-15 15:42:12 UTC (rev 53818)
@@ -4911,7 +4911,7 @@
 
 /*place to add drawers */
 
-static void tekenhandlesN(Nurb *nu, short sel, short hide_handles)
+static void drawhandlesN(Nurb *nu, short sel, short hide_handles)
 {
 	BezTriple *bezt;
 	float *fp;
@@ -4971,7 +4971,7 @@
 	glEnd();
 }
 
-static void tekenhandlesN_active(Nurb *nu)
+static void drawhandlesN_active(Nurb *nu)
 {
 	BezTriple *bezt;
 	float *fp;
@@ -5006,7 +5006,7 @@
 	glLineWidth(1);
 }
 
-static void tekenvertsN(Nurb *nu, short sel, short hide_handles, void *lastsel)
+static void drawvertsN(Nurb *nu, short sel, short hide_handles, void *lastsel)
 {
 	BezTriple *bezt;
 	BPoint *bp;
@@ -5286,8 +5286,8 @@
 	for (nu = nurb; nu; nu = nu->next) {
 		if (nu->type == CU_BEZIER) {
 			if (index == cu->actnu && !hide_handles)
-				tekenhandlesN_active(nu);
-			tekenhandlesN(nu, 0, hide_handles);
+				drawhandlesN_active(nu);
+			drawhandlesN(nu, 0, hide_handles);
 		}
 		index++;
 	}
@@ -5296,8 +5296,8 @@
 	/* selected handles */
 	for (nu = nurb; nu; nu = nu->next) {
 		if (nu->type == CU_BEZIER && (cu->drawflag & CU_HIDE_HANDLES) == 0)
-			tekenhandlesN(nu, 1, hide_handles);
-		tekenvertsN(nu, 0, hide_handles, NULL);
+			drawhandlesN(nu, 1, hide_handles);
+		drawvertsN(nu, 0, hide_handles, NULL);
 	}
 	
 	if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
@@ -5348,7 +5348,7 @@
 	if (v3d->zbuf) glDisable(GL_DEPTH_TEST);
 	
 	for (nu = nurb; nu; nu = nu->next) {
-		tekenvertsN(nu, 1, hide_handles, cu->lastsel);
+		drawvertsN(nu, 1, hide_handles, cu->lastsel);
 	}
 	
 	if (v3d->zbuf) glEnable(GL_DEPTH_TEST);




More information about the Bf-blender-cvs mailing list