Commit: 94f35ecf1b619b756e503122434f10bc492fb37a
Author: Campbell Barton
Date:   Thu Sep 4 16:14:02 2014 +1000
Branches: master
https://developer.blender.org/rB94f35ecf1b619b756e503122434f10bc492fb37a

Fix setting Curve-handle type moving the wrong one

Issue noted in T35952, now if you convert a free handle to an aligned handle,
it will move the selected handle.

===================================================================

M       source/blender/blenkernel/intern/curve.c

===================================================================

diff --git a/source/blender/blenkernel/intern/curve.c 
b/source/blender/blenkernel/intern/curve.c
index 285dc41..9275b62 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -3313,6 +3313,31 @@ void BKE_nurb_handles_calc(Nurb *nu) /* first, if 
needed, set handle flags */
        calchandlesNurb_intern(nu, false);
 }
 
+/**
+ * Workaround #BKE_nurb_handles_calc logic
+ * that makes unselected align to the selected handle.
+ */
+static void nurbList_handles_swap_select(Nurb *nu)
+{
+       BezTriple *bezt;
+       int i;
+
+       for (i = nu->pntsu, bezt = nu->bezt; i--; bezt++) {
+               if ((bezt->f1 & SELECT) != (bezt->f3 & SELECT)) {
+                       bezt->f1 ^= SELECT;
+                       bezt->f3 ^= SELECT;
+               }
+       }
+}
+
+/* internal use only (weak) */
+static void nurb_handles_calc__align_selected(Nurb *nu)
+{
+       nurbList_handles_swap_select(nu);
+       BKE_nurb_handles_calc(nu);
+       nurbList_handles_swap_select(nu);
+}
+
 /* similar to BKE_nurb_handle_calc but for curves and
  * figures out the previous and next for us */
 void BKE_nurb_handle_calc_simple(Nurb *nu, BezTriple *bezt)
@@ -3510,7 +3535,9 @@ void BKE_nurbList_handles_set(ListBase *editnurb, const 
char code)
                                        }
                                        bezt++;
                                }
-                               BKE_nurb_handles_calc(nu);
+
+                               /* like BKE_nurb_handles_calc but moves 
selected */
+                               nurb_handles_calc__align_selected(nu);
                        }
                        nu = nu->next;
                }
@@ -3554,7 +3581,9 @@ void BKE_nurbList_handles_set(ListBase *editnurb, const 
char code)
 
                                        bezt++;
                                }
-                               BKE_nurb_handles_calc(nu);
+
+                               /* like BKE_nurb_handles_calc but moves 
selected */
+                               nurb_handles_calc__align_selected(nu);
                        }
                }
        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to