SplinePoint tangents revamp

I’m proud to inform you that I’ve almost finished the implementation of some improvements on SplinePoint tangent handling.

It has been a long time requested feature to be able to handle the tangents radius independently of the tangent angle, as Inkscape does with its bezier curves.

This tangent revamping includes:

  1. Elimination of the “Split” subparameter of the SplinePoint type. Well, in fact internally it is still present but it is not exposed to the user and it is not usable (change it does nothing). It is used only to read old files and act like a bridge between the old data and the new values.
  2. Addition of two new subparameters: “Radius Split” and “Angle Split” flags. meaning is exactly the same than the eliminated but it acts only over Radius or Angle of the tangents.
  3. New actions related to “split” and to “merge”. You can split or merge the radius, the angle or both. Actions are exposed based on the current status of those new flags. Merge (in general) changes both tangents and split doesn’t touch the tangent values but introduces a new waypoint if in animation mode (to keep tangent transition smooth). Same effect occurs when the split flags subparameters are modified manually.
  4. “Insert Item (Smart)” action has been replaced by two ones: “Insert Item” and “Insert Item & Keep Shape”. The first it exactly the same than the replaced but removes its “Smart” terminology. Smart refers to the ability to add on/off points if you insert/remove an item in animation mode. The second keeps the shape of the curve when insert an item on a bezier (another long awaited feature that is consequence of the radius and angle split abilities)
  5. Newly created Splines has their tangent’s radius split by default. It is the same behavior than Inkscape. It is possible to add one user option at the Spline Tool options panel to let the user select whether radius or angle are split or not. It is not implemented I would like to know if you would like to have that or the current implemented default.
  6. When moving a tangent and there is somehow some component merged (split radius or split angle is off) then the other tangent is moved. This may looks obvious but wait, continue reading. If you modify the tangent using the X;Y components the other tangent is updated. But if you modify the tangent indirectly (via Convert) the other tangent is not updated, unless you’re moving the tangent 1. Tangent 1 modified indirectly has preference over the tangent 2. If you move the tangent 1 or 2 using the handles or directly entering the numbers in the X and Y coordinates, then it is detected by the code and the other tangent is updated. That is that way because I can’t detect (at last easily and not recursively) if you’re modifying indirectly a tangent.
  7. When dragging a bezier, now, the surrounding bezier’s tangents are updated dynamically. This allow the user to have more precise feedback of how the bezier dragging is going to affect the neighbor beziers

I’m going to grab a screencast of all the features together that will post here later. Hopefully the next development snapshot will include this feature. The feature won’t be included in 0.64.1 but for sure will be in 0.64.2 (which looks like would be quicker as 0.64.1)

Suggestions are welcome.

Here is the video with all the new features:

I requested this feature from Carlos when I did some (actually quite a bit!) character animation earlier in the year. The problem I had was moving the arms and legs and keeping them looking smooth, but occasionally suddenly needing to create elbows or knees.

If I had had this feature then it would have saved me hours and hours of work over the course of the animation in adjusting split tangents to look like smooth ones.

I also think this feature is vitally important (along with snapping and alignment) in order to encourage people to create artwork in Synfig rather than import it into Synfig. It’s far better to create artwork that is going to be animated in Synfig in Synfig itself as it will save you a lot of time in the long run.

Many thanks for adding this Carlos - I never believed this feature would be added so quickly or so thoroughly. I can’t wait to try it out and see what I can do with it!

Totally agree with DaveJ both on the animating as on the drawing part. I almost do all my drawing(s) from within Synfig and with the revamped tangent system I will probably only switch back to Inkscape when I need pdf or svg output.
Good job, Genete.

Can’t agree more!!!
This feature is an other one which can take Synfig Studio to a new level as the advanced layer did.

Thanks guys!
I still pending the mouse gestures combined with keyboard pressing to access to the split/merge actions. I’ve decided to postpone it for the time when the keyboard mapping is reworked. There are too many interferences between the keys to introduce more messing now. Contextual actions are enough for the moment.