bugfix [#24324] Wrong center for scaling Bezier Curve's handles
authorCampbell Barton <ideasman42@gmail.com>
Tue, 19 Oct 2010 14:11:46 +0000 (14:11 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Tue, 19 Oct 2010 14:11:46 +0000 (14:11 +0000)
slight change to how transform calculates the center of each bezier handle selection.
- selecting both handles but not the knot now uses the mid point between the 2, before it used the handle.
- selecting 1 handle of a curve was still setting td->center to be the knot, now use the handles location only if its selected.

source/blender/editors/transform/transform_conversions.c
source/blender/editors/transform/transform_manipulator.c

index 7e74d12..5b18135 100644 (file)
@@ -1403,7 +1403,7 @@ static void createTransCurveVerts(bContext *C, TransInfo *t)
                                          ) {
                                                VECCOPY(td->iloc, bezt->vec[0]);
                                                td->loc= bezt->vec[0];
-                                               VECCOPY(td->center, bezt->vec[1]);
+                                               VECCOPY(td->center, bezt->vec[(hide_handles || bezt->f2 & SELECT) ? 1:0]);
                                                if (hide_handles) {
                                                        if(bezt->f2 & SELECT) td->flag= TD_SELECTED;
                                                        else td->flag= 0;
@@ -1462,7 +1462,7 @@ static void createTransCurveVerts(bContext *C, TransInfo *t)
                                          ) {
                                                VECCOPY(td->iloc, bezt->vec[2]);
                                                td->loc= bezt->vec[2];
-                                               VECCOPY(td->center, bezt->vec[1]);
+                                               VECCOPY(td->center, bezt->vec[(hide_handles || bezt->f2 & SELECT) ? 1:2]);
                                                if (hide_handles) {
                                                        if(bezt->f2 & SELECT) td->flag= TD_SELECTED;
                                                        else td->flag= 0;
index 030ad19..f3afd57 100644 (file)
@@ -308,7 +308,7 @@ int calc_manipulator_stats(const bContext *C)
                                        while(a--) {
                                                /* exceptions
                                                 * if handles are hidden then only check the center points.
-                                                * If 2 or more are selected then only use the center point too.
+                                                * If the center knot is selected then only use this as the center point.
                                                 */
                                                if (cu->drawflag & CU_HIDE_HANDLES) {
                                                        if (bezt->f2 & SELECT) {
@@ -316,7 +316,7 @@ int calc_manipulator_stats(const bContext *C)
                                                                totsel++;
                                                        }
                                                }
-                                               else if ( (bezt->f1 & SELECT) + (bezt->f2 & SELECT) + (bezt->f3 & SELECT) > SELECT ) {
+                                               else if (bezt->f2 & SELECT) {
                                                        calc_tw_center(scene, bezt->vec[1]);
                                                        totsel++;
                                                }
@@ -325,10 +325,6 @@ int calc_manipulator_stats(const bContext *C)
                                                                calc_tw_center(scene, bezt->vec[0]);
                                                                totsel++;
                                                        }
-                                                       if(bezt->f2) {
-                                                               calc_tw_center(scene, bezt->vec[1]);
-                                                               totsel++;
-                                                       }
                                                        if(bezt->f3) {
                                                                calc_tw_center(scene, bezt->vec[2]);
                                                                totsel++;