[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [61156] trunk/blender/source/blender: Made active point and active spline behaviour more predictable on curves/ surfaces:

Kevin Mackay mackay.ka at gmail.com
Wed Nov 6 00:37:09 CET 2013


Revision: 61156
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=61156
Author:   yakca
Date:     2013-11-05 23:37:09 +0000 (Tue, 05 Nov 2013)
Log Message:
-----------
Made active point and active spline behaviour more predictable on curves/surfaces:
* deselect all no longer leaves an active point
* the most recently added spline becomes the active one
* on successful duplicate/delete the active point and active spline are reset

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/curve.c
    trunk/blender/source/blender/editors/curve/editcurve.c
    trunk/blender/source/blender/editors/curve/editcurve_add.c

Modified: trunk/blender/source/blender/blenkernel/intern/curve.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/curve.c	2013-11-05 23:15:46 UTC (rev 61155)
+++ trunk/blender/source/blender/blenkernel/intern/curve.c	2013-11-05 23:37:09 UTC (rev 61156)
@@ -230,6 +230,7 @@
 	cun->editnurb = NULL;
 	cun->editfont = NULL;
 	cun->selboxes = NULL;
+	cun->lastsel = NULL;
 
 #if 0   // XXX old animation system
 	/* single user ipo too */

Modified: trunk/blender/source/blender/editors/curve/editcurve.c
===================================================================
--- trunk/blender/source/blender/editors/curve/editcurve.c	2013-11-05 23:15:46 UTC (rev 61155)
+++ trunk/blender/source/blender/editors/curve/editcurve.c	2013-11-05 23:37:09 UTC (rev 61156)
@@ -1279,6 +1279,8 @@
 	if (editnurb) {
 		Nurb *nu;
 		int a;
+		((Curve *)obedit->data)->lastsel = NULL;
+
 		for (nu = editnurb->first; nu; nu = nu->next) {
 			if (nu->bezt) {
 				BezTriple *bezt;
@@ -1902,7 +1904,6 @@
 	int a, b, c, starta, enda, diffa, cyclicu, cyclicv, newu, newv;
 	char *usel;
 
-	cu->lastsel = NULL;
 	while (nu) {
 		cyclicu = cyclicv = 0;
 		if (nu->type == CU_BEZIER) {
@@ -1927,7 +1928,6 @@
 
 						newnu = BKE_nurb_copy(nu, newu, 1);
 						BLI_addtail(newnurb, newnu);
-						set_actNurb(obedit, newnu);
 						memcpy(newnu->bezt, &nu->bezt[starta], diffa * sizeof(BezTriple));
 						if (newu != diffa) {
 							memcpy(&newnu->bezt[diffa], nu->bezt, cyclicu * sizeof(BezTriple));
@@ -1976,7 +1976,6 @@
 
 						newnu = BKE_nurb_copy(nu, newu, 1);
 						BLI_addtail(newnurb, newnu);
-						set_actNurb(obedit, newnu);
 						memcpy(newnu->bp, &nu->bp[starta], diffa * sizeof(BPoint));
 						if (newu != diffa) {
 							memcpy(&newnu->bp[diffa], nu->bp, cyclicu * sizeof(BPoint));
@@ -1995,8 +1994,6 @@
 			if (cyclicu != 0) {
 				newnu = BKE_nurb_copy(nu, cyclicu, 1);
 				BLI_addtail(newnurb, newnu);
-				set_actNurb(obedit, newnu);
-
 				memcpy(newnu->bp, nu->bp, cyclicu * sizeof(BPoint));
 				newnu->flagu &= ~CU_NURB_CYCLIC;
 
@@ -2093,7 +2090,6 @@
 									memcpy(&newnu->bp[b * newu], &nu->bp[b * nu->pntsu + a], newu * sizeof(BPoint));
 								}
 							}
-							set_actNurb(obedit, newnu);
 							BLI_addtail(newnurb, newnu);
 
 							if (newu != nu->pntsu) newnu->flagu &= ~CU_NURB_CYCLIC;
@@ -2110,7 +2106,6 @@
 						for (b = 0; b < newv; b++) {
 							memcpy(&newnu->bp[b * newu], &nu->bp[b * nu->pntsu], newu * sizeof(BPoint));
 						}
-						set_actNurb(obedit, newnu);
 						BLI_addtail(newnurb, newnu);
 
 						if (newu != nu->pntsu) newnu->flagu &= ~CU_NURB_CYCLIC;
@@ -2127,32 +2122,35 @@
 		nu = nu->prev;
 	}
 
-	for (nu = newnurb->first; nu; nu = nu->next) {
-		if (nu->type == CU_BEZIER) {
-			if (split) {
-				/* recalc first and last */
-				BKE_nurb_handle_calc_simple(nu, &nu->bezt[0]);
-				BKE_nurb_handle_calc_simple(nu, &nu->bezt[nu->pntsu - 1]);
+	if (newnurb->first != NULL) {
+		cu->lastsel = NULL;
+		cu->actnu = -1;
+
+		for (nu = newnurb->first; nu; nu = nu->next) {
+			if (nu->type == CU_BEZIER) {
+				if (split) {
+					/* recalc first and last */
+					BKE_nurb_handle_calc_simple(nu, &nu->bezt[0]);
+					BKE_nurb_handle_calc_simple(nu, &nu->bezt[nu->pntsu - 1]);
+				}
 			}
-		}
-		else {
-			/* knots done after duplicate as pntsu may change */
-			nu->knotsu = nu->knotsv = NULL;
-			BKE_nurb_order_clamp_u(nu);
-			BKE_nurb_knot_calc_u(nu);
+			else {
+				/* knots done after duplicate as pntsu may change */
+				nu->knotsu = nu->knotsv = NULL;
+				BKE_nurb_order_clamp_u(nu);
+				BKE_nurb_knot_calc_u(nu);
 
-			if (obedit->type == OB_SURF) {
-				for (a = 0, bp = nu->bp; a < nu->pntsu * nu->pntsv; a++, bp++) {
-					bp->f1 &= ~SURF_SEEN;
+				if (obedit->type == OB_SURF) {
+					for (a = 0, bp = nu->bp; a < nu->pntsu * nu->pntsv; a++, bp++) {
+						bp->f1 &= ~SURF_SEEN;
+					}
+
+					BKE_nurb_order_clamp_v(nu);
+					BKE_nurb_knot_calc_v(nu);
 				}
-
-				BKE_nurb_order_clamp_v(nu);
-				BKE_nurb_knot_calc_v(nu);
 			}
 		}
 	}
-
-	/* actnu changed */
 }
 
 /**************** switch direction operator ***************/
@@ -6367,6 +6365,7 @@
 static int curve_delete_exec(bContext *C, wmOperator *op)
 {
 	Object *obedit = CTX_data_edit_object(C);
+	Curve *cu = (Curve *)obedit->data;
 	eCurveElem_Types type = RNA_enum_get(op->ptr, "type");
 	int retval;
 
@@ -6375,6 +6374,9 @@
 	else BLI_assert(0);
 
 	if (retval == OPERATOR_FINISHED) {
+		cu->lastsel = NULL;
+		cu->actnu = -1;
+
 		if (ED_curve_updateAnimPaths(obedit->data)) WM_event_add_notifier(C, NC_OBJECT | ND_KEYS, obedit);
 
 		WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);

Modified: trunk/blender/source/blender/editors/curve/editcurve_add.c
===================================================================
--- trunk/blender/source/blender/editors/curve/editcurve_add.c	2013-11-05 23:15:46 UTC (rev 61155)
+++ trunk/blender/source/blender/editors/curve/editcurve_add.c	2013-11-05 23:37:09 UTC (rev 61156)
@@ -458,6 +458,8 @@
 
 	if (nu) { /* should always be set */
 		nu->flag |= CU_SMOOTH;
+		cu->actnu = BLI_countlist(editnurb);
+		cu->lastsel = NULL;
 
 		BKE_nurb_test2D(nu);
 	}




More information about the Bf-blender-cvs mailing list