<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.synfig.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rubikcube</id>
		<title>Synfig Studio :: Documentation - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.synfig.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rubikcube"/>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/Special:Contributions/Rubikcube"/>
		<updated>2026-05-25T05:55:30Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.26.3</generator>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Dev_talk:Bone_Layer&amp;diff=8274</id>
		<title>Dev talk:Bone Layer</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Dev_talk:Bone_Layer&amp;diff=8274"/>
				<updated>2008-11-27T16:22:51Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: /* Minor glitch in image */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Deleted Section. Kept for future references==&lt;br /&gt;
The calculation of the weight ''w'' is calculated based on the distance ''d'' of the point P to the bone according to this diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:Strength.png]]&lt;br /&gt;
&lt;br /&gt;
Notice how the point P1 is located at same distance ''d'' to the bone than the point P2.&lt;br /&gt;
&lt;br /&gt;
There are possibles formulation to calculate w based on d values but some initial are these:&lt;br /&gt;
&lt;br /&gt;
* '''Point is Fixed Bind to the Bone''': Bone has always the same weight regardless the distance form the bone.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; w=1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Point Flexible Binded to the Bone''': that means that the bone has influence to the point always but it decreases exponentially to with the distance d². Here is a new parameter called ''s'' (strength). it can modify the weight function of the bone with the distance ''d''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; w=e^{-\frac{d^2}{s}} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:flexibind.png]]&lt;br /&gt;
&lt;br /&gt;
* '''Point Region-Linear Binded to the Bone''': that means that the bone has influence to the point only inside a certain region and it decreases linearly from w=1 when d=0 w=0 when d=s.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; w=1-\frac{d}{s} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:region-linear.png]]&lt;br /&gt;
&lt;br /&gt;
* '''Point Region-Parabolic Binded to the Bone''': that means that the bone has influence to the point only inside a certain region and it decreases parabolic from w=1 when d=0 w=0 when d=s.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; w=1-\frac{d^2}{s^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:region-parabolic.png]]&lt;br /&gt;
----&lt;br /&gt;
Rewinding to the concept introduced in the previous section (the amount of influence of each bone called ''w'') you can remember that it was calculated based on the &amp;quot;distance&amp;quot; (d) of the point from the bone and the &amp;quot;strength&amp;quot; (s) of the bone. See the graphics before. As you can see, there are some of the possible ''w'' definitions that has a value of w=0 for d&amp;gt;s. It means that the weight of that bone over this point is null and doesn't contribute to the movement of the point resulting of the influence of the bone(s). &lt;br /&gt;
&lt;br /&gt;
That possibility (w=0) triggers two questions:&lt;br /&gt;
&lt;br /&gt;
1) What happen if all the bones has the weight w=0 for a certain point?.&lt;br /&gt;
&lt;br /&gt;
2) If the point can move additionally to the bone movement influence, can the distance (d) to the bone produce that the weight (w) becomes w=0 and the point is out of influence from that bone? If the point goes out of all the bones influence regions it triggers the question 1). &lt;br /&gt;
&lt;br /&gt;
Answer to 2):&lt;br /&gt;
&lt;br /&gt;
We are assuming that the distance (d) from the point to the bone is calculated based on the current distance from the point to the bone. That's not necessarily true. We can have a kind of &amp;quot;static&amp;quot; point that defines the relative position of the point from the bone for the distance (d) calculation and then apply the weight to the bone(s) influence matrix regardless the current point position give by the sum of (a) + (b) (explained before).&lt;br /&gt;
&lt;br /&gt;
Let's call that relative position Q. That &amp;quot;static&amp;quot; position can be given in two ways: in coordinates relative to each bone (a &amp;lt;math&amp;gt; Q_i &amp;lt;/math&amp;gt; for each bone i) or a single absolute coordinate Q value for the point and the distances (d) for each bone is calculated based on an static set of bone positions (&amp;lt;math&amp;gt; B_s &amp;lt;/math&amp;gt;). In any case the weights (w) need some &amp;quot;static&amp;quot; values to get the information from. I type &amp;quot;static&amp;quot; and not static (without quotes) because I think that it can be an animatable value (but usually it isn't).&lt;br /&gt;
&lt;br /&gt;
== Discussion by rubikcube ==&lt;br /&gt;
&lt;br /&gt;
* I think the image has one small mistake: shouldn't &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; be from the horizontal axis to the bone's axis? At the moment it's from the horizontal to the connection line (OO').&lt;br /&gt;
I'm referring to http://synfig.org/Image:Bonesimulation.png&lt;br /&gt;
&lt;br /&gt;
--[[User:Rubikcube|Rubikcube]] 11:06, 27 November 2008 (EST)&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Dev_talk:Bone_Layer&amp;diff=8273</id>
		<title>Dev talk:Bone Layer</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Dev_talk:Bone_Layer&amp;diff=8273"/>
				<updated>2008-11-27T16:07:27Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: /* Minor glitch in image */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Deleted Section. Kept for future references==&lt;br /&gt;
The calculation of the weight ''w'' is calculated based on the distance ''d'' of the point P to the bone according to this diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:Strength.png]]&lt;br /&gt;
&lt;br /&gt;
Notice how the point P1 is located at same distance ''d'' to the bone than the point P2.&lt;br /&gt;
&lt;br /&gt;
There are possibles formulation to calculate w based on d values but some initial are these:&lt;br /&gt;
&lt;br /&gt;
* '''Point is Fixed Bind to the Bone''': Bone has always the same weight regardless the distance form the bone.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; w=1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Point Flexible Binded to the Bone''': that means that the bone has influence to the point always but it decreases exponentially to with the distance d². Here is a new parameter called ''s'' (strength). it can modify the weight function of the bone with the distance ''d''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; w=e^{-\frac{d^2}{s}} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:flexibind.png]]&lt;br /&gt;
&lt;br /&gt;
* '''Point Region-Linear Binded to the Bone''': that means that the bone has influence to the point only inside a certain region and it decreases linearly from w=1 when d=0 w=0 when d=s.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; w=1-\frac{d}{s} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:region-linear.png]]&lt;br /&gt;
&lt;br /&gt;
* '''Point Region-Parabolic Binded to the Bone''': that means that the bone has influence to the point only inside a certain region and it decreases parabolic from w=1 when d=0 w=0 when d=s.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; w=1-\frac{d^2}{s^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:region-parabolic.png]]&lt;br /&gt;
----&lt;br /&gt;
Rewinding to the concept introduced in the previous section (the amount of influence of each bone called ''w'') you can remember that it was calculated based on the &amp;quot;distance&amp;quot; (d) of the point from the bone and the &amp;quot;strength&amp;quot; (s) of the bone. See the graphics before. As you can see, there are some of the possible ''w'' definitions that has a value of w=0 for d&amp;gt;s. It means that the weight of that bone over this point is null and doesn't contribute to the movement of the point resulting of the influence of the bone(s). &lt;br /&gt;
&lt;br /&gt;
That possibility (w=0) triggers two questions:&lt;br /&gt;
&lt;br /&gt;
1) What happen if all the bones has the weight w=0 for a certain point?.&lt;br /&gt;
&lt;br /&gt;
2) If the point can move additionally to the bone movement influence, can the distance (d) to the bone produce that the weight (w) becomes w=0 and the point is out of influence from that bone? If the point goes out of all the bones influence regions it triggers the question 1). &lt;br /&gt;
&lt;br /&gt;
Answer to 2):&lt;br /&gt;
&lt;br /&gt;
We are assuming that the distance (d) from the point to the bone is calculated based on the current distance from the point to the bone. That's not necessarily true. We can have a kind of &amp;quot;static&amp;quot; point that defines the relative position of the point from the bone for the distance (d) calculation and then apply the weight to the bone(s) influence matrix regardless the current point position give by the sum of (a) + (b) (explained before).&lt;br /&gt;
&lt;br /&gt;
Let's call that relative position Q. That &amp;quot;static&amp;quot; position can be given in two ways: in coordinates relative to each bone (a &amp;lt;math&amp;gt; Q_i &amp;lt;/math&amp;gt; for each bone i) or a single absolute coordinate Q value for the point and the distances (d) for each bone is calculated based on an static set of bone positions (&amp;lt;math&amp;gt; B_s &amp;lt;/math&amp;gt;). In any case the weights (w) need some &amp;quot;static&amp;quot; values to get the information from. I type &amp;quot;static&amp;quot; and not static (without quotes) because I think that it can be an animatable value (but usually it isn't).&lt;br /&gt;
&lt;br /&gt;
== Minor glitch in image ==&lt;br /&gt;
&lt;br /&gt;
I think the image has one small mistake: shouldn't &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; be from the horizontal axis to the bone's axis? At the moment it's from the horizontal to the connection line (OO').&lt;br /&gt;
I'm referring to http://synfig.org/Image:Bonesimulation.png&lt;br /&gt;
--[[User:Rubikcube|Rubikcube]] 11:06, 27 November 2008 (EST)&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Dev_talk:Bone_Layer&amp;diff=8272</id>
		<title>Dev talk:Bone Layer</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Dev_talk:Bone_Layer&amp;diff=8272"/>
				<updated>2008-11-27T16:06:20Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: Minor glitch in image&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Deleted Section. Kept for future references==&lt;br /&gt;
The calculation of the weight ''w'' is calculated based on the distance ''d'' of the point P to the bone according to this diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:Strength.png]]&lt;br /&gt;
&lt;br /&gt;
Notice how the point P1 is located at same distance ''d'' to the bone than the point P2.&lt;br /&gt;
&lt;br /&gt;
There are possibles formulation to calculate w based on d values but some initial are these:&lt;br /&gt;
&lt;br /&gt;
* '''Point is Fixed Bind to the Bone''': Bone has always the same weight regardless the distance form the bone.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; w=1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Point Flexible Binded to the Bone''': that means that the bone has influence to the point always but it decreases exponentially to with the distance d². Here is a new parameter called ''s'' (strength). it can modify the weight function of the bone with the distance ''d''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; w=e^{-\frac{d^2}{s}} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:flexibind.png]]&lt;br /&gt;
&lt;br /&gt;
* '''Point Region-Linear Binded to the Bone''': that means that the bone has influence to the point only inside a certain region and it decreases linearly from w=1 when d=0 w=0 when d=s.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; w=1-\frac{d}{s} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:region-linear.png]]&lt;br /&gt;
&lt;br /&gt;
* '''Point Region-Parabolic Binded to the Bone''': that means that the bone has influence to the point only inside a certain region and it decreases parabolic from w=1 when d=0 w=0 when d=s.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; w=1-\frac{d^2}{s^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:region-parabolic.png]]&lt;br /&gt;
----&lt;br /&gt;
Rewinding to the concept introduced in the previous section (the amount of influence of each bone called ''w'') you can remember that it was calculated based on the &amp;quot;distance&amp;quot; (d) of the point from the bone and the &amp;quot;strength&amp;quot; (s) of the bone. See the graphics before. As you can see, there are some of the possible ''w'' definitions that has a value of w=0 for d&amp;gt;s. It means that the weight of that bone over this point is null and doesn't contribute to the movement of the point resulting of the influence of the bone(s). &lt;br /&gt;
&lt;br /&gt;
That possibility (w=0) triggers two questions:&lt;br /&gt;
&lt;br /&gt;
1) What happen if all the bones has the weight w=0 for a certain point?.&lt;br /&gt;
&lt;br /&gt;
2) If the point can move additionally to the bone movement influence, can the distance (d) to the bone produce that the weight (w) becomes w=0 and the point is out of influence from that bone? If the point goes out of all the bones influence regions it triggers the question 1). &lt;br /&gt;
&lt;br /&gt;
Answer to 2):&lt;br /&gt;
&lt;br /&gt;
We are assuming that the distance (d) from the point to the bone is calculated based on the current distance from the point to the bone. That's not necessarily true. We can have a kind of &amp;quot;static&amp;quot; point that defines the relative position of the point from the bone for the distance (d) calculation and then apply the weight to the bone(s) influence matrix regardless the current point position give by the sum of (a) + (b) (explained before).&lt;br /&gt;
&lt;br /&gt;
Let's call that relative position Q. That &amp;quot;static&amp;quot; position can be given in two ways: in coordinates relative to each bone (a &amp;lt;math&amp;gt; Q_i &amp;lt;/math&amp;gt; for each bone i) or a single absolute coordinate Q value for the point and the distances (d) for each bone is calculated based on an static set of bone positions (&amp;lt;math&amp;gt; B_s &amp;lt;/math&amp;gt;). In any case the weights (w) need some &amp;quot;static&amp;quot; values to get the information from. I type &amp;quot;static&amp;quot; and not static (without quotes) because I think that it can be an animatable value (but usually it isn't).&lt;br /&gt;
&lt;br /&gt;
== Minor glitch in image ==&lt;br /&gt;
&lt;br /&gt;
I think the image has one small mistake: shouldn't &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; be from the horizontal axis to the bone's axis? At the moment it's from the horizontal to the connection line (OO').&lt;br /&gt;
--[[User:Rubikcube|Rubikcube]] 11:06, 27 November 2008 (EST)&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Dev:Bone_Layer&amp;diff=8269</id>
		<title>Dev:Bone Layer</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Dev:Bone_Layer&amp;diff=8269"/>
				<updated>2008-11-27T00:19:36Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: /* How does a Vertex move under the influence of a single Bone? */ some typos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Initial seed for concepts ==&lt;br /&gt;
&lt;br /&gt;
[http://dooglus.rincevent.net/synfig/logs/2008/%23synfig-2008-11-12.log This portion] of IRC logs sets the basis for the implementation of a Bone Layer. The interesting part is from 16:49 to 18:56.&lt;br /&gt;
&lt;br /&gt;
Also [http://dooglus.rincevent.net/synfig/logs/2008/%23synfig-2008-11-13.log this one] has some interesting thoughts. From 8:20 to 14:43&lt;br /&gt;
&lt;br /&gt;
== Concepts ==&lt;br /&gt;
This is a not sorted list of concepts what I would write to let me clarify my self and also allow others to understand the next sections.&lt;br /&gt;
&lt;br /&gt;
=== Bones intentions ===&lt;br /&gt;
Initial intention of Bones is attempt to emulate the skeleton of a vertebrate animal. In this way you have a skin and a skeleton. Skin is associated to the bones of the skeleton. When the skeleton moves the skin follows.&lt;br /&gt;
&lt;br /&gt;
=== Application of bones in animation ===&lt;br /&gt;
In traditional animation produce a walk cycle implies draw each keyframe for the walk and maybe, depending on the walking speed, draw the in betweens too. To avoid to draw the in between images there comes the tweening animation programs (like synfig) to help the animator. Then the animator just need to draw the keyframes and the application would do the rest. That's quite good but in certain situations you see your self redrawing the same pose (with small variations) frequently at different times. Then the bones comes to help. They allow to to the animator in the following manner.&lt;br /&gt;
&lt;br /&gt;
* With the manipulation of a single object (or a set of them) you can manage a lot of points of the drawing definition.&lt;br /&gt;
* Rotations of drawings using keyframes needs lots of them (by the nature that the tweening is defined in the x,y coordinates system and the rotation is performed in the angle, radius coordinate system). Using bones you can perform rotations of large angles with just two waypoints. As well as characters have limbs and limbs in living beings do mainly rotations, the usage of bones becomes handy in that kind of animations.&lt;br /&gt;
* Once the character (or whatever thing that uses bones) is rigged (the skeleton structure is created and the relationship between the skin and it is set) it is possible to produce different kind of keyframes for different purposes: Walk, run, jump, sit, ...&lt;br /&gt;
&lt;br /&gt;
== How can we do implement this? ==&lt;br /&gt;
The relationship between the skeleton and the skin is in this way:&lt;br /&gt;
&lt;br /&gt;
*The Skin is made by Points and blines. Blines are defined by Points. Points are made of Vertexes and Tangents&lt;br /&gt;
*Skeleton is made of bones and its relationship.&lt;br /&gt;
*''If Bones would have influence on the Vertexes and Tangents then the bones movements would move the points and therefore the skin would be moved''.&lt;br /&gt;
&lt;br /&gt;
That's the key, if we understand how does a bones has influence on a vertex and a tangent then we can find the way a skeleton can have influence over a skin.&lt;br /&gt;
&lt;br /&gt;
=== Bones Properties ===&lt;br /&gt;
By my experience with bones in other 2D animation applications, watching its strong and weak points, the bones needs to have the following properties:&lt;br /&gt;
&lt;br /&gt;
* A bone has a origin place where the rotation is performed.&lt;br /&gt;
* A bone has a length.&lt;br /&gt;
* A bone has an angle with the horizontal.&lt;br /&gt;
* A bone can have a region of influence.&lt;br /&gt;
* A bone can have a parent bone and only one.&lt;br /&gt;
* A bone can have one (or more) child(ren) bone(s).&lt;br /&gt;
* A skeleton is defined as a connected set of bones (consisting of exactly one parentless bone and its children bones and their children...).&lt;br /&gt;
&lt;br /&gt;
All the bones on a synfig Document can produce several skeletons (depending on how many parent-less bones are in it).&lt;br /&gt;
&lt;br /&gt;
=== How does a Vertex move under the influence of a single Bone? ===&lt;br /&gt;
&lt;br /&gt;
Conceptually a bone has influence over a point doing [http://en.wikipedia.org/wiki/Affine_transformation affine transformation] of it position according to the bone values. See also [http://en.wikipedia.org/wiki/Transformation_matrix transformation matrix]. A bone produces rotation, scale and translation to a point in this way:&lt;br /&gt;
&lt;br /&gt;
[[Image:Bonesimulation.png]]&lt;br /&gt;
&lt;br /&gt;
As you can see the values that produces the movement of the point P to the point P' are given by:&lt;br /&gt;
&lt;br /&gt;
*Translation of the bone: O'-O&lt;br /&gt;
*Rotation of the bone: &amp;lt;math&amp;gt;\alpha'-\alpha&amp;lt;/math&amp;gt;&lt;br /&gt;
*Scale of the bone: s=length'/length&lt;br /&gt;
&lt;br /&gt;
Then, given a Point P in the 2D space and known the translation, rotation and scale of the bone you can calculate the new point position P' using this formulation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
T(-O)=\begin{bmatrix}&lt;br /&gt;
1 &amp;amp; 0 &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 1 &amp;amp; 0 \\&lt;br /&gt;
-O_x &amp;amp; -O_y &amp;amp; 1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt; Translation to origin (0,0)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
R(-\alpha)=\begin{bmatrix}&lt;br /&gt;
\cos(-\alpha) &amp;amp; \sin(-\alpha) &amp;amp; 0 \\&lt;br /&gt;
-\sin(-\alpha) &amp;amp; \cos(-\alpha) &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 0 &amp;amp; 1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt; Rotate an angle of amount '&amp;lt;math&amp;gt;-\alpha&amp;lt;/math&amp;gt;' around the origin. That aligns the bone with the X axis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
S_x(length'/length)=\begin{bmatrix}&lt;br /&gt;
length'/length &amp;amp; 0 &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 1 &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 0 &amp;amp; 1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt; Scale a value of 's=length'/length' in the direction of X (the current direction of the bone).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
R'(\alpha)=\begin{bmatrix}&lt;br /&gt;
\cos(\alpha^') &amp;amp; \sin(\alpha^') &amp;amp; 0 \\&lt;br /&gt;
-\sin(\alpha^') &amp;amp; \cos(\alpha^') &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 0 &amp;amp; 1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt; Rotate an angle of amount '&amp;lt;math&amp;gt;\alpha'&amp;lt;/math&amp;gt;' around the origin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
T'=======\begin{bmatrix}&lt;br /&gt;
1 &amp;amp; 0 &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 1 &amp;amp; 0 \\&lt;br /&gt;
O^'_x &amp;amp; O^'_y &amp;amp; 1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt; Translation to new position O'&lt;br /&gt;
&lt;br /&gt;
Then the transformation from P to P' is give by the matrix multiplication:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; P'=P\cdot T(-O)\cdot R(-\alpha)\cdot S_x(length'/length)\cdot R(\alpha')\cdot T(O')&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; P'=P\cdot T\cdot R\cdot S_x\cdot R'\cdot T'=P\cdot B&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Can Points (Bone influenced) be moved independently? ===&lt;br /&gt;
&lt;br /&gt;
Yes, they should be. If not the animator is tight to only do the animation with the bones animation what would end to some insoluble problems during the animation. Considered this, the point position result comes from the addition of two terms:&lt;br /&gt;
*(a) The movement of the point as described by the influence of the bone(s): P(B)&lt;br /&gt;
*(b) The free movement of the point in the 2D space. P(animated)&lt;br /&gt;
&lt;br /&gt;
In terms of the interface with the user, the value P(animated)is just obtained in this way:&lt;br /&gt;
&lt;br /&gt;
#In any position of the time line (bones are animated) the point have a position given by the influence of the bones: P(B).&lt;br /&gt;
#The user wrap a point, drags it, placing it at P'.&lt;br /&gt;
#The final position of the point is P' but the user cannot modify the first term P(B) so the second term (b) becomes: P(animated)=P'-P(B).&lt;br /&gt;
&lt;br /&gt;
===What happen if there are more than one bone affecting the point?===&lt;br /&gt;
&lt;br /&gt;
The first thing you can think when you deal with more than one bone making influence over the same point is to calculate the average of the sum of the influences of all bones. So if there are N bones affecting to the point then we can think on sum all the resulting points from each bone and then divide the result by N to not scale the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; B=\frac{\sum_{k=1}^N B_k}{N} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;B_k&amp;lt;/math&amp;gt; is the bone matrix for the bone ''k'' on the point P.&lt;br /&gt;
&lt;br /&gt;
That's fine but I would like to have more control to the way the bones affects to the points. When you move a bone it looks reasonable that not all the points are influence in the same way. This can be solved by using &amp;quot;weighted&amp;quot; average instead of a plain one. That means give different amount of influence to one bone than to other.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; B=\frac{\sum_{k=1}^N B_k \cdot w_k}{\sum_{k=1}^N w_k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;w_k&amp;lt;/math&amp;gt; is the weight for the bone ''k'' over the point P.&lt;br /&gt;
&lt;br /&gt;
=== Skeleton ===&lt;br /&gt;
&lt;br /&gt;
A skeleton is a set of bones linked one to others in a tree hierarchy. A bone can have several children (or none) but only one parent (or none). This configuration allows to do a easy calculation of the forward kinematic (FK )of the chain and the inverse kinematic (IK) of the chain of bones. If the hierarchy were not tree type then the FK and IK can be not soluble. &lt;br /&gt;
&lt;br /&gt;
For those IK and FK calculations it is good to have the bone referenced to its parent. So the parameters of the bone are described as relative to the parent bone. The parent bone defines a local coordinate system where the origin of the coordinate system lies on the Origin of the bone and the tip of the bone is pointing to the positive direction of the X axis.&lt;br /&gt;
&lt;br /&gt;
[[Image: skeleton.png]]&lt;br /&gt;
&lt;br /&gt;
As you can see in this image, each skeleton position and orientation is defined by the relative position of its immediate parent bone. In the diagram bone3 is a child of bone2 and bone 2 is a child of bone1. The bone 1 is the root parent bone but you can imagine it attached to a &amp;quot;master root bone&amp;quot; (defined by the origin of coordinates -red circumference- and the horizontal) so it can be said that the bone1 has its origin and angle defined relative to its &amp;quot;parent&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In this skeleton the three bones are parented in a linear way. But as you can imagine, following the rules stated for child-parent, a bone can have more than one child but not more than one parent. &lt;br /&gt;
That means that defined a bone in the skeleton, there is only one sequence of parents to reach the root parent of the skeleton. Also it means too that one root bone defines one skeleton so each skeleton has only one root bone and only one.&lt;br /&gt;
&lt;br /&gt;
Consider this: B3 is child of B2 and B2 is child of B1. Also B4 is child of B2 and B5 is child of B4. The way to travel from B5 to B1 is unique: B5-&amp;gt;B4-&amp;gt;B2-&amp;gt;B1.&lt;br /&gt;
&lt;br /&gt;
=== Setup and Animation ===&lt;br /&gt;
&lt;br /&gt;
During the animation of the skeleton it is supposed that the position of each bone, its angle and its scale changes. Position and angle are relative to the parent bone, but scale is a value that calculates the current length of the bone compared with the &amp;quot;original&amp;quot; bone length (scale=length'/length) as you can see from the original formulas in the previous section. That means that the &amp;quot;original&amp;quot; bone length shouldn't be never zero, otherwise there will be a division by zero and the scale of the bone becomes infinite.&lt;br /&gt;
&lt;br /&gt;
Also, the final position P' of a point that moves influenced by a single bone is given by the original point position relative to the bone in its &amp;quot;original&amp;quot; position (P). &lt;br /&gt;
&lt;br /&gt;
What I'm trying to explain you is that it is needed that the setup of the bone (position, alpha and length) and the setup position of the point (P) to be moved would be given to calculate the final position of the point (P') given a moved position of the bone (position', alpha', length')&lt;br /&gt;
&lt;br /&gt;
Said this and considered the information of the previous sections, the bones and points that are influenced from the bones should have the following parameters:&lt;br /&gt;
&lt;br /&gt;
'''BONES PARAMETERS'''&lt;br /&gt;
{| &lt;br /&gt;
! Parameter !! Notation !! Type !! Animated !! Comment&lt;br /&gt;
|- &lt;br /&gt;
| Origin ||&amp;lt;math&amp;gt; \textstyle O_j(t) &amp;lt;/math&amp;gt; || Vector (Real,Real) ||Yes|| Relative to the parent&lt;br /&gt;
|- &lt;br /&gt;
| Angle || &amp;lt;math&amp;gt; \textstyle \alpha_j(t) &amp;lt;/math&amp;gt; || Angle (DEG) ||Yes|| Relative to the parent&lt;br /&gt;
|- &lt;br /&gt;
| Length || &amp;lt;math&amp;gt; \textstyle l_j(t) &amp;lt;/math&amp;gt; || Real ||Yes|| Calculated, not animatable.&lt;br /&gt;
|- &lt;br /&gt;
| Scale || &amp;lt;math&amp;gt; \textstyle s_j(t) &amp;lt;/math&amp;gt; || Real ||Yes|| &amp;lt;math&amp;gt; \textstyle l_j(t) =l^0_j \cdot s_j(t) &amp;lt;/math&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Setup Origin || &amp;lt;math&amp;gt; \textstyle O^0_j(t) &amp;lt;/math&amp;gt; || Vector (Real,Real) ||Yes|| Relative to the parent&lt;br /&gt;
|- &lt;br /&gt;
| Setup Angle || &amp;lt;math&amp;gt; \textstyle \alpha^0_j(t) &amp;lt;/math&amp;gt; || Angle (DEG) ||Yes|| Relative to the parent&lt;br /&gt;
|- &lt;br /&gt;
| Setup Length || &amp;lt;math&amp;gt; \textstyle l^0_j &amp;lt;/math&amp;gt; || Real || No|| Constant, zero not allowed.&lt;br /&gt;
|- &lt;br /&gt;
| Setup Scale || &amp;lt;math&amp;gt; \textstyle s^0_j &amp;lt;/math&amp;gt; || Real || No|| &amp;lt;math&amp;gt; \textstyle s^0_j = 1 &amp;lt;/math&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Parent || &amp;lt;math&amp;gt; \textstyle PBone_j(t) &amp;lt;/math&amp;gt; || Bone ||Yes|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''POINT PARAMETERS'''&lt;br /&gt;
&lt;br /&gt;
{| &lt;br /&gt;
! Parameter !! Notation !! Type !! Animated !! Comment&lt;br /&gt;
|- &lt;br /&gt;
| Position ||&amp;lt;math&amp;gt; \textstyle V(t) &amp;lt;/math&amp;gt; || Vector (Real,Real) ||Yes|| Calculated: &amp;lt;math&amp;gt; \textstyle V(t) =VF(t) +  VS(t) \cdot M(t) &amp;lt;/math&amp;gt; Global coordinates&lt;br /&gt;
|- &lt;br /&gt;
| Setup Position ||&amp;lt;math&amp;gt; \textstyle VS(t) &amp;lt;/math&amp;gt; || Vector (Real, Real) ||Yes|| Absolute Coordinates&lt;br /&gt;
|- &lt;br /&gt;
| Bone Influence Matrix ||&amp;lt;math&amp;gt; \textstyle M(t) &amp;lt;/math&amp;gt; || Matrix (3x3) ||Yes|| Calculated. See formulas below&lt;br /&gt;
|- &lt;br /&gt;
| Bone Influence Id ||&amp;lt;math&amp;gt; \textstyle BoneID_i &amp;lt;/math&amp;gt; || Bone || No || 'i' is the index for all the Bones that influences on the Point&lt;br /&gt;
|- &lt;br /&gt;
| Influence weight ||&amp;lt;math&amp;gt; \textstyle w_i &amp;lt;/math&amp;gt; || Real || Yes || the weight associated to the BoneID_i&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(t) denotes ''calculated at the time t''&lt;br /&gt;
&lt;br /&gt;
=== Position of a Point due to Bones Influence ===&lt;br /&gt;
&lt;br /&gt;
According to the table, the final position of a point influenced by the bones is calculated based on two terms: A free movement of the point plus a bone drive movement. In this section we are going to calculate the second term.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \textstyle V(t) =VF(t) +  VS(t) \cdot M(t) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; M(t) = \cfrac{\sum_{i=1}^N M_i(t) \cdot w_i(t)}{\sum_{i=1}^N w_i(t)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; M_i(t)=B^0_i(t) \cdot B_i(t) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where i is a index that runs all the Bones Influence ID from i=1 to N (N= total number of bones that influence to the point)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; B^0_i(t)= \prod_{j=bone}^{j=root} C_j^0(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; B_i(t)= \prod_{j=root}^{j=bone} C_j(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where 'j' runs the bone skeleton jumping from a child/parent bone to a parent/child bone each time. The travel of the index 'j' from ''bone'' to ''root'' and from ''root'' to ''bone'' is fixed -and unique- by the nature of skeletons constructions (a bone, a parent), as mentioned before.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; C_j^0(t) = T(-O_j^0(t)) \cdot R(-\alpha_j^0(t)) \cdot S_x(\frac{1}{s^0_j})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This matrix calculates the position of the point in local coordinates in relation to the bone 'j' at setup position. Notice that &amp;lt;math&amp;gt; s^0_j &amp;lt;/math&amp;gt; is equal to &amp;lt;math&amp;gt; \textstyle 1 &amp;lt;/math&amp;gt; for any bone and for any time.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; C_j(t) = S_x(s_j(t))\cdot R(\alpha_j(t)) \cdot T(O_j(t)) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This matrix calculates the global position of the point due to the bone 'j' at animated position of the skeleton.&lt;br /&gt;
&lt;br /&gt;
=== Calculate the position and angle of a bone in a skeleton ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Position and Angle at Setup ====&lt;br /&gt;
&lt;br /&gt;
If the bones are described using relative coordinates to its predecessor, the position &amp;lt;math&amp;gt;\textstyle Q^0_j&amp;lt;/math&amp;gt; and the angle &amp;lt;math&amp;gt;\textstyle \beta^0_j&amp;lt;/math&amp;gt; of the bone 'j' in relation to the &amp;quot;master root bone&amp;quot; (ie. the global coordinate system) is given by those equations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Q^0_j(t) = O^0_j(t) \cdot B^0_j(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\beta^0_j(t) = \sum_{i=j}^{root} \alpha^0_i(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;B^0_j(t)=\prod_{i=parent}^{root} B^0_i(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where 'i' goes form the parent of the bone 'j' and climbs up by one parent each time until it reaches the 'root' bone of the skeleton.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;B^0_i(t)= T(-O^0_i(t)) \cdot R(-\alpha^0_i(t)) \cdot S_x(\frac{1}{s^0_j})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;B^0_i(t)&amp;lt;/math&amp;gt; is the inverse matrix transformation of the position of the bone relative to its immediate parent.&lt;br /&gt;
&lt;br /&gt;
Notice that at setup, &amp;lt;math&amp;gt;s^0_j&amp;lt;/math&amp;gt; is always equal to 1.&lt;br /&gt;
&lt;br /&gt;
====Animated Position and Angle ====&lt;br /&gt;
&lt;br /&gt;
Once calculated the position and angle of a bone in global coordinates you can calculate its animated position and angle by the transformation of their parents in the skeleton.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Q_j(t) = O^0_j(t) \cdot B^0_j(t) \cdot B_j(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\beta_j(t)= \beta^0_j(t) + \sum_{i=root}^{parent} \alpha_i(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;B_j(t)=\prod_{i=root}^{parent} B_i(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where 'i' goes form the root bone and jumps down by one child each time until it reaches the 'parent' bone of the bone 'j'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;B_i(t)= S_x(s_j(t)) \cdot R(\alpha_i(t)) \cdot T(O_i(t)) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\textstyle B_i(t)&amp;lt;/math&amp;gt; is the transformation matrix of the position of the bone 'j' at the time t. &lt;br /&gt;
&lt;br /&gt;
The results &amp;lt;math&amp;gt;\textstyle Q_j(t), \beta_j(t)&amp;lt;/math&amp;gt; are obtained in global coordinates.&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Dev:Bone_Layer&amp;diff=8264</id>
		<title>Dev:Bone Layer</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Dev:Bone_Layer&amp;diff=8264"/>
				<updated>2008-11-26T23:02:57Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: /* How does a Vertex move under the influence of a single Bone? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Initial seed for concepts ==&lt;br /&gt;
&lt;br /&gt;
[http://dooglus.rincevent.net/synfig/logs/2008/%23synfig-2008-11-12.log This portion] of IRC logs sets the basis for the implementation of a Bone Layer. The interesting part is from 16:49 to 18:56.&lt;br /&gt;
&lt;br /&gt;
Also [http://dooglus.rincevent.net/synfig/logs/2008/%23synfig-2008-11-13.log this one] has some interesting thoughts. From 8:20 to 14:43&lt;br /&gt;
&lt;br /&gt;
== Concepts ==&lt;br /&gt;
This is a not sorted list of concepts what I would write to let me clarify my self and also allow others to understand the next sections.&lt;br /&gt;
&lt;br /&gt;
=== Bones intentions ===&lt;br /&gt;
Initial intention of Bones is attempt to emulate the skeleton of a vertebrate animal. In this way you have a skin and a skeleton. Skin is associated to the bones of the skeleton. When the skeleton moves the skin follows.&lt;br /&gt;
&lt;br /&gt;
=== Application of bones in animation ===&lt;br /&gt;
In traditional animation produce a walk cycle implies draw each keyframe for the walk and maybe, depending on the walking speed, draw the in betweens too. To avoid to draw the in between images there comes the tweening animation programs (like synfig) to help the animator. Then the animator just need to draw the keyframes and the application would do the rest. That's quite good but in certain situations you see your self redrawing the same pose (with small variations) frequently at different times. Then the bones comes to help. They allow to to the animator in the following manner.&lt;br /&gt;
&lt;br /&gt;
* With the manipulation of a single object (or a set of them) you can manage a lot of points of the drawing definition.&lt;br /&gt;
* Rotations of drawings using keyframes needs lots of them (by the nature that the tweening is defined in the x,y coordinates system and the rotation is performed in the angle, radius coordinate system). Using bones you can perform rotations of large angles with just two waypoints. As well as characters have limbs and limbs in living beings do mainly rotations, the usage of bones becomes handy in that kind of animations.&lt;br /&gt;
* Once the character (or whatever thing that uses bones) is rigged (the skeleton structure is created and the relationship between the skin and it is set) it is possible to produce different kind of keyframes for different purposes: Walk, run, jump, sit, ...&lt;br /&gt;
&lt;br /&gt;
== How can we do implement this? ==&lt;br /&gt;
The relationship between the skeleton and the skin is in this way:&lt;br /&gt;
&lt;br /&gt;
*The Skin is made by Points and blines. Blines are defined by Points. Points are made of Vertexes and Tangents&lt;br /&gt;
*Skeleton is made of bones and its relationship.&lt;br /&gt;
*''If Bones would have influence on the Vertexes and Tangents then the bones movements would move the points and therefore the skin would be moved''.&lt;br /&gt;
&lt;br /&gt;
That's the key, if we understand how does a bones has influence on a vertex and a tangent then we can find the way a skeleton can have influence over a skin.&lt;br /&gt;
&lt;br /&gt;
=== Bones Properties ===&lt;br /&gt;
By my experience with bones in other 2D animation applications, watching its strong and weak points, the bones needs to have the following properties:&lt;br /&gt;
&lt;br /&gt;
* A bone has a origin place where the rotation is performed.&lt;br /&gt;
* A bone has a length.&lt;br /&gt;
* A bone has an angle with the horizontal.&lt;br /&gt;
* A bone can have a region of influence.&lt;br /&gt;
* A bone can have a parent bone and only one.&lt;br /&gt;
* A bone can have one (or more) child(ren) bone(s).&lt;br /&gt;
* A skeleton is defined as a connected set of bones (consisting of exactly one parentless bone and its children bones and their children...).&lt;br /&gt;
&lt;br /&gt;
All the bones on a synfig Document can produce several skeletons (depending on how many parent-less bones are in it).&lt;br /&gt;
&lt;br /&gt;
=== How does a Vertex move under the influence of a single Bone? ===&lt;br /&gt;
&lt;br /&gt;
Conceptually a bone has influence over a point doing [http://en.wikipedia.org/wiki/Affine_transformation affine transformation] of it position according to the bone values. See also [http://en.wikipedia.org/wiki/Transformation_matrix transformation matrix]. A bone produces rotation, scale and translation to a point in this way:&lt;br /&gt;
&lt;br /&gt;
[[Image:Bonesimulation.png]]&lt;br /&gt;
&lt;br /&gt;
As you can see the values that produces the movement of the point P to the point P' are given by:&lt;br /&gt;
&lt;br /&gt;
*Translation of the bone: O'-O&lt;br /&gt;
*Rotation of the bone: &amp;lt;math&amp;gt;\alpha'-\alpha&amp;lt;/math&amp;gt;&lt;br /&gt;
*Scale of the bone: s=length'/length&lt;br /&gt;
&lt;br /&gt;
Then, given a Point P in the 2D space and known the translation, rotation and scale of the bone you can calculate the new point position P' using this formulation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
T(-O)=\begin{bmatrix}&lt;br /&gt;
1 &amp;amp; 0 &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 1 &amp;amp; 0 \\&lt;br /&gt;
-O_x &amp;amp; -O_y &amp;amp; 1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt; Translation to origin (0,0)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
R(-\alpha)=\begin{bmatrix}&lt;br /&gt;
\cos(-\alpha) &amp;amp; \sin(-\alpha) &amp;amp; 0 \\&lt;br /&gt;
-\sin(-\alpha) &amp;amp; \cos(-\alpha) &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 0 &amp;amp; 1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt; Rotate an angle of amount '&amp;lt;math&amp;gt;-\alpha&amp;lt;/math&amp;gt;' around the origin. That aligns the bone with the X axis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
S_x(lenght'/lenght)=\begin{bmatrix}&lt;br /&gt;
length'/length &amp;amp; 0 &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 1 &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 0 &amp;amp; 1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt; Scale a value of 's=length'/length' in the direction of X (the current direction of the bone).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
R'(\alpha)=\begin{bmatrix}&lt;br /&gt;
\cos(\alpha^') &amp;amp; \sin(\alpha^') &amp;amp; 0 \\&lt;br /&gt;
-\sin(\alpha^') &amp;amp; \cos(\alpha^') &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 0 &amp;amp; 1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt; Rotate an angle of amount '&amp;lt;math&amp;gt;\alpha'&amp;lt;/math&amp;gt;' around the origin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
T'=======\begin{bmatrix}&lt;br /&gt;
1 &amp;amp; 0 &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 1 &amp;amp; 0 \\&lt;br /&gt;
O^'_x &amp;amp; O^'_y &amp;amp; 1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt; Translation to new position O'&lt;br /&gt;
&lt;br /&gt;
Then the transformation from P to P' is give by the matrix multiplication:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; P'=P\cdot T(-O)\cdot R(-\alpha)\cdot S_x(length'/lenght)\cdot R(\alpha')\cdot T(O')&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; P'=P\cdot T\cdot R\cdot S_x\cdot R'\cdot T'=P\cdot B&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Can Points (Bone influenced) be moved independently? ===&lt;br /&gt;
&lt;br /&gt;
Yes, they should be. If not the animator is tight to only do the animation with the bones animation what would end to some insoluble problems during the animation. Considered this, the point position result comes from the addition of two terms:&lt;br /&gt;
*(a) The movement of the point as described by the influence of the bone(s): P(B)&lt;br /&gt;
*(b) The free movement of the point in the 2D space. P(animated)&lt;br /&gt;
&lt;br /&gt;
In terms of the interface with the user, the value P(animated)is just obtained in this way:&lt;br /&gt;
&lt;br /&gt;
#In any position of the time line (bones are animated) the point have a position given by the influence of the bones: P(B).&lt;br /&gt;
#The user wrap a point, drags it, placing it at P'.&lt;br /&gt;
#The final position of the point is P' but the user cannot modify the first term P(B) so the second term (b) becomes: P(animated)=P'-P(B).&lt;br /&gt;
&lt;br /&gt;
===What happen if there are more than one bone affecting the point?===&lt;br /&gt;
&lt;br /&gt;
The first thing you can think when you deal with more than one bone making influence over the same point is to calculate the average of the sum of the influences of all bones. So if there are N bones affecting to the point then we can think on sum all the resulting points from each bone and then divide the result by N to not scale the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; B=\frac{\sum_{k=1}^N B_k}{N} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;B_k&amp;lt;/math&amp;gt; is the bone matrix for the bone ''k'' on the point P.&lt;br /&gt;
&lt;br /&gt;
That's fine but I would like to have more control to the way the bones affects to the points. When you move a bone it looks reasonable that not all the points are influence in the same way. This can be solved by using &amp;quot;weighted&amp;quot; average instead of a plain one. That means give different amount of influence to one bone than to other.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; B=\frac{\sum_{k=1}^N B_k \cdot w_k}{\sum_{k=1}^N w_k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;w_k&amp;lt;/math&amp;gt; is the weight for the bone ''k'' over the point P.&lt;br /&gt;
&lt;br /&gt;
=== Skeleton ===&lt;br /&gt;
&lt;br /&gt;
A skeleton is a set of bones linked one to others in a tree hierarchy. A bone can have several children (or none) but only one parent (or none). This configuration allows to do a easy calculation of the forward kinematic (FK )of the chain and the inverse kinematic (IK) of the chain of bones. If the hierarchy were not tree type then the FK and IK can be not soluble. &lt;br /&gt;
&lt;br /&gt;
For those IK and FK calculations it is good to have the bone referenced to its parent. So the parameters of the bone are described as relative to the parent bone. The parent bone defines a local coordinate system where the origin of the coordinate system lies on the Origin of the bone and the tip of the bone is pointing to the positive direction of the X axis.&lt;br /&gt;
&lt;br /&gt;
[[Image: skeleton.png]]&lt;br /&gt;
&lt;br /&gt;
As you can see in this image, each skeleton position and orientation is defined by the relative position of its immediate parent bone. In the diagram bone3 is a child of bone2 and bone 2 is a child of bone1. The bone 1 is the root parent bone but you can imagine it attached to a &amp;quot;master root bone&amp;quot; (defined by the origin of coordinates -red circumference- and the horizontal) so it can be said that the bone1 has its origin and angle defined relative to its &amp;quot;parent&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In this skeleton the three bones are parented in a linear way. But as you can imagine, following the rules stated for child-parent, a bone can have more than one child but not more than one parent. &lt;br /&gt;
That means that defined a bone in the skeleton, there is only one sequence of parents to reach the root parent of the skeleton. Also it means too that one root bone defines one skeleton so each skeleton has only one root bone and only one.&lt;br /&gt;
&lt;br /&gt;
Consider this: B3 is child of B2 and B2 is child of B1. Also B4 is child of B2 and B5 is child of B4. The way to travel from B5 to B1 is unique: B5-&amp;gt;B4-&amp;gt;B2-&amp;gt;B1.&lt;br /&gt;
&lt;br /&gt;
=== Setup and Animation ===&lt;br /&gt;
&lt;br /&gt;
During the animation of the skeleton it is supposed that the position of each bone, its angle and its scale changes. Position and angle are relative to the parent bone, but scale is a value that calculates the current length of the bone compared with the &amp;quot;original&amp;quot; bone length (scale=length'/length) as you can see from the original formulas in the previous section. That means that the &amp;quot;original&amp;quot; bone length shouldn't be never zero, otherwise there will be a division by zero and the scale of the bone becomes infinite.&lt;br /&gt;
&lt;br /&gt;
Also, the final position P' of a point that moves influenced by a single bone is given by the original point position relative to the bone in its &amp;quot;original&amp;quot; position (P). &lt;br /&gt;
&lt;br /&gt;
What I'm trying to explain you is that it is needed that the setup of the bone (position, alpha and length) and the setup position of the point (P) to be moved would be given to calculate the final position of the point (P') given a moved position of the bone (position', alpha', length')&lt;br /&gt;
&lt;br /&gt;
Said this and considered the information of the previous sections, the bones and points that are influenced from the bones should have the following parameters:&lt;br /&gt;
&lt;br /&gt;
'''BONES PARAMETERS'''&lt;br /&gt;
{| &lt;br /&gt;
! Parameter !! Notation !! Type !! Animated !! Comment&lt;br /&gt;
|- &lt;br /&gt;
| Origin ||&amp;lt;math&amp;gt; \textstyle O_j(t) &amp;lt;/math&amp;gt; || Vector (Real,Real) ||Yes|| Relative to the parent&lt;br /&gt;
|- &lt;br /&gt;
| Angle || &amp;lt;math&amp;gt; \textstyle \alpha_j(t) &amp;lt;/math&amp;gt; || Angle (DEG) ||Yes|| Relative to the parent&lt;br /&gt;
|- &lt;br /&gt;
| Length || &amp;lt;math&amp;gt; \textstyle l_j(t) &amp;lt;/math&amp;gt; || Real ||Yes|| Calculated, not animatable.&lt;br /&gt;
|- &lt;br /&gt;
| Scale || &amp;lt;math&amp;gt; \textstyle s_j(t) &amp;lt;/math&amp;gt; || Real ||Yes|| &amp;lt;math&amp;gt; \textstyle l_j(t) =l^0_j \cdot s_j(t) &amp;lt;/math&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Setup Origin || &amp;lt;math&amp;gt; \textstyle O^0_j(t) &amp;lt;/math&amp;gt; || Vector (Real,Real) ||Yes|| Relative to the parent&lt;br /&gt;
|- &lt;br /&gt;
| Setup Angle || &amp;lt;math&amp;gt; \textstyle \alpha^0_j(t) &amp;lt;/math&amp;gt; || Angle (DEG) ||Yes|| Relative to the parent&lt;br /&gt;
|- &lt;br /&gt;
| Setup Length || &amp;lt;math&amp;gt; \textstyle l^0_j &amp;lt;/math&amp;gt; || Real || No|| Constant, zero not allowed.&lt;br /&gt;
|- &lt;br /&gt;
| Setup Scale || &amp;lt;math&amp;gt; \textstyle s^0_j &amp;lt;/math&amp;gt; || Real || No|| &amp;lt;math&amp;gt; \textstyle s^0_j = 1 &amp;lt;/math&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Parent || &amp;lt;math&amp;gt; \textstyle PBone_j(t) &amp;lt;/math&amp;gt; || Bone ||Yes|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''POINT PARAMETERS'''&lt;br /&gt;
&lt;br /&gt;
{| &lt;br /&gt;
! Parameter !! Notation !! Type !! Animated !! Comment&lt;br /&gt;
|- &lt;br /&gt;
| Position ||&amp;lt;math&amp;gt; \textstyle V(t) &amp;lt;/math&amp;gt; || Vector (Real,Real) ||Yes|| Calculated: &amp;lt;math&amp;gt; \textstyle V(t) =VF(t) +  VS(t) \cdot M(t) &amp;lt;/math&amp;gt; Global coordinates&lt;br /&gt;
|- &lt;br /&gt;
| Setup Position ||&amp;lt;math&amp;gt; \textstyle VS(t) &amp;lt;/math&amp;gt; || Vector (Real, Real) ||Yes|| Absolute Coordinates&lt;br /&gt;
|- &lt;br /&gt;
| Bone Influence Matrix ||&amp;lt;math&amp;gt; \textstyle M(t) &amp;lt;/math&amp;gt; || Matrix (3x3) ||Yes|| Calculated. See formulas below&lt;br /&gt;
|- &lt;br /&gt;
| Bone Influence Id ||&amp;lt;math&amp;gt; \textstyle BoneID_i &amp;lt;/math&amp;gt; || Bone || No || 'i' is the index for all the Bones that influences on the Point&lt;br /&gt;
|- &lt;br /&gt;
| Influence weight ||&amp;lt;math&amp;gt; \textstyle w_i &amp;lt;/math&amp;gt; || Real || Yes || the weight associated to the BoneID_i&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(t) denotes ''calculated at the time t''&lt;br /&gt;
&lt;br /&gt;
=== Position of a Point due to Bones Influence ===&lt;br /&gt;
&lt;br /&gt;
According to the table, the final position of a point influenced by the bones is calculated based on two terms: A free movement of the point plus a bone drive movement. In this section we are going to calculate the second term.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \textstyle V(t) =VF(t) +  VS(t) \cdot M(t) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; M(t) = \cfrac{\sum_{i=1}^N M_i(t) \cdot w_i(t)}{\sum_{i=1}^N w_i(t)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; M_i(t)=B^0_i(t) \cdot B_i(t) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where i is a index that runs all the Bones Influence ID from i=1 to N (N= total number of bones that influence to the point)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; B^0_i(t)= \prod_{j=bone}^{j=root} C_j^0(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; B_i(t)= \prod_{j=root}^{j=bone} C_j(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where 'j' runs the bone skeleton jumping from a child/parent bone to a parent/child bone each time. The travel of the index 'j' from ''bone'' to ''root'' and from ''root'' to ''bone'' is fixed -and unique- by the nature of skeletons constructions (a bone, a parent), as mentioned before.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; C_j^0(t) = T(-O_j^0(t)) \cdot R(-\alpha_j^0(t)) \cdot S_x(\frac{1}{s^0_j})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This matrix calculates the position of the point in local coordinates in relation to the bone 'j' at setup position. Notice that &amp;lt;math&amp;gt; s^0_j &amp;lt;/math&amp;gt; is equal to &amp;lt;math&amp;gt; \textstyle 1 &amp;lt;/math&amp;gt; for any bone and for any time.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; C_j(t) = S_x(s_j(t))\cdot R(\alpha_j(t)) \cdot T(O_j(t)) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This matrix calculates the global position of the point due to the bone 'j' at animated position of the skeleton.&lt;br /&gt;
&lt;br /&gt;
=== Calculate the position and angle of a bone in a skeleton ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Position and Angle at Setup ====&lt;br /&gt;
&lt;br /&gt;
If the bones are described using relative coordinates to its predecessor, the position &amp;lt;math&amp;gt;\textstyle Q^0_j&amp;lt;/math&amp;gt; and the angle &amp;lt;math&amp;gt;\textstyle \beta^0_j&amp;lt;/math&amp;gt; of the bone 'j' in relation to the &amp;quot;master root bone&amp;quot; (ie. the global coordinate system) is given by those equations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Q^0_j(t) = O^0_j(t) \cdot B^0_j(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\beta^0_j(t) = \sum_{i=j}^{root} \alpha^0_i(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;B^0_j(t)=\prod_{i=parent}^{root} B^0_i(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where 'i' goes form the parent of the bone 'j' and climbs up by one parent each time until it reaches the 'root' bone of the skeleton.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;B^0_i(t)= T(-O^0_i(t)) \cdot R(-\alpha^0_i(t)) \cdot S_x(\frac{1}{s^0_j})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;B^0_i(t)&amp;lt;/math&amp;gt; is the inverse matrix transformation of the position of the bone relative to its immediate parent.&lt;br /&gt;
&lt;br /&gt;
Notice that at setup, &amp;lt;math&amp;gt;s^0_j&amp;lt;/math&amp;gt; is always equal to 1.&lt;br /&gt;
&lt;br /&gt;
====Animated Position and Angle ====&lt;br /&gt;
&lt;br /&gt;
Once calculated the position and angle of a bone in global coordinates you can calculate its animated position and angle by the transformation of their parents in the skeleton.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Q_j(t) = O^0_j(t) \cdot B^0_j(t) \cdot B_j(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\beta_j(t)= \beta^0_j(t) + \sum_{i=root}^{parent} \alpha_i(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;B_j(t)=\prod_{i=root}^{parent} B_i(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where 'i' goes form the root bone and jumps down by one child each time until it reaches the 'parent' bone of the bone 'j'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;B_i(t)= S_x(s_j(t)) \cdot R(\alpha_i(t)) \cdot T(O_i(t)) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\textstyle B_i(t)&amp;lt;/math&amp;gt; is the transformation matrix of the position of the bone 'j' at the time t. &lt;br /&gt;
&lt;br /&gt;
The results &amp;lt;math&amp;gt;\textstyle Q_j(t), \beta_j(t)&amp;lt;/math&amp;gt; are obtained in global coordinates.&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Dev:Bone_Layer&amp;diff=8214</id>
		<title>Dev:Bone Layer</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Dev:Bone_Layer&amp;diff=8214"/>
				<updated>2008-11-17T21:23:26Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: /* Can Points (Bone influenced) be moved independently? */ added some newlines&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Initial seed for concepts ==&lt;br /&gt;
&lt;br /&gt;
[http://dooglus.rincevent.net/synfig/logs/2008/%23synfig-2008-11-12.log This portion] of IRC logs sets the basis for the implementation of a Bone Layer. The interesting part is from 16:49 to 18:56.&lt;br /&gt;
&lt;br /&gt;
Also [http://dooglus.rincevent.net/synfig/logs/2008/%23synfig-2008-11-13.log this one] has some interesting thoughts. From 8:20 to 14:43&lt;br /&gt;
&lt;br /&gt;
== Concepts ==&lt;br /&gt;
This is a not sorted list of concepts what I would write to let me clarify my self and also allow others to understand the next sections.&lt;br /&gt;
&lt;br /&gt;
=== Bones intentions ===&lt;br /&gt;
Initial intention of Bones is attempt to emulate the skeleton of a vertebrate animal. In this way you have a skin and a skeleton. Skin is associated to the bones of the skeleton. When the skeleton moves the skin follows.&lt;br /&gt;
&lt;br /&gt;
=== Application of bones in animation ===&lt;br /&gt;
In traditional animation produce a walk cycle implies draw each keyframe for the walk and maybe, depending on the walking speed, draw the in betweens too. To avoid to draw the in between images there comes the tweening animation programs (like synfig) to help the animator. Then the animator just need to draw the keyframes and the application would do the rest. That's quite good but in certain situations you see your self redrawing the same pose (with small variations) frequently at different times. Then the bones comes to help. They allow to to the animator in the following manner.&lt;br /&gt;
&lt;br /&gt;
* With the manipulation of a single object (or a set of them) you can manage a lot of points of the drawing definition.&lt;br /&gt;
* Rotations of drawings using keyframes needs lots of them (by the nature that the tweening is defined in the x,y coordinates system and the rotation is performed in the angle, radius coordinate system). Using bones you can perform rotations of large angles with just two waypoints. As well as characters have limbs and limbs in living beings do mainly rotations, the usage of bones becomes handy in that kind of animations.&lt;br /&gt;
* Once the character (or whatever thing that uses bones) is rigged (the skeleton structure is created and the relationship between the skin and it is set) it is possible to produce different kind of keyframes for different purposes: Walk, run, jump, sit, ...&lt;br /&gt;
&lt;br /&gt;
== How can we do this in Synfig? ==&lt;br /&gt;
Before we research how to do that in synfig, first let's see how is it done in a abstract mode.&lt;br /&gt;
The relationship between the skeleton and the skin is in this way:&lt;br /&gt;
&lt;br /&gt;
The Skin is made by Points and blines. Blines are defined by Points. Points are made of Vertexes and Tangents&lt;br /&gt;
&lt;br /&gt;
Skeleton is made of bones and its relationship.&lt;br /&gt;
&lt;br /&gt;
''If Bones would have influence on the Vertexes and Tangents then the bones movements would move the points and therefore the skin would be moved''.&lt;br /&gt;
&lt;br /&gt;
That's the key, if we understand how does a bones has influence on a vertex and a tangent then we can find the way a skeleton can have influence over a skin.&lt;br /&gt;
&lt;br /&gt;
=== Features of bones ===&lt;br /&gt;
By my experience with bones in other 2D animation applications, watching its strong and weak points, the bones needs to have the following features:&lt;br /&gt;
&lt;br /&gt;
* A bone has a origin place where the rotation is performed.&lt;br /&gt;
* A bone has a length.&lt;br /&gt;
* A bone has an angle with the horizontal.&lt;br /&gt;
* A bone has a region of influence.&lt;br /&gt;
* A bone can have a parent bone and only one.&lt;br /&gt;
* A bone can have one (or more) child(ren) bone(s).&lt;br /&gt;
* A skeleton is defined as a connected set of bones (consisting of exactly one parentless bone and its children bones and their children...).&lt;br /&gt;
&lt;br /&gt;
All the bones on a synfig Document can produce several skeletons (depending on how many parent-less bones are in it).&lt;br /&gt;
&lt;br /&gt;
=== How does a Vertex move under the influence of a single Bone? ===&lt;br /&gt;
&lt;br /&gt;
Conceptually a bone has influence over a point doing [http://en.wikipedia.org/wiki/Affine_transformation affine transformation] of it position according to the bone values. See also [http://en.wikipedia.org/wiki/Transformation_matrix transformation matrix]. A bone produces rotation, scale and translation to a point in this way:&lt;br /&gt;
&lt;br /&gt;
[[Image:Bonesimulation.png]]&lt;br /&gt;
&lt;br /&gt;
As you can see the values that produces the movement of the point P to the point P' are given by:&lt;br /&gt;
&lt;br /&gt;
*Translation of the bone: O'-O&lt;br /&gt;
*Rotation of the bone: alpha'-alpha &lt;br /&gt;
*Scale of the bone: s=length'/length&lt;br /&gt;
&lt;br /&gt;
Then, given a Point P in the 2D space and known the translation, rotation and scale of the bone you can calculate the new point position P' using this formulation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
T(-O)=\begin{bmatrix}&lt;br /&gt;
1 &amp;amp; 0 &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 1 &amp;amp; 0 \\&lt;br /&gt;
-O_x &amp;amp; -O_y &amp;amp; 1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt; Translation to origin (0,0)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
R(-alpha)=\begin{bmatrix}&lt;br /&gt;
\cos(-alpha) &amp;amp; \sin(-alpha) &amp;amp; 0 \\&lt;br /&gt;
-\sin(-alpha) &amp;amp; \cos(-alpha) &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 0 &amp;amp; 1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt; Rotate an angle of amount '-alpha' around the origin. That aligns the bone with the X axis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
S(lenght'/lenght)=\begin{bmatrix}&lt;br /&gt;
length'/length &amp;amp; 0 &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 1 &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 0 &amp;amp; 1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt; Scale a value of 's=length'/length' in the direction of X (the current direction of the bone).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
R(alpha)=\begin{bmatrix}&lt;br /&gt;
\cos(alpha^') &amp;amp; \sin(alpha^') &amp;amp; 0 \\&lt;br /&gt;
-\sin(alpha^') &amp;amp; \cos(alpha^') &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 0 &amp;amp; 1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt; Rotate an angle of amount 'alpha'' around the origin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
V=\begin{bmatrix}&lt;br /&gt;
1 &amp;amp; 0 &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 1 &amp;amp; 0 \\&lt;br /&gt;
O^'_x &amp;amp; O^'_y &amp;amp; 1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt; Translation to new position O'&lt;br /&gt;
&lt;br /&gt;
Then the transformation from P to P' is give by the matrix multiplication:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; P'=P\cdot T(-O)\cdot R(-alpha) S_x(length'/lenght)\cdot R(alpha')\cdot T(O')&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===What happen if there are more than one bone affecting the point?===&lt;br /&gt;
&lt;br /&gt;
The first thing you can think when you deal with more than one bone making influence over the same point is to calculate the average of the sum of the influences of all bones. So if there are N bones affecting to the point then we can think on sum all the resulting points from each bone and then divide the result by N to not scale the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; B=\frac{\sum_{k=1}^N B_k}{N} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;B_k&amp;lt;/math&amp;gt; is the bone matrix for the bone ''k'' on the point P.&lt;br /&gt;
&lt;br /&gt;
That's fine but I would like to have more control to the way the bones affects to the points. When you move a bone it looks reasonable that not all the points are influence in the same way. This can be solved by using &amp;quot;weighted&amp;quot; average instead of a plain one. That means give more influence to one bone than others over the same point under similar geometrical position of the bones in relation to the point.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; B=\frac{\sum_{k=1}^N B_k \cdot w_k}{\sum_{k=1}^N w_k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;w_k&amp;lt;/math&amp;gt; is the weight for the bone ''k'' over the point P.&lt;br /&gt;
&lt;br /&gt;
The calculation of the weight ''w'' is calculated based on the distance ''d'' of the point P to the bone according to this diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:Strength.png]]&lt;br /&gt;
&lt;br /&gt;
Notice how the point P1 is located at same distance ''d'' to the bone than the point P2.&lt;br /&gt;
&lt;br /&gt;
There are possibles formulation to calculate w based on d values but some initial are these:&lt;br /&gt;
&lt;br /&gt;
* '''Point is Fixed Bind to the Bone''': Bone has always the same weight regardless the distance form the bone.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; w=1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Point Flexible Binded to the Bone''': that means that the bone has influence to the point always but it decreases exponentially to with the distance d². Here is a new parameter called ''s'' (strength). it can modify the weight function of the bone with the distance ''d''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; w=e^{-\frac{d^2}{s}} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:flexibind.png]]&lt;br /&gt;
&lt;br /&gt;
* '''Point Region-Linear Binded to the Bone''': that means that the bone has influence to the point only inside a certain region and it decreases linearly from w=1 when d=0 w=0 when d=s.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; w=1-\frac{d}{s} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:region-linear.png]]&lt;br /&gt;
&lt;br /&gt;
* '''Point Region-Parabolic Binded to the Bone''': that means that the bone has influence to the point only inside a certain region and it decreases parabolic from w=1 when d=0 w=0 when d=s.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; w=1-\frac{d^2}{s^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:region-parabolic.png]]&lt;br /&gt;
&lt;br /&gt;
=== Can Points (Bone influenced) be moved independently? ===&lt;br /&gt;
&lt;br /&gt;
Yes, they should be. If not the animator is tight to only do the animation with the bones animation what would end to some insoluble problems during the animation. Considered this, the point position result would come from the addition of two terms: the movement of the point as described by (a) the influence of the bone(s) + (b) the free movement of the point in the 2D space. In terms of the interface with the user, the second term of the mentioned above is just obtained in this way:&lt;br /&gt;
&lt;br /&gt;
1) In any position of the time line (bones are animated) the point P have a position given by the influence of the bones. Let's call P(B).&lt;br /&gt;
&lt;br /&gt;
2) The user wrap a point, drags it, placing it at P'.&lt;br /&gt;
&lt;br /&gt;
3) The final position of the point is P' but the user cannot modify the first term of what I mentioned above so the second term (b) becomes: P(animated)=P'-P(B).&lt;br /&gt;
&lt;br /&gt;
Cool! We know how to calculate the position of the &amp;quot;free movement of the point&amp;quot; knowing the final -user desired- position of the bone (P') and the calculated position of the point based on bone(s) movement. &lt;br /&gt;
&lt;br /&gt;
Rewinding to the concept introduced in the previous section (the amount of influence of each bone called ''w'') you can remember that it was calculated based on the &amp;quot;distance&amp;quot; (d) of the point from the bone and the &amp;quot;strength&amp;quot; (s) of the bone. See the graphics before. As you can see, there are some of the possible ''w'' definitions that has a value of w=0 for d&amp;gt;s. It means that the weight of that bone over this point is null and doesn't contribute to the movement of the point resulting of the influence of the bone(s). &lt;br /&gt;
&lt;br /&gt;
That possibility (w=0) triggers two questions:&lt;br /&gt;
&lt;br /&gt;
1) What happen if all the bones has the weight w=0 for a certain point?.&lt;br /&gt;
&lt;br /&gt;
2) If the point can move additionally to the bone movement influence, can the distance (d) to the bone produce that the weight (w) becomes w=0 and the point is out of influence from that bone? If the point goes out of all the bones influence regions it triggers the question 1). &lt;br /&gt;
&lt;br /&gt;
Answer to 2):&lt;br /&gt;
&lt;br /&gt;
We are assuming that the distance (d) from the point to the bone is calculated based on the current distance from the point to the bone. That's not necessarily true. We can have a kind of &amp;quot;static&amp;quot; point that defines the relative position of the point from the bone for the distance (d) calculation and then apply the weight to the bone(s) influence matrix regardless the current point position give by the sum of (a) + (b) (explained before).&lt;br /&gt;
&lt;br /&gt;
Let's call that relative position Q. That &amp;quot;static&amp;quot; position can be given in two ways: in coordinates relative to each bone (a &amp;lt;math&amp;gt; Q_i &amp;lt;/math&amp;gt; for each bone i) or a single absolute coordinate Q value for the point and the distances (d) for each bone is calculated based on an static set of bone positions (&amp;lt;math&amp;gt; B_s &amp;lt;/math&amp;gt;). In any case the weights (w) need some &amp;quot;static&amp;quot; values to get the information from. I type &amp;quot;static&amp;quot; and not static (without quotes) because I think that it can be an animatable value (but usually it isn't).&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Dev:Bone_Layer&amp;diff=8210</id>
		<title>Dev:Bone Layer</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Dev:Bone_Layer&amp;diff=8210"/>
				<updated>2008-11-16T22:41:36Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: /* Features of bones */ Definition of skeleton, I hope this is correct.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Initial seed for concepts ==&lt;br /&gt;
&lt;br /&gt;
[http://dooglus.rincevent.net/synfig/logs/2008/%23synfig-2008-11-12.log This portion] of IRC logs sets the basis for the implementation of a Bone Layer. The interesting part is from 16:49 to 18:56.&lt;br /&gt;
&lt;br /&gt;
Also [http://dooglus.rincevent.net/synfig/logs/2008/%23synfig-2008-11-13.log this one] has some interesting thoughts. From 8:20 to 14:43&lt;br /&gt;
&lt;br /&gt;
== Concepts ==&lt;br /&gt;
This is a not sorted list of concepts what I would write to let me clarify my self and also allow others to understand the next sections.&lt;br /&gt;
&lt;br /&gt;
=== Bones intentions ===&lt;br /&gt;
Initial intention of Bones is attempt to emulate the skeleton of a vertebrate animal. In this way you have a skin and a skeleton. Skin is associated to the bones of the skeleton. When the skeleton moves the skin follows.&lt;br /&gt;
&lt;br /&gt;
=== Application of bones in animation ===&lt;br /&gt;
In traditional animation produce a walk cycle implies draw each keyframe for the walk and maybe, depending on the walking speed, draw the in betweens too. To avoid to draw the in between images there comes the tweening animation programs (like synfig) to help the animator. Then the animator just need to draw the keyframes and the application would do the rest. That's quite good but in certain situations you see your self redrawing the same pose (with small variations) frequently at different times. Then the bones comes to help. They allow to to the animator in the following manner.&lt;br /&gt;
&lt;br /&gt;
* With the manipulation of a single object (or a set of them) you can manage a lot of points of the drawing definition.&lt;br /&gt;
* Rotations of drawings using keyframes needs lots of them (by the nature that the tweening is defined in the x,y coordinates system and the rotation is performed in the angle, radius coordinate system). Using bones you can perform rotations of large angles with just two waypoints. As well as characters have limbs and limbs in living beings do mainly rotations, the usage of bones becomes handy in that kind of animations.&lt;br /&gt;
* Once the character (or whatever thing that uses bones) is rigged (the skeleton structure is created and the relationship between the skin and it is set) it is possible to produce different kind of keyframes for different purposes: Walk, run, jump, sit, ...&lt;br /&gt;
&lt;br /&gt;
== How can we do this in synfig? ==&lt;br /&gt;
Before we research how to do that in synfig, first let's see how is it done in a abstract mode.&lt;br /&gt;
The relationship between the skeleton and the skin is in this way:&lt;br /&gt;
&lt;br /&gt;
The Skin is made by Points and blines. Blines are defined by Points. Points are made of Vertexes and Tangents&lt;br /&gt;
&lt;br /&gt;
Skeleton is made of bones and its relationship.&lt;br /&gt;
&lt;br /&gt;
''If Bones would have influence on the Vertexes and Tangents then the bones movements would move the points and therefore the skin would be moved''.&lt;br /&gt;
&lt;br /&gt;
That's the key, if we understand how does a bones has influence on a vertex and a tangent then we can find the way a skeleton can have influence over a skin.&lt;br /&gt;
&lt;br /&gt;
=== Features of bones ===&lt;br /&gt;
By my experience with bones in other 2D animation applications, watching its strong and weak points, the bones needs to have the following features:&lt;br /&gt;
&lt;br /&gt;
* A bone has a origin place where the rotation is performed.&lt;br /&gt;
* A bone has a length.&lt;br /&gt;
* A bone has an angle with the horizontal.&lt;br /&gt;
* A bone has a region of influence.&lt;br /&gt;
* A bone can have a parent bone and only one.&lt;br /&gt;
* A bone can have one (or more) child(ren) bone(s).&lt;br /&gt;
* A skeleton is defined as a connected set of bones (consisting of exactly one parentless bone and its children bones and their children...).&lt;br /&gt;
&lt;br /&gt;
All the bones on a synfig Document can produce several skeletons (depending on how many parent-less bones are in it).&lt;br /&gt;
&lt;br /&gt;
=== How does a Vertex move under the influence of a single Bone? ===&lt;br /&gt;
&lt;br /&gt;
Conceptually a bone has influence over a point doing [http://en.wikipedia.org/wiki/Affine_transformation affine transformation] of it position according to the bone values. See also [http://en.wikipedia.org/wiki/Transformation_matrix transformation matrix]. A bone produces rotation, scale and translation to a point in this way:&lt;br /&gt;
&lt;br /&gt;
[[Image:Bonesimulation.png]]&lt;br /&gt;
&lt;br /&gt;
As you can see the values that produces the movement of the point P to the point P' are given by:&lt;br /&gt;
&lt;br /&gt;
*Translation of the bone: O'-O&lt;br /&gt;
*Rotation of the bone: alpha'-alpha &lt;br /&gt;
*Scale of the bone: s=length'/length&lt;br /&gt;
&lt;br /&gt;
Then, given a Point P in the 2D space and known the translation, rotation and scale of the bone you can calculate the new point position P' using this formulation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
T(-O)=\begin{bmatrix}&lt;br /&gt;
1 &amp;amp; 0 &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 1 &amp;amp; 0 \\&lt;br /&gt;
-O_x &amp;amp; -O_y &amp;amp; 1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt; Translation to origin (0,0)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
R(-alpha)=\begin{bmatrix}&lt;br /&gt;
\cos(-alpha) &amp;amp; \sin(-alpha) &amp;amp; 0 \\&lt;br /&gt;
-\sin(-alpha) &amp;amp; \cos(-alpha) &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 0 &amp;amp; 1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt; Rotate an angle of amount '-alpha' around the origin. That aligns the bone with the X axis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
S(lenght'/lenght)=\begin{bmatrix}&lt;br /&gt;
length'/length &amp;amp; 0 &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 1 &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 0 &amp;amp; 1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt; Scale a value of 's=length'/length' in the direction of X (the current direction of the bone).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
R(alpha)=\begin{bmatrix}&lt;br /&gt;
\cos(alpha^') &amp;amp; \sin(alpha^') &amp;amp; 0 \\&lt;br /&gt;
-\sin(alpha^') &amp;amp; \cos(alpha^') &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 0 &amp;amp; 1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt; Rotate an angle of amount 'alpha'' around the origin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
V=\begin{bmatrix}&lt;br /&gt;
1 &amp;amp; 0 &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 1 &amp;amp; 0 \\&lt;br /&gt;
O^'_x &amp;amp; O^'_y &amp;amp; 1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
 &amp;lt;/math&amp;gt; Translation to new position O'&lt;br /&gt;
&lt;br /&gt;
Then the transformation from P to P' is give by the matrix multiplication:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; P'=P\cdot T(-O)\cdot R(-alpha) S_x(length'/lenght)\cdot R(alpha')\cdot T(O')&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===What happen if there are more than one bone affecting the point?===&lt;br /&gt;
&lt;br /&gt;
The first thing you can think when you deal with more than one bone making influence over the same point is to calculate the average of the sum of the influences of all bones. So if there are N bones affecting to the point then we can think on sum all the resulting points from each bone and then divide the result by N to not scale the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; B=\frac{\sum_{k=1}^N B_k}{N} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;B_k&amp;lt;/math&amp;gt; is the bone matrix for the bone ''k'' on the point P.&lt;br /&gt;
&lt;br /&gt;
That's fine but I would like to have more control to the way the bones affects to the points. When you move a bone it looks reasonable that not all the points are influence in the same way. This can be solved by using &amp;quot;weighted&amp;quot; average instead of a plain one. That means give more influence to one bone than others over the same point under similar geometrical position of the bones in relation to the point.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; B=\frac{\sum_{k=1}^N B_k \cdot w_k}{\sum_{k=1}^N w_k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;w_k&amp;lt;/math&amp;gt; is the weight for the bone ''k'' over the point P.&lt;br /&gt;
&lt;br /&gt;
The calculation of the weight ''w'' is calculated based on the distance ''d'' of the point P to the bone according to this diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:Strength.png]]&lt;br /&gt;
&lt;br /&gt;
Notice how the point P1 is located at same distance ''d'' to the bone than the point P2.&lt;br /&gt;
&lt;br /&gt;
There are possibles formulation to calculate w based on d values but some initial are these:&lt;br /&gt;
&lt;br /&gt;
* '''Point is Fixed Bind to the Bone''': Bone has always the same weight regardless the distance form the bone.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; w=1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Point Flexible Binded to the Bone''': that means that the bone has influence to the point always but it decreases exponentially to with the distance d². Here is a new parameter called ''s'' (strength). it can modify the weight function of the bone with the distance ''d''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; w=e^{-\frac{d^2}{s}} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:flexibind.png]]&lt;br /&gt;
&lt;br /&gt;
* '''Point Region-Linear Binded to the Bone''': that means that the bone has influence to the point only inside a certain region and it decreases linearly from w=1 when d=0 w=0 when d=s.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; w=1-\frac{d}{s} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:region-linear.png]]&lt;br /&gt;
&lt;br /&gt;
* '''Point Region-Parabolic Binded to the Bone''': that means that the bone has influence to the point only inside a certain region and it decreases parabolic from w=1 when d=0 w=0 when d=s.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; w=1-\frac{d^2}{s^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:region-parabolic.png]]&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Image_Dimensions&amp;diff=7809</id>
		<title>Image Dimensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Image_Dimensions&amp;diff=7809"/>
				<updated>2008-09-19T21:34:39Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: Added some speculative content for the next section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background-color:#DDFFDD; border:thin solid green; padding:1em&amp;quot;&amp;gt;&lt;br /&gt;
'''Disclaimer:''' This page's content is not official and not guaranteed to be free of mistakes.  At the moment, it's even only a sum of personal thoughts to cast a bit of light onto synfig's image dimensions handling.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Describing the fields of the Canvas Properties Dialog==&lt;br /&gt;
The user access the image dimensions in the [[Canvas Properties Dialog]].&lt;br /&gt;
===The 'Others' tab===&lt;br /&gt;
Here some properties can simply be locked (such that they can't be changed) and linked (so that changes in one entry simultaneously change other entries as well).&lt;br /&gt;
===The 'Image' tab===&lt;br /&gt;
Obviously here the image dimensions can be set.  There seem to be basically three groups of fields to edit:&lt;br /&gt;
;The on-screen size(?): The fields ''Width'' and ''Height'' tell synfigstudio how many pixels the image shall cover at a zoom level of 100%.&lt;br /&gt;
;The physical size: The physical width and height should tell how big the image is on some physical media.  That could be when printing out images on paper, or maybe even on transparencies or film.  Not all file formats can save this on exporting/rendering images.&lt;br /&gt;
;The mysterious ''Image Area'': Given as two points (upper-left and lower-right corner) which also define the image span (Pythagoras: &amp;lt;font style=&amp;quot;vertical-align:10%;font-size:8pt&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\scriptstyle\text{span}=\sqrt{\Delta  x^2 + \Delta y^2}&amp;lt;/math&amp;gt;&amp;lt;/font&amp;gt;).  The unit seems to be not pixels but ''unit''s, which are at [[Unit System|60 pixels each]].  If the ratio of the image size and image area dimensions are off, for example circles will appear as an ellipse (see image).  These settings seem to influence how large one ''Image Size'' pixel is being rendered.  This might be useful when one has to deal with non-square output pixels.&lt;br /&gt;
&lt;br /&gt;
==Effects of the Image Area==&lt;br /&gt;
[[image:Non_square_pixels.png|thumb|300px|Note the different scales at the rulers.  Although the image is clearly 400x300 pixels big on screen, the rulers say it is only 400x200, which is what the ''Image Area'' values say.]]&lt;br /&gt;
[[Image:Non_square.gif|frame|left|Note how the rectangle becomes a square and an elongated rectangle again as it rotates. Source:[[Image:Non square.sifz|Source file]] ]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Somehow the image area setting seems to be saved when copy&amp;amp;pasting between image, see also bug [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=2116947&amp;amp;group_id=144022&amp;amp;atid=757416 #2116947]. &lt;br /&gt;
&lt;br /&gt;
==Possible intended effects of out-of-ratio image areas==&lt;br /&gt;
As mentioned above, different ratios might be needed when then output needs to be specified in pixels, but those pixels are not squares.  That might happen for several kinds of media, such as videos encoded in some PAL formats or for dvds.  For further reading, look at [http://en.wikipedia.org/wiki/Pixel_aspect_ratio Wikipedia].&lt;br /&gt;
&lt;br /&gt;
Still, it is probably consensus that the image, as shown on screen while editing should look as closely as possible like when viewed by the final audience.  So, while specifying a different output resolution at ''rendering'' time may well be wanted, synfigstudio should (for the majority of monitors) show square pixels, i.e. circles should stay circles.&lt;br /&gt;
&lt;br /&gt;
==Feature wishlist to simplify working across documents==&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Image_Dimensions&amp;diff=7808</id>
		<title>Image Dimensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Image_Dimensions&amp;diff=7808"/>
				<updated>2008-09-18T12:23:49Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: Added new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background-color:#DDFFDD; border:thin solid green; padding:1em&amp;quot;&amp;gt;&lt;br /&gt;
'''Disclaimer:''' This page's content is not official and not guaranteed to be free of mistakes.  At the moment, it's even only a sum of personal thoughts to cast a bit of light onto synfig's image dimensions handling.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Describing the fields of the Canvas Properties Dialog==&lt;br /&gt;
The user access the image dimensions in the [[Canvas Properties Dialog]].&lt;br /&gt;
===The 'Others' tab===&lt;br /&gt;
Here some properties can simply be locked (such that they can't be changed) and linked (so that changes in one entry simultaneously change other entries as well).&lt;br /&gt;
===The 'Image' tab===&lt;br /&gt;
Obviously here the image dimensions can be set.  There seem to be basically three groups of fields to edit:&lt;br /&gt;
;The on-screen size(?): The fields ''Width'' and ''Height'' tell synfigstudio how many pixels the image shall cover at a zoom level of 100%.&lt;br /&gt;
;The physical size: The physical width and height should tell how big the image is on some physical media.  That could be when printing out images on paper, or maybe even on transparencies or film.  Not all file formats can save this on exporting/rendering images.&lt;br /&gt;
;The mysterious ''Image Area'': Given as two points (upper-left and lower-right corner) which also define the image span (Pythagoras: &amp;lt;font style=&amp;quot;vertical-align:10%;font-size:8pt&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\scriptstyle\text{span}=\sqrt{\Delta  x^2 + \Delta y^2}&amp;lt;/math&amp;gt;&amp;lt;/font&amp;gt;).  The unit seems to be not pixels but ''unit''s, which are at [[Unit System|60 pixels each]].  If the ratio of the image size and image area dimensions are off, for example circles will appear as an ellipse (see image).  These settings seem to influence how large one ''Image Size'' pixel is being rendered.  This might be useful when one has to deal with non-square output pixels.&lt;br /&gt;
&lt;br /&gt;
==Effects of the Image Area==&lt;br /&gt;
[[image:Non_square_pixels.png|thumb|300px|Note the different scales at the rulers.  Although the image is clearly 400x300 pixels big on screen, the rulers say it is only 400x200, which is what the ''Image Area'' values say.]]&lt;br /&gt;
[[Image:Non_square.gif|frame|left|Note how the rectangle becomes a square and an elongated rectangle again as it rotates. Source:[[Image:Non square.sifz|Source file]] ]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Image_Dimensions&amp;diff=7807</id>
		<title>Image Dimensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Image_Dimensions&amp;diff=7807"/>
				<updated>2008-09-18T12:21:40Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background-color:#DDFFDD; border:thin solid green; padding:1em&amp;quot;&amp;gt;&lt;br /&gt;
'''Disclaimer:''' This page's content is not official and not guaranteed to be free of mistakes.  At the moment, it's even only a sum of personal thoughts to cast a bit of light onto synfig's image dimensions handling.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Describing the fields of the Canvas Properties Dialog==&lt;br /&gt;
The user access the image dimensions in the [[Canvas Properties Dialog]].&lt;br /&gt;
===The 'Others' tab===&lt;br /&gt;
Here some properties can simply be locked (such that they can't be changed) and linked (so that changes in one entry simultaneously change other entries as well).&lt;br /&gt;
===The 'Image' tab===&lt;br /&gt;
Obviously here the image dimensions can be set.  There seem to be basically three groups of fields to edit:&lt;br /&gt;
;The on-screen size(?): The fields ''Width'' and ''Height'' tell synfigstudio how many pixels the image shall cover at a zoom level of 100%.&lt;br /&gt;
;The physical size: The physical width and height should tell how big the image is on some physical media.  That could be when printing out images on paper, or maybe even on transparencies or film.  Not all file formats can save this on exporting/rendering images.&lt;br /&gt;
;The mysterious ''Image Area'': Given as two points (upper-left and lower-right corner) which also define the image span (Pythagoras: &amp;lt;font style=&amp;quot;vertical-align:10%;font-size:8pt&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\scriptstyle\text{span}=\sqrt{\Delta  x^2 + \Delta y^2}&amp;lt;/math&amp;gt;&amp;lt;/font&amp;gt;).  The unit seems to be not pixels but ''unit''s, which are at [[Unit System|60 pixels each]].  If the ratio of the image size and image area dimensions are off, for example circles will appear as an ellipse (see image).  These settings seem to influence how large one ''Image Size'' pixel is being rendered.  This might be useful when one has to deal with non-square output pixels.&lt;br /&gt;
&lt;br /&gt;
[[image:Non_square_pixels.png|thumb|300px|Note the different scales at the rulers.  Although the image is clearly 400x300 pixels big on screen, the rulers say it is only 400x200, which is what the ''Image Area'' values say.]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Non_square.gif|frame|left|Note how the rectangle becomes a square and an elongated rectangle again as it rotates. Source:[[Image:Non square.sifz|Source file]] ]]&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=File:Non_square.gif&amp;diff=7806</id>
		<title>File:Non square.gif</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=File:Non_square.gif&amp;diff=7806"/>
				<updated>2008-09-18T12:14:41Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: A rotating rectangle, note how its side ratio changes.  See Image:Non_square.sifz for the source.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A rotating rectangle, note how its side ratio changes.  See [[Image:Non_square.sifz]] for the source.&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=File:Non_square.sifz&amp;diff=7805</id>
		<title>File:Non square.sifz</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=File:Non_square.sifz&amp;diff=7805"/>
				<updated>2008-09-18T12:12:54Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: A rotating rectangle, note how its side ratio changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A rotating rectangle, note how its side ratio changes&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Image_Dimensions&amp;diff=7804</id>
		<title>Image Dimensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Image_Dimensions&amp;diff=7804"/>
				<updated>2008-09-18T12:08:51Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: Added image&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background-color:#DDFFDD; border:thin solid green; padding:1em&amp;quot;&amp;gt;&lt;br /&gt;
'''Disclaimer:''' This page's content is not official and not guaranteed to be free of mistakes.  At the moment, it's even only a sum of personal thoughts to cast a bit of light onto synfig's image dimensions handling.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Describing the fields of the Canvas Properties Dialog==&lt;br /&gt;
The user access the image dimensions in the [[Canvas Properties Dialog]].&lt;br /&gt;
===The 'Others' tab===&lt;br /&gt;
Here some properties can simply be locked (such that they can't be changed) and linked (so that changes in one entry simultaneously change other entries as well).&lt;br /&gt;
===The 'Image' tab===&lt;br /&gt;
Obviously here the image dimensions can be set.  There seem to be basically three groups of fields to edit:&lt;br /&gt;
;The on-screen size(?): The fields ''Width'' and ''Height'' tell synfigstudio how many pixels the image shall cover at a zoom level of 100%.&lt;br /&gt;
;The physical size: The physical width and height should tell how big the image is on some physical media.  That could be when printing out images on paper, or maybe even on transparencies or film.  Not all file formats can save this on exporting/rendering images.&lt;br /&gt;
;The mysterious ''Image Area'': Given as two points (upper-left and lower-right corner) which also define the image span (Pythagoras: &amp;lt;font style=&amp;quot;vertical-align:10%;font-size:8pt&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\scriptstyle\text{span}=\sqrt{\Delta  x^2 + \Delta y^2}&amp;lt;/math&amp;gt;&amp;lt;/font&amp;gt;).  The unit seems to be not pixels but ''unit''s, which are at [[Unit System|60 pixels each]].  If the ratio of the image size and image area dimensions are off, for example circles will appear as an ellipse (see image).  These settings seem to influence how large one ''Image Size'' pixel is being rendered.  This might be useful when one has to deal with non-square output pixels.&lt;br /&gt;
&lt;br /&gt;
[[image:Non_square_pixels.png|thumb|300px|Note the different scales at the rulers.  Although the image is clearly 400x300 pixels big on screen, the rulers say it is only 400x200, which is what the ''Image Area'' values say.]]&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=File:Non_square_pixels.png&amp;diff=7803</id>
		<title>File:Non square pixels.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=File:Non_square_pixels.png&amp;diff=7803"/>
				<updated>2008-09-18T11:57:09Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: A showcase for when Image Size and Image Are don't have the same side ratio.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A showcase for when Image Size and Image Are don't have the same side ratio.&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Image_Dimensions&amp;diff=7802</id>
		<title>Image Dimensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Image_Dimensions&amp;diff=7802"/>
				<updated>2008-09-18T11:52:51Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background-color:#DDFFDD; border:thin solid green; padding:1em&amp;quot;&amp;gt;&lt;br /&gt;
'''Disclaimer:''' This page's content is not official and not guaranteed to be free of mistakes.  At the moment, it's even only a sum of personal thoughts to cast a bit of light onto synfig's image dimensions handling.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Describing the fields of the Canvas Properties Dialog==&lt;br /&gt;
The user access the image dimensions in the [[Canvas Properties Dialog]].&lt;br /&gt;
===The 'Others' tab===&lt;br /&gt;
Here some properties can simply be locked (such that they can't be changed) and linked (so that changes in one entry simultaneously change other entries as well).&lt;br /&gt;
===The 'Image' tab===&lt;br /&gt;
Obviously here the image dimensions can be set.  There seem to be basically three groups of fields to edit:&lt;br /&gt;
;The on-screen size(?): The fields ''Width'' and ''Height'' tell synfigstudio how many pixels the image shall cover at a zoom level of 100%.&lt;br /&gt;
;The physical size: The physical width and height should tell how big the image is on some physical media.  That could be when printing out images on paper, or maybe even on transparencies or film.  Not all file formats can save this on exporting/rendering images.&lt;br /&gt;
;The mysterious ''Image Area'': Given as two points (upper-left and lower-right corner) which also define the image span (Pythagoras: &amp;lt;font style=&amp;quot;vertical-align:10%;font-size:8pt&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\scriptstyle\text{span}=\sqrt{\Delta  x^2 + \Delta y^2}&amp;lt;/math&amp;gt;&amp;lt;/font&amp;gt;).  The unit seems to be not pixels but ''unit''s, which are at [[Unit System|60 pixels each]].&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Image_Dimensions&amp;diff=7801</id>
		<title>Image Dimensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Image_Dimensions&amp;diff=7801"/>
				<updated>2008-09-18T11:48:57Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: Added a bit of description of the properties dialog&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background-color:#DDFFDD; border:thin solid green; padding:1em&amp;quot;&amp;gt;&lt;br /&gt;
'''Disclaimer:''' This page's content is not official and not guaranteed to be free of mistakes.  At the moment, it's even only a sum of personal thoughts to cast a bit of light onto synfig's image dimensions handling.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Describing the fields of the Canvas Properties Dialog==&lt;br /&gt;
The user access the image dimensions in the [[Canvas Properties Dialog]].&lt;br /&gt;
===The 'Others' tab===&lt;br /&gt;
Here some properties can simply be locked (such that they can't be changed) and linked (so that changes in one entry simultaneously change other entries as well).&lt;br /&gt;
===The 'Image' tab===&lt;br /&gt;
Obviously here the image dimensions can be set.  There seem to be basically three groups of fields to edit:&lt;br /&gt;
;The on-screen size(?): The fields ''Width'' and ''Height'' tell synfigstudio how many pixels the image shall cover at a zoom level of 100%.&lt;br /&gt;
;The physical size: The physical width and height should tell how big the image is on some physical media.  That could be when printing out images on paper, or maybe even on transparencies or film.  Not all file formats can save this on exporting/rendering images.&lt;br /&gt;
;The mysterious ''Image Area'': Given as two points (upper-left and lower-right corner) which also define the image span (Pythagoras: &amp;lt;font style=&amp;quot;vertical-align:20%;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\text{span}=\sqrt{\Delta  x^2 + \Delta y^2}&amp;lt;/math&amp;gt;&amp;lt;/font&amp;gt;).  The unit seems to be not pixels but ''unit''s, which are at [[Unit System|60 pixels each]].&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Image_Dimensions&amp;diff=7800</id>
		<title>Image Dimensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Image_Dimensions&amp;diff=7800"/>
				<updated>2008-09-18T11:15:25Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: Created oage, added disclaimer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background-color:#DDFFDD; border:thin solid green; padding:1em&amp;quot;&amp;gt;&lt;br /&gt;
'''Disclaimer:''' This page's content is not official and not guaranteed to be free of mistakes.  At the moment, it's even only a sum of personal thoughts to cast a bit of light onto synfig's image dimensions handling.&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Talk:Image_Dimensions&amp;diff=7799</id>
		<title>Talk:Image Dimensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Talk:Image_Dimensions&amp;diff=7799"/>
				<updated>2008-09-18T11:08:26Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: New page: This page is totally unofficial so far, just a collection of thoughts.  Please help improve it so that its content may become a correct guideline for those lost in units, ppi, dpi and non-...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is totally unofficial so far, just a collection of thoughts.  Please help improve it so that its content may become a correct guideline for those lost in units, ppi, dpi and non-square pixels. --[[User:Rubikcube|Rubikcube]] 07:08, 18 September 2008 (EDT)&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Canvas_Properties_Dialog&amp;diff=7798</id>
		<title>Canvas Properties Dialog</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Canvas_Properties_Dialog&amp;diff=7798"/>
				<updated>2008-09-18T11:06:54Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: Added link to page on image dimensions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[[Category:Dialogs]]&lt;br /&gt;
&lt;br /&gt;
http://i170.photobucket.com/albums/u243/zenoscope/properties.png&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:80%&amp;quot;&amp;gt;This image needs to be updated&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This dialog is used to establish the properties of the current main canvas. This dialog is automatically shown when you first start a project or if the SYNFIG_ENABLE_NEW_CANVAS_EDIT_PROPERTIES [[Environment Variables|environment variable]] is defined. This dialog allows you to set the following parameters:&lt;br /&gt;
&lt;br /&gt;
#Canvas Info:&lt;br /&gt;
#* Name&lt;br /&gt;
#* Description&lt;br /&gt;
#Image Size:&lt;br /&gt;
#* Width&lt;br /&gt;
#* Height&lt;br /&gt;
#* X Resolution&lt;br /&gt;
#* Y Resolution&lt;br /&gt;
#* Physical Width&lt;br /&gt;
#* Physical Height&lt;br /&gt;
#Image Area:&lt;br /&gt;
#* Top Left (x,y)&lt;br /&gt;
#* Bottom right (x,y)&lt;br /&gt;
#Locks and Links:&lt;br /&gt;
#* Pixel Aspect&lt;br /&gt;
#* Pixel Width &lt;br /&gt;
#* Pixel Height&lt;br /&gt;
#* Image Aspect&lt;br /&gt;
#* Image Width&lt;br /&gt;
#* Image Height&lt;br /&gt;
#* Image Span&lt;br /&gt;
#Time Info:&lt;br /&gt;
#* Frames per second&lt;br /&gt;
#* Start Time (seconds)&lt;br /&gt;
#* End Time (seconds)&lt;br /&gt;
#Other:&lt;br /&gt;
#*Focus Point&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To change these parameters while working on a project, go to the [[Canvas_Menu_Caret|caret menu]], select '[[Edit Menu|edit]]' and then 'properties'. Alternatively use the [[Keyboard Shortcuts|keyboard shortcut]] F8.&lt;br /&gt;
&lt;br /&gt;
Since this dialog caused confusion, even among some very experienced people, here are some inofficial [[Image_Dimensions|thoughts]] about image dimensions.&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Talk:Canvas_Properties_Dialog&amp;diff=7797</id>
		<title>Talk:Canvas Properties Dialog</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Talk:Canvas_Properties_Dialog&amp;diff=7797"/>
				<updated>2008-09-17T22:43:20Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: Ask for help....&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page really needs some explanation :) --[[User:Rubikcube|Rubikcube]] 18:43, 17 September 2008 (EDT)&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Feather_Parameter&amp;diff=7752</id>
		<title>Feather Parameter</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Feather_Parameter&amp;diff=7752"/>
				<updated>2008-09-14T17:24:19Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: Added Category:Parameters&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[[Category:Parameters]]&lt;br /&gt;
==About the Feather Concept==&lt;br /&gt;
&lt;br /&gt;
Feather is a float value in points (or whatever unit you have defined in File &amp;gt; Setup &amp;gt; Misc &amp;gt; [[Unit System]]) that represents the width of the area that is going to be dissolved at the edge. Feather is the ''light horny waterproof structure forming the external covering of birds''. See [http://www.wordreference.com/definition/feather English Feather definition].&lt;br /&gt;
&lt;br /&gt;
The Feather parameter is an standard parameter for the following types of layers:&lt;br /&gt;
&lt;br /&gt;
* [[Outline Layer]]&lt;br /&gt;
* [[Region Layer]]&lt;br /&gt;
* [[Circle Layer]]&lt;br /&gt;
* [[Polygon Layer]]&lt;br /&gt;
* [[Star Layer]]&lt;br /&gt;
&lt;br /&gt;
Strangely [[Rectangle Layer]] doesn't have the Feather parameter.&lt;br /&gt;
&lt;br /&gt;
When you apply a Feather to any of those layers, then the edge of the shape becomes dissolved and spread out and shrunk the amount that the Feather value indicates.&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:Circle Feather zero.png]] || [[Image:Circle Feather 20.png]]&lt;br /&gt;
|-&lt;br /&gt;
|Circle with Feather set to 0 points|| |Circle with Feather set to 20 points&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Feather's Complementary Parameters ==&lt;br /&gt;
&lt;br /&gt;
There is another parameter that works together with the Feather parameter, and which specifies the type of feathering to be used. On Circle layers the parameter is called ''Fall Off'' and for the other featherable layers it is called ''Type of Feather''.&lt;br /&gt;
&lt;br /&gt;
=== Type of Feather===&lt;br /&gt;
This complementary parameter can be set in [[Outline Layer]], [[Region Layer]], [[Polygon Layer]] and [[Star Layer]]. All the example images below have the same amount of Feather (set to 20 points).&lt;br /&gt;
{|&lt;br /&gt;
| [[Image:Star Feather Fast Gaussian Blur.png]]&lt;br /&gt;
| [[Image:Star Feather Gaussian Blur.png]]&lt;br /&gt;
| [[Image:Star Feather Disc Blur.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Fast Gaussian Blur&lt;br /&gt;
| Gaussian Blur&lt;br /&gt;
| Disc Blur&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Star Feather Box Blur.png]]&lt;br /&gt;
| [[Image:Star Feather Cross-Hatch Blur.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Box Blur&lt;br /&gt;
| Cross-Hatch Blur&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Fall Off ===&lt;br /&gt;
That's the type of feather for the [[Circle Layer]]. All the example images below have the same amount of Feather (set to 20 points).&lt;br /&gt;
{|&lt;br /&gt;
| [[Image:Circle Feather 20.png]]&lt;br /&gt;
| [[Image:Circle Feather Square.png]]&lt;br /&gt;
| [[Image:Circle Feather Linear.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Square Root&lt;br /&gt;
| Square&lt;br /&gt;
| Linear&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Circle Feather Sigmond.png]]&lt;br /&gt;
| [[Image:Circle Feather Cosine.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Sigmond&lt;br /&gt;
| Cosine&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Winding_Style_Parameter&amp;diff=7753</id>
		<title>Winding Style Parameter</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Winding_Style_Parameter&amp;diff=7753"/>
				<updated>2008-09-14T17:24:19Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: Added Category:Parameters&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[[Category:Parameters]]&lt;br /&gt;
The Winding Style parameter is available in these layers:&lt;br /&gt;
* [[Outline Layer]]&lt;br /&gt;
* [[Region Layer]]&lt;br /&gt;
* [[Polygon Layer]]&lt;br /&gt;
* [[Star Layer]] (where it can be used to produce some [[Star_Layer#Winding_Style_Hacks|interesting effects]])&lt;br /&gt;
&lt;br /&gt;
It determines the way in which Synfig decides whether a point is 'inside' or 'outside' which coloring the layer in.&lt;br /&gt;
&lt;br /&gt;
The Winding Style parameter has two possible values:&lt;br /&gt;
* Non Zero&lt;br /&gt;
* Even/Odd&lt;br /&gt;
&lt;br /&gt;
The easiest way to see the distinction is to draw a region which contains a loop inside itself:&lt;br /&gt;
&lt;br /&gt;
[[Image:Goatse.png]] [[Media:Winding_style.sifz|source .sif file]]&lt;br /&gt;
&lt;br /&gt;
The top two images have their region winding styles set to &amp;quot;Non Zero&amp;quot; and the bottom two have their region winding styles set to &amp;quot;Even/Odd&amp;quot;.  &amp;quot;Even/Odd&amp;quot; makes the region see-through when it crosses itself.&lt;br /&gt;
&lt;br /&gt;
The left two images have their outline winding styles set to &amp;quot;Non Zero&amp;quot; and the right two have their outline winding styles set to &amp;quot;Even/Odd&amp;quot;.  &amp;quot;Even/Odd&amp;quot; makes the outline see-through when it crosses itself.&lt;br /&gt;
&lt;br /&gt;
http://dooglus.rincevent.net/synfig/regions.html has notes I made while investigating how region filling works, and describes the Winding Style parameter.&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Invert_Parameter&amp;diff=7751</id>
		<title>Invert Parameter</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Invert_Parameter&amp;diff=7751"/>
				<updated>2008-09-14T17:24:16Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: Added Category:Parameters&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[[Category:Parameters]]&lt;br /&gt;
Invert is a boolean property that applies to the following types of layer:&lt;br /&gt;
&lt;br /&gt;
* [[Region Layer]]&lt;br /&gt;
* [[Outline Layer]]&lt;br /&gt;
* [[Circle Layer]]&lt;br /&gt;
* [[Polygon Layer]]&lt;br /&gt;
* [[Rectangle Layer]]&lt;br /&gt;
* [[Star Layer]]&lt;br /&gt;
* [[Text Layer]]&lt;br /&gt;
&lt;br /&gt;
This parameter inverts the filling of the shape to the outside part of its contour when checked on. Its default value is checked off (shape looks as usual).&lt;br /&gt;
&lt;br /&gt;
A sample of Invert Parameter set to off:&lt;br /&gt;
&lt;br /&gt;
[[Image:Invert_Parameter_Off.png|Invert Parameter off]]&lt;br /&gt;
&lt;br /&gt;
A sample of Invert Parameter set to on:&lt;br /&gt;
&lt;br /&gt;
[[Image:Invert_Parameter_On.png|Invert Parameter on]]&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Time_Offset_Parameter&amp;diff=7750</id>
		<title>Time Offset Parameter</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Time_Offset_Parameter&amp;diff=7750"/>
				<updated>2008-09-14T17:19:21Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: Added Category:Parameters&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[[Category:Parameters]]&lt;br /&gt;
[[Image:Time_icon.png|64px]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Time Offset&amp;quot; parameter is a parameter of the [[Paste Canvas]] layer.  It brings the animation of the entire contents of the referenced layer forward by the given value.  Using negative values it is possible to delay the encapsulated layer, too.&lt;br /&gt;
&lt;br /&gt;
Note that the Time Offset Parameter applies to the contents of the Paste Canvas Layer, not to the layer itself.  So if the parameters of the Paste Canvas layer itself are animated, such as its [[Origin Parameter]], the Time Offset Parameter won't cause them to change.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Time Offset&amp;quot; can be animated, just like any other parameter, so it can be used in various non-obvious ways:&lt;br /&gt;
&lt;br /&gt;
 Those examples need to be fixed and revised!&lt;br /&gt;
&lt;br /&gt;
* ''Repeat'': Set the offset to 0s at 0s and to -10s at 10s, and the first 10 seconds of the encapsulated layer will play twice (at 0s through 10s, and 10 through 20s). At 20s it will continue to play as normal, but delayed by 10s.&lt;br /&gt;
* ''Fast Forward'': Set the offset to 0s at 0s and to 10s at 5s, and the first 10 seconds of the encapsulated layer will play at double speed (at 0s through 5s).  After 5s it will continue to play at normal speed. &lt;br /&gt;
* ''Reverse'': Set the offset to 10s at 0s, and to -10s at 10s, and the first 10 seconds of the encapsulated layer will play backwards.  After 10s, it will play forward, from the beginning.&lt;br /&gt;
&lt;br /&gt;
See [[Media:Time-offset-demo.sifz|Time-offset-demo.sifz]] for an example of each of the above.&lt;br /&gt;
&lt;br /&gt;
See [[Time_Loop_Layer#Contrived_Example|this example]] for another use of the Time Offset Parameter, exploring the [[Time Loop Layer]].&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Zoom_Parameter&amp;diff=7749</id>
		<title>Zoom Parameter</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Zoom_Parameter&amp;diff=7749"/>
				<updated>2008-09-14T17:18:53Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: Added Category:Parameters&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[[Category:Parameters]]&lt;br /&gt;
The Zoom Parameter in the [[Paste Canvas]] layer allows you do zoom in or out on the contents of the encapsulated layers.&lt;br /&gt;
&lt;br /&gt;
The default value of 0 is no zoom at all.  Positive values zoom in, and negative values zoom out.&lt;br /&gt;
&lt;br /&gt;
The zoom is exponential - each increase of 1 in the zoom parameter zooms in by a factor of [http://en.wikipedia.org/wiki/E_%28mathematical_constant%29 2.72], so a zoom of 2 will zoom in by a factor of 2.72 * 2.72 or around 7.4 times.  Zooming out is equally as severe.&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Group_Layer&amp;diff=7748</id>
		<title>Group Layer</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Group_Layer&amp;diff=7748"/>
				<updated>2008-09-14T17:18:20Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: Added Category:Parameters - it's not only about the parameter, but there's no separate page for it now&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[[Category:Parameters]]&lt;br /&gt;
[[Image:Pastecanvas_icon.png|64px]]&lt;br /&gt;
&lt;br /&gt;
The Paste Canvas layer is a special layer that can hold other layers. It is generated via the [[Encapsulate]] command accessed via the context menu in the [[Layers Panel]] or through the [[Layer Menu]] in the [[Canvas Menu Caret]].&lt;br /&gt;
&lt;br /&gt;
Paste Canvas layers can be created through the [[New Layer Menu]], using New Layer &amp;gt; Other &amp;gt; Paste Canvas.&lt;br /&gt;
&lt;br /&gt;
A Paste Canvas layer has the following parameters:&lt;br /&gt;
* [[Z Depth]]&lt;br /&gt;
* [[Amount Parameter|Amount]]&lt;br /&gt;
* [[Blend Method]]&lt;br /&gt;
* [[Origin Parameter|Origin]]&lt;br /&gt;
* [[Canvas]]: This is &amp;quot;Inline Canvas&amp;quot; by default if the Paste Canvas layer was created by encapsulating other layers, or &amp;quot;Pasted Canvas&amp;quot; if it was created from the [[New Layer Menu]]. This parameter lets you select another canvas.&lt;br /&gt;
* [[Zoom Parameter|Zoom]]&lt;br /&gt;
* [[Time Offset Parameter|Time Offset]]&lt;br /&gt;
* [[Children Lock]]&lt;br /&gt;
&lt;br /&gt;
== Canvas Parameter ==&lt;br /&gt;
[[Image:canvas_pointer_icon.png|64px]]&lt;br /&gt;
&lt;br /&gt;
The canvas parameter presents a drop-down menu of the exported canvases, plus an extra entry called &amp;quot;Other...&amp;quot;.  Selecting &amp;quot;Other...&amp;quot; presents the user with a text entry box asking for the name of the canvas to use.  The name typed should have the following format (where &amp;lt;nowiki&amp;gt;[ ]&amp;lt;/nowiki&amp;gt; indicates an optional part, ( ) is for grouping, and * means &amp;quot;0 or more times&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;  [[&amp;lt;/nowiki&amp;gt;''filename''&amp;lt;nowiki&amp;gt;]#][:]&amp;lt;/nowiki&amp;gt;''id''(:''id'')*&lt;br /&gt;
&lt;br /&gt;
In its simplest form, this is just an ''id'', ie. the exported name of one of the child canvases of the current canvas.&lt;br /&gt;
&lt;br /&gt;
Other possibilities are:&lt;br /&gt;
* if a '#' is present, the part before the '#' is interpreted as the filename of an external .sif file to use.&lt;br /&gt;
* if the '#' is the first character of the string (ie. the filename is blank) then the '#' is ignored, and the current canvas is used instead&lt;br /&gt;
* if a ':' appears before the first ''id'', it means to start at the root canvas of the current canvas&lt;br /&gt;
* each subsequent :id steps down into the specified child&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* '''/usr/share/doc/synfig/examples/business_card.sifz#:IndividualCard''' -- gives the absolute path to a .sifz file, and says to use the canvas that was exported from its root canvas as &amp;quot;IndividualCard&amp;quot;&lt;br /&gt;
* '''../../examples/business_card.sifz#:IndividualCard''' -- the same, but with a relative path to the .sifz file&lt;br /&gt;
* '''#:sy:head:eyes:left''' -- look in the current composition, and starting from the root, navigate down through the canvas tree.  Find a child canvas of the root canvas called 'sy', look in 'sy' for a child canvas called 'head', and so on.&lt;br /&gt;
* ''':sy:head:eyes:left''' -- exactly as above.  an empty filename is the same as not using the '#' at all&lt;br /&gt;
* '''eyes:left''' -- without a ':' before the first ''id'', this starts at the current canvas (presumably the PasteCanvas in question is in the &amp;quot;head&amp;quot; subcanvas of the &amp;quot;sy&amp;quot; subcanvas of the root)&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Origin_Parameter&amp;diff=7747</id>
		<title>Origin Parameter</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Origin_Parameter&amp;diff=7747"/>
				<updated>2008-09-14T17:17:18Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: Added Category:Parameters&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[[Category:Parameters]]&lt;br /&gt;
The Origin Parameter is on the [[Paste Canvas]] layer.  It is used to translate the entire canvas referenced by the Paste Canvas layer.&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Amount_Parameter&amp;diff=7745</id>
		<title>Amount Parameter</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Amount_Parameter&amp;diff=7745"/>
				<updated>2008-09-14T15:15:34Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[[Category:Parameters]]&lt;br /&gt;
This parameter controls the layer visibility (it is more like an alpha value). Ex. 0 means the layer is invisible, and 1 means the layer is visible.&lt;br /&gt;
&lt;br /&gt;
See also this [[Tips#Show_or_hide_a_layer.2C_or_fade_the_effect_of_a_blur.3F|Tip]].&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Blend_Method_Parameter&amp;diff=7744</id>
		<title>Blend Method Parameter</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Blend_Method_Parameter&amp;diff=7744"/>
				<updated>2008-09-14T15:14:22Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: Added Category:Parameters&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[[Category:Parameters]]&lt;br /&gt;
The various compositing methods available for Layers in Synfig. (''What compositing/blending is.'')&lt;br /&gt;
&lt;br /&gt;
If the following descriptions, 'A' refers to the color on the layer with the blend method setting, and 'B' refers to the color on the layers beneath it.  Note that in almost all layers, the alpha channel of the colors will have a scaling effect on the blending.  The 'amount' parameter will also have a scaling effect.  In most descriptions these 2 details have been glossed over.&lt;br /&gt;
&lt;br /&gt;
In the examples that follow a gradient ranging from black to white to transparent (A) is blended on the layer above an [[Paste Canvas|inline canvas]] of Tux on a transparent background (B).&lt;br /&gt;
&lt;br /&gt;
A) http://home.comcast.net/~pxegeek/synfig/straight.png &amp;amp; B) http://home.comcast.net/~pxegeek/synfig/synfigtux.png &lt;br /&gt;
 &lt;br /&gt;
The currently available blend methods are:&lt;br /&gt;
&lt;br /&gt;
==Composite==&lt;br /&gt;
&lt;br /&gt;
This blend method is the default option, it simply displays the content of the layer. This blend mode is similar the layer blend mode '''Normal Mode''' often found in 2D programs.&lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/straight.png + http://home.comcast.net/~pxegeek/synfig/synfigtux.png = http://home.comcast.net/~pxegeek/synfig/composite.png&lt;br /&gt;
&lt;br /&gt;
==Straight==&lt;br /&gt;
&lt;br /&gt;
This blend method looks similar to the previous one, except that the objects under a ''straight''-object will be invisible. So if there is a more or less transparent object on the ''Straight mode'' layer, the objects on the layers underneath won't show through it.&lt;br /&gt;
&lt;br /&gt;
More precisely, the resulting color is &amp;quot;(A-B)*amount + B&amp;quot;.  So if amount is 1 the result is A and if amount is 0 the result is B.  In particular, if amount is 1 and A is a very transparent color, the resulting color will also be A; despite the fact that A is very transparent, none of B's color is used.&lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/straight.png + http://home.comcast.net/~pxegeek/synfig/synfigtux.png = http://home.comcast.net/~pxegeek/synfig/straight.png&lt;br /&gt;
&lt;br /&gt;
==Onto==&lt;br /&gt;
&lt;br /&gt;
If a layer is set to the ''Onto'' blend method, only the parts of the layer that are over a not transparent area will be visible.&lt;br /&gt;
&lt;br /&gt;
Precisely:  this is the same as the Composite blend method except that the transparency of the resulting color is set to be the same as the transparency level of layer B.&lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/straight.png + http://home.comcast.net/~pxegeek/synfig/synfigtux.png = http://home.comcast.net/~pxegeek/synfig/onto.png&lt;br /&gt;
&lt;br /&gt;
==Straight Onto==&lt;br /&gt;
This method is a combination of the two methods above. E.g. if an half-transparent object is set to ''Straight Onto'', it will only be visible over a non-transparent area, and the non-transparent part under that object won't be visible.&lt;br /&gt;
&lt;br /&gt;
Precisely: the resulting color is &amp;quot;(X-B)*amount + B&amp;quot; where X is A but with its transparency set to A's transparency times B's transparency.&lt;br /&gt;
&lt;br /&gt;
So if amount is 1 the result is A, but with its transparency multiplied by that of B, and if amount is 0 the result is B. In particular, if amount is 1 and A is a very transparent color, the resulting color will be a possibly more transparent version of A; despite the fact that A is very transparent, none of B's color is used in the result.&lt;br /&gt;
&lt;br /&gt;
(Yuck.  Are these 'precisely' comments useful?)[Yes!]&lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/straight.png + http://home.comcast.net/~pxegeek/synfig/synfigtux.png = http://home.comcast.net/~pxegeek/synfig/straightonto.png&lt;br /&gt;
&lt;br /&gt;
==Behind==&lt;br /&gt;
&lt;br /&gt;
This blend method makes the layer visible over transparent areas, and invisible over non-transparent areas, giving the impression that the layer is behind the other layers. It is often used for the &amp;quot;Shade&amp;quot; effect layer, to make a drop-shadow effect.&lt;br /&gt;
&lt;br /&gt;
Precisely: this is the same as the composite blend method, but with A and B swapped.  B is composited onto A instead of A being composited onto B.&lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/straight.png + http://home.comcast.net/~pxegeek/synfig/synfigtux.png = http://home.comcast.net/~pxegeek/synfig/behind.png&lt;br /&gt;
&lt;br /&gt;
==Screen==&lt;br /&gt;
&lt;br /&gt;
This blend method is similar to the '''Screen Mode''' often found in 2D programs. It combines the colors of the ''screen mode layer'' and the ones behind it, and gives a lighter result in general.&lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/straight.png + http://home.comcast.net/~pxegeek/synfig/synfigtux.png = http://home.comcast.net/~pxegeek/synfig/screen.png&lt;br /&gt;
&lt;br /&gt;
==Overlay==&lt;br /&gt;
This is similar to '''PhotoShop''' - layer blend mode '''Overlay Mode'''&lt;br /&gt;
&lt;br /&gt;
Precisely: define 3 new colours: RM = A * B; RS = 1-(1-A)*(1-B); RET = A*RS + (1-A)*RM then blend RET onto B as in the Onto method above(!)&lt;br /&gt;
&lt;br /&gt;
Any idea what that is aiming to do?  Or what the layer does in this '''PhotoShop''' program?&lt;br /&gt;
This appears to emulate the effect of a cross-fade between the two layers if they are set to equal amounts - i.e like 'add', but maintaining the overall brightness of the image&lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/straight.png + http://home.comcast.net/~pxegeek/synfig/synfigtux.png = http://home.comcast.net/~pxegeek/synfig/overlay.png&lt;br /&gt;
&lt;br /&gt;
==Hard Light==&lt;br /&gt;
&lt;br /&gt;
This is similar to '''PhotoShop''' - layer blend mode '''Hard Light Mode'''&lt;br /&gt;
&lt;br /&gt;
For each of red, green and blue, if the component is in the top half of its range then calculate X=1-(1-(2A-1))*(1-B), otherwise calculate X=2AB, then blend X onto B as in the Onto method above.&lt;br /&gt;
&lt;br /&gt;
Is this aiming to make bright colours brighter and dark colours darker?&lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/straight.png + http://home.comcast.net/~pxegeek/synfig/synfigtux.png = http://home.comcast.net/~pxegeek/synfig/hardlight.png&lt;br /&gt;
&lt;br /&gt;
==Multiply==&lt;br /&gt;
This is similar to '''PhotoShop''' - layer blend mode '''Multiply Mode'''&lt;br /&gt;
&lt;br /&gt;
Precisely: the resulting colour is (((A*B)-B)*amount+B). The calculation is performed independently on red, green, and blue components.  When amount is 0, this simplifies to B.  When amount is 1 it simplifies to A*B.&lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/straight.png + http://home.comcast.net/~pxegeek/synfig/synfigtux.png = http://home.comcast.net/~pxegeek/synfig/multiply.png&lt;br /&gt;
&lt;br /&gt;
==Divide==&lt;br /&gt;
&lt;br /&gt;
''Describe me''&lt;br /&gt;
&lt;br /&gt;
Precisely: the resulting color is (((B/A)-B)*amount)+B.&lt;br /&gt;
&lt;br /&gt;
When amount is 0, this becomes simply B.&lt;br /&gt;
&lt;br /&gt;
When amount is 1, this becomes B/A.&lt;br /&gt;
&lt;br /&gt;
A very small quantity is added to A before dividing by it to avoid a divide-by-zero condition.  This causes the divide blend method to bias toward positive values, but the effect is really negligible.&lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/straight.png + http://home.comcast.net/~pxegeek/synfig/synfigtux.png = http://home.comcast.net/~pxegeek/synfig/divide.png&lt;br /&gt;
&lt;br /&gt;
==Add==&lt;br /&gt;
&lt;br /&gt;
''Describe me''&lt;br /&gt;
&lt;br /&gt;
Precisely: the resulting color is (B + A*A.alpha*amount). The calculation is performed independently on red, green, and blue components.  The resulting color's alpha is B.alpha.&lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/straight.png + http://home.comcast.net/~pxegeek/synfig/synfigtux.png = http://home.comcast.net/~pxegeek/synfig/add.png&lt;br /&gt;
&lt;br /&gt;
==Subtract==&lt;br /&gt;
&lt;br /&gt;
''Describe me''&lt;br /&gt;
&lt;br /&gt;
Precisely: the resulting colour is (B-A).  The calculation is performed independently on red, green, and blue components.&lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/straight.png + http://home.comcast.net/~pxegeek/synfig/synfigtux.png = http://home.comcast.net/~pxegeek/synfig/subtract.png&lt;br /&gt;
&lt;br /&gt;
==Difference==&lt;br /&gt;
&lt;br /&gt;
''Describe me''&lt;br /&gt;
&lt;br /&gt;
Precisely: the resulting colour is the absolute value of (B-A).  The calculation is performed independently on red, green, and blue components.&lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/straight.png + http://home.comcast.net/~pxegeek/synfig/synfigtux.png = http://home.comcast.net/~pxegeek/synfig/difference.png&lt;br /&gt;
&lt;br /&gt;
==Brighten==&lt;br /&gt;
&lt;br /&gt;
''Describe me''&lt;br /&gt;
&lt;br /&gt;
Precisely: for each of the red, green, and blue components, compare A's value with B's value and use the higher of the pair.&lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/straight.png + http://home.comcast.net/~pxegeek/synfig/synfigtux.png = http://home.comcast.net/~pxegeek/synfig/brighten.png&lt;br /&gt;
&lt;br /&gt;
==Darken==&lt;br /&gt;
&lt;br /&gt;
''Describe me''&lt;br /&gt;
&lt;br /&gt;
Precisely: for each of the red, green, and blue components, compare A's value with B's value and use the lower of the pair.&lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/straight.png + http://home.comcast.net/~pxegeek/synfig/synfigtux.png = http://home.comcast.net/~pxegeek/synfig/darken.png&lt;br /&gt;
&lt;br /&gt;
==Color==&lt;br /&gt;
&lt;br /&gt;
''Describe me''&lt;br /&gt;
&lt;br /&gt;
Precisely: the resulting colour is obtained by adjusting B to have the same U and V values as A, while keeping Y the same.&lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/straight.png + http://home.comcast.net/~pxegeek/synfig/synfigtux.png = http://home.comcast.net/~pxegeek/synfig/color.png&lt;br /&gt;
&lt;br /&gt;
As this example looks just like the saturation one, perhaps a yellow gradient instead of a white one would be more illustrative&lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/yellowgradient.png + http://home.comcast.net/~pxegeek/synfig/synfigtux.png =&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/coloryg.png&lt;br /&gt;
&lt;br /&gt;
==Hue==&lt;br /&gt;
&lt;br /&gt;
''Describe me''&lt;br /&gt;
&lt;br /&gt;
Precisely: the resulting colour is obtained by adjusting B to have the same hue as A.&lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/straight.png + http://home.comcast.net/~pxegeek/synfig/synfigtux.png = http://home.comcast.net/~pxegeek/synfig/hue.png&lt;br /&gt;
&lt;br /&gt;
==Saturation==&lt;br /&gt;
&lt;br /&gt;
''Describe me''&lt;br /&gt;
&lt;br /&gt;
Precisely: the resulting colour is obtained by adjusting B to have the same saturation as A.  Saturation is the magnitude of the [http://en.wikipedia.org/wiki/YUV UV vector].&lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/straight.png + http://home.comcast.net/~pxegeek/synfig/synfigtux.png = http://home.comcast.net/~pxegeek/synfig/saturation.png&lt;br /&gt;
&lt;br /&gt;
As this example is so similar to the 'Color' blend example, here it is with a yellow gradient - &lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/yellowgradient.png +&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/synfigtux.png =&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/saturationyg.png&lt;br /&gt;
&lt;br /&gt;
==Luminance==&lt;br /&gt;
&lt;br /&gt;
''Describe me''&lt;br /&gt;
&lt;br /&gt;
Precisely: the resulting colour is obtained by adjusting B to have the same Y (luma) value as A, while keeping U and V the same.&lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/straight.png + http://home.comcast.net/~pxegeek/synfig/synfigtux.png = http://home.comcast.net/~pxegeek/synfig/luminance.png&lt;br /&gt;
&lt;br /&gt;
==Alpha over==&lt;br /&gt;
&lt;br /&gt;
''Describe me''&lt;br /&gt;
&lt;br /&gt;
http://home.comcast.net/~pxegeek/synfig/straight.png + http://home.comcast.net/~pxegeek/synfig/synfigtux.png = http://home.comcast.net/~pxegeek/synfig/alphaover.png&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Amount_Parameter&amp;diff=7743</id>
		<title>Amount Parameter</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Amount_Parameter&amp;diff=7743"/>
				<updated>2008-09-14T15:14:06Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: Added Category:Parameters&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[[Category:Parameters]]&lt;br /&gt;
This parameter controls the layer visibility (it is more like an alpha value). Ex. 0 means the layer is invisible, and 1 means the layer is visible.&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Z_Depth_Parameter&amp;diff=7742</id>
		<title>Z Depth Parameter</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Z_Depth_Parameter&amp;diff=7742"/>
				<updated>2008-09-14T15:13:44Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[[Category:Parameters]]&lt;br /&gt;
This parameter can be used to change the 'depth' of a layer in the layer stack.  By default, each canvas gives its layers zdepths which depend on their order in the canvas.  The first layer has a depth of 0, the 2nd has a depth of 1, and so on.&lt;br /&gt;
&lt;br /&gt;
Zdepth may be thought of as an indication of the distance to an observer: layers with a lower zdepth are 'nearer' to an observer than layers with a higher zdepth.&lt;br /&gt;
&lt;br /&gt;
The Z Depth parameter on each layer can be used to adjust this default depth.  The value of the Z Depth parameter is added to the layer's 'natural' depth, given by its order in its canvas.&lt;br /&gt;
&lt;br /&gt;
For example, suppose we have 2 layers, first a circle, and then a rectangle.  The circle will have a 'natural' depth of 0, and the rectangle's will be 1, so the circle will be drawn on top of the rectangle.&lt;br /&gt;
&lt;br /&gt;
If we use the params dialog to set the rectangle's zdepth to -2, however, -2 will be added to its natural depth of 1, giving a new depth of -1, and so it will be drawn above the circle.&lt;br /&gt;
&lt;br /&gt;
The parameter can be animated, so that layers change order throughout the animation.&lt;br /&gt;
&lt;br /&gt;
Here's an example which shows the Z Depth parameter being animated to bring one circle in front of another at a certain point in time:  &lt;br /&gt;
&lt;br /&gt;
[[Image:Offset-z-depth-revisited.gif]]&lt;br /&gt;
[[Media:Offset-z-depth-revisited.sifz|source sif file]]&lt;br /&gt;
&lt;br /&gt;
== Too Much Detail ==&lt;br /&gt;
&lt;br /&gt;
If you want to see a more complex Z depth order animation and an explanation to how it was done please watch this animation and this PDF file.&lt;br /&gt;
&lt;br /&gt;
Animation: http://www.youtube.com/watch?v=YTpSfUthuVE&lt;br /&gt;
&lt;br /&gt;
Explanatory PDF file: http://www.darthfurby.com/genete/synfig/Balls.pdf&lt;br /&gt;
&lt;br /&gt;
Same file but ODT format: http://www.darthfurby.com/genete/synfig/Ballsv2.odt&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Z_Depth_Parameter&amp;diff=7741</id>
		<title>Z Depth Parameter</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Z_Depth_Parameter&amp;diff=7741"/>
				<updated>2008-09-14T15:13:18Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: Added Category:Parameters&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[Category:Parameters]]&lt;br /&gt;
This parameter can be used to change the 'depth' of a layer in the layer stack.  By default, each canvas gives its layers zdepths which depend on their order in the canvas.  The first layer has a depth of 0, the 2nd has a depth of 1, and so on.&lt;br /&gt;
&lt;br /&gt;
Zdepth may be thought of as an indication of the distance to an observer: layers with a lower zdepth are 'nearer' to an observer than layers with a higher zdepth.&lt;br /&gt;
&lt;br /&gt;
The Z Depth parameter on each layer can be used to adjust this default depth.  The value of the Z Depth parameter is added to the layer's 'natural' depth, given by its order in its canvas.&lt;br /&gt;
&lt;br /&gt;
For example, suppose we have 2 layers, first a circle, and then a rectangle.  The circle will have a 'natural' depth of 0, and the rectangle's will be 1, so the circle will be drawn on top of the rectangle.&lt;br /&gt;
&lt;br /&gt;
If we use the params dialog to set the rectangle's zdepth to -2, however, -2 will be added to its natural depth of 1, giving a new depth of -1, and so it will be drawn above the circle.&lt;br /&gt;
&lt;br /&gt;
The parameter can be animated, so that layers change order throughout the animation.&lt;br /&gt;
&lt;br /&gt;
Here's an example which shows the Z Depth parameter being animated to bring one circle in front of another at a certain point in time:  &lt;br /&gt;
&lt;br /&gt;
[[Image:Offset-z-depth-revisited.gif]]&lt;br /&gt;
[[Media:Offset-z-depth-revisited.sifz|source sif file]]&lt;br /&gt;
&lt;br /&gt;
== Too Much Detail ==&lt;br /&gt;
&lt;br /&gt;
If you want to see a more complex Z depth order animation and an explanation to how it was done please watch this animation and this PDF file.&lt;br /&gt;
&lt;br /&gt;
Animation: http://www.youtube.com/watch?v=YTpSfUthuVE&lt;br /&gt;
&lt;br /&gt;
Explanatory PDF file: http://www.darthfurby.com/genete/synfig/Balls.pdf&lt;br /&gt;
&lt;br /&gt;
Same file but ODT format: http://www.darthfurby.com/genete/synfig/Ballsv2.odt&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Params_Panel&amp;diff=7740</id>
		<title>Params Panel</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Params_Panel&amp;diff=7740"/>
				<updated>2008-09-14T15:10:59Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[[Category:Panels]][[Category:Parameters]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Params Dialog is in many ways the heart of the Synfig interface. This is where all the parameters of the layers you create are edited, and in some less obvious ways,&lt;br /&gt;
&lt;br /&gt;
The layout of the Params Dialog is quite simple - it is simply a two column list&lt;br /&gt;
&lt;br /&gt;
http://i170.photobucket.com/albums/u243/zenoscope/params-region.png&lt;br /&gt;
&lt;br /&gt;
The first column, named 'Name', is simply an expandable tree listing of the parameters of the selected layer. Most layers do not have many nested parameters, with the exception of the Vertex List on most [[Geometry Layer Category|Geometry layers]].&lt;br /&gt;
&lt;br /&gt;
The second column, 'Value', is where the data for each of the parameters are listed. Several different types of data can be shown here.&lt;br /&gt;
&lt;br /&gt;
==Params and Layers==&lt;br /&gt;
&lt;br /&gt;
An interesting feature of the Params Dialog is that - when you select two or more layers in the [[Layers Panel]], the Params Dialog will only show the parameters that are *shared* between the layers. When the dialog is in this state, context-clicking on the parameters will allow parameters to be linked between the two layers.&lt;br /&gt;
''(write more)''&lt;br /&gt;
&lt;br /&gt;
==Default Params==&lt;br /&gt;
&lt;br /&gt;
There are three params that are shared between nearly every layer:&lt;br /&gt;
&lt;br /&gt;
* [[Z Depth Parameter|Z Depth]]&lt;br /&gt;
* [[Amount Parameter|Amount]]&lt;br /&gt;
* [[Blend Method]]&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Category:Parameters&amp;diff=7739</id>
		<title>Category:Parameters</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Category:Parameters&amp;diff=7739"/>
				<updated>2008-09-14T15:10:10Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: New page: These are (some of) the Parameters that can be found in the Params Panel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are (some of) the Parameters that can be found in the [[Params Panel]]&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Lock_Selection&amp;diff=7738</id>
		<title>Lock Selection</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Lock_Selection&amp;diff=7738"/>
				<updated>2008-09-14T15:07:08Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: Added new Category: Parameters (hope this works)?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[[Category:Parameters]]&lt;br /&gt;
The &amp;quot;Children Lock&amp;quot; parameter is a boolean value, present in all [[Paste Canvas]] layers.  These are the layers that are created when you encapsulate a group of layers.&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Children Lock&amp;quot; parameter is turned on, then:&lt;br /&gt;
&lt;br /&gt;
* If you click on an encapsulated layer in the workarea window, the Paste Canvas layer will be selected, rather than the layer you clicked on.  For example, you draw an outline, and then encapsulate it.  By default the children lock is off, and clicking on your outline in the workarea will select the outline layer.  With children lock on, the encapsulation layer will be selected instead.&lt;br /&gt;
&lt;br /&gt;
* Right-clicking on an encapsulation layer offers a context menu entry to 'Select All Child Layers', which recursively selects all the layers under the current layer.  If the children lock is engaged for any encapsulation layer in the hierarchy, it stops the layers inside that encapsulation layer from being selected by this operation.&lt;br /&gt;
&lt;br /&gt;
* Hitting control-a to select [http://youtube.com/watch?v=TAedji_Xcg0 all the ducks] in the currently selected layers will select the position ducks of child-locked encapsulation layers, whereas it won't when their children locks are off.&lt;br /&gt;
&lt;br /&gt;
The effect of these three behaviors is for an encapsulation layer to act as if it was a primitive layer, hiding the details of its contents from selection or manipulation.&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Doc:Reuse_Animations&amp;diff=7735</id>
		<title>Doc:Reuse Animations</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Doc:Reuse_Animations&amp;diff=7735"/>
				<updated>2008-09-12T23:02:26Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: /* Exporting the Canvas Parameter */ one wrd too much left&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
[[Reuse Animations|English (en)]] | [[Reuse Animations.es|Español (es)]]&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
One of the goals of all animators (especially the lazy ones like me) is to have the opportunity to reuse pieces of animation. It allows you to save a lot of time if you can insert some portions of animations already recorded into any other position in time.&lt;br /&gt;
&lt;br /&gt;
This is especially useful for making characters speak because you have to move your character's mouth to repeated positions depending on the phonemes it describes while speaking.&lt;br /&gt;
&lt;br /&gt;
This can be done easily just using a combination of [[Keyframe|keyframes]] and exported canvases.&lt;br /&gt;
&lt;br /&gt;
== Keyframes ==&lt;br /&gt;
&lt;br /&gt;
Our goal is to record some sort of animation and reuse it later. This can be done using keyframes. If you create some keyframes at the beginning of your animation you can reuse these &amp;quot;poses&amp;quot; at a later point in time just by duplicating the keyframes at another time position. To do that just do following:&lt;br /&gt;
&lt;br /&gt;
# Create a Keyframe at a frame (all of our keyframes should be created close to each other to use a small portion of time. We only want to record a &amp;quot;pose&amp;quot; not a transition)&lt;br /&gt;
# Modify your objects in the way you want (for example make an eye close just by moving the points of the eyelid).&lt;br /&gt;
# Give a name to the keyframe just by clicking on its corresponding Description cell. &lt;br /&gt;
# Repeat the above steps as many times you need to make a new &amp;quot;pose&amp;quot;. Let's say you have created a keyframe at frames number 2 (eye open) and 4 (eye closed)&lt;br /&gt;
# Once done then go to another frame with the [[Time Cursor|time cursor]], select the keyframe you want to introduce and press the &amp;quot;Duplicate keyframe&amp;quot; button. You'll obtain a copy of the selected keyframe at the current [[Time Cursor|time cursor]] position.&lt;br /&gt;
&lt;br /&gt;
[[Image:Reuse_Animations_1.png]]&lt;br /&gt;
&lt;br /&gt;
There is a problem with this technique. You are making copies of the entire animation poses that you have stored in the first keyframes of the time (frames 2 and 4 of the sample) and therefore you have made copies of all the other objects existing in the scene (following the example, the eyeball).&lt;br /&gt;
&lt;br /&gt;
If you already have an eyeball animation recorded and you overlap an eyeblink (open and closed) set of keyframes in the middle, then the eyeball animation would be broken by the insertion of the copies of the eyelid movement keyframes.&lt;br /&gt;
&lt;br /&gt;
== Exporting the Canvas Parameter ==&lt;br /&gt;
&lt;br /&gt;
Every time you encapsulate a group of layers you obtain a [[Paste Canvas]] layer called &amp;quot;Inline Canvas&amp;quot; that is a special layer that holds other layers inside and prevents the composition of the inner layers over the other layers outside of it, that are outside of its scope.&lt;br /&gt;
&lt;br /&gt;
One of the parameters of the encapsulate layer is the [[Canvas|Canvas]]. The canvas is like a workspace that represents all the layers that are held by the encapsulation layer. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Reuse_Animations_2.png]]&lt;br /&gt;
&lt;br /&gt;
To avoid the problem described in the previous section (the keyframes affecting all the objects in the scene) you can do following:&lt;br /&gt;
&lt;br /&gt;
# Before creating the keyframe poses of the eyelids, encapsulate all the layers that form the eyelids inside a Paste Canvas layer.&lt;br /&gt;
# Then select the encapsulated layer and select the Canvas parameter in the Parameter Dialog. &lt;br /&gt;
# Right click the Canvas parameter, export it, and give it a name (in the sample this will be &amp;quot;eyelids&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
[[Image:Reuse_Animations_3.png]]&lt;br /&gt;
&lt;br /&gt;
Once exported you can go to the [[Canvas Browser Panel]] and select the just exported canvas. &lt;br /&gt;
&lt;br /&gt;
Double click it and a new workarea window will open with just the layers that were encapsulated on the step 1 - the &amp;quot;eyelids&amp;quot; canvas in the sample. &lt;br /&gt;
&lt;br /&gt;
[[Image:Reuse_Animations_3.png]]&lt;br /&gt;
&lt;br /&gt;
Now you can create all the keyframes you need to store your &amp;quot;poses&amp;quot;. Once done you can go to the proper frame and insert a copy of the pose keyframe. It will produce a keyframe in the &amp;quot;eyelids&amp;quot; canvas, but will not produce any keyframe on the other layers (for example the eyeball). This allows you independently animate of a portion of your model, separate from the rest of it. &lt;br /&gt;
&lt;br /&gt;
Now once you have stored the eye blinks (open and closed) at the desired position you can go to the main window (just close the &amp;quot;eyelids&amp;quot; canvas workarea). You'll see that all the  modifications have been transmitted to the main animation but they haven't created any keyframes in the main workarea. Even the layers that are inside the &amp;quot;eyelids&amp;quot; encapsulated layer don't have any keyframes (you can see an indication that there are keyframes in the exported canvas - dashed vertical lines - but no keyframe is displayed in the keyframe dialog). Anyway, you can see the waypoints created by the keyframes and tweak them, but not the keyframes themselves. To modify the keyframes you should edit the exported canvas again in its own workarea.  If you modify the encapsulated layers from the main workarea, waypoints will be created according to the main workarea's keyframes, not the exported canvas' workarea, so you will get different effects depending upon which workarea you use to modify the encapsulated layers.&lt;br /&gt;
&lt;br /&gt;
Now, once you have created your animation of the eyelids you can go to the eyeball and modify it to your taste, inserting keyframes or waypoints with no worries about interfering with the eyelid animation. Also you can animate the eyeball before and make the animation of the eyelids later. They won't interfere with each other.&lt;br /&gt;
&lt;br /&gt;
It would be a great improvement if you could connect the time cursors of the main workarea and the exported paste canvas' workarea to show both windows at the same current time. This would give feedback on where to insert the 'pose' keyframes in your local animation.&lt;br /&gt;
&lt;br /&gt;
== A sample == &lt;br /&gt;
&lt;br /&gt;
Here you can find a sample animation of a blinking eye (the closed and open positions are copies of the keyframes &amp;quot;Open&amp;quot; and &amp;quot;Closed&amp;quot;, while the eyeball moves independently in its own animation.&lt;br /&gt;
&lt;br /&gt;
I have stored the poses &amp;quot;Open&amp;quot; and &amp;quot;Closed&amp;quot; at frames 0 and 2. The animation is defined to start at frame 6.&lt;br /&gt;
&lt;br /&gt;
http://www.darthfurby.com/genete/synfig/eyeblink.gif&lt;br /&gt;
&lt;br /&gt;
[http://www.darthfurby.com/genete/synfig/eyeblink.sifz file sample]&lt;br /&gt;
&lt;br /&gt;
All comments are welcome.&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Dev:Build_Instructions&amp;diff=7264</id>
		<title>Dev:Build Instructions</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Dev:Build_Instructions&amp;diff=7264"/>
				<updated>2008-06-04T21:55:46Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: formatted commands&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[[Category:Building]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
If you are using the released versions instead of SVN, the first 3 steps for each component are not necessary. For released versions, &amp;quot;./configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; sudo make install&amp;quot; should be enough.&lt;br /&gt;
&lt;br /&gt;
If you are using packages for synfig's dependencies, you want the '''development packages''' not the main packages. Check below for your distribution's packages.&lt;br /&gt;
&lt;br /&gt;
Please read the [[Source code|source code]] page, [[Download|download page]] and the [[FAQ]] to find out about any issues that you may run into along the way.&lt;br /&gt;
&lt;br /&gt;
Some Linux/BSD distros have a pkg-config that doesn't look in /usr/local/lib/pkgconfig by default. So if you are installing in anywhere other than the system pkg-config path, please run &amp;quot;export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig&amp;quot; or similar before building or installing anything.&lt;br /&gt;
&lt;br /&gt;
Don't use automake 1.4, there are problems with it.&lt;br /&gt;
&lt;br /&gt;
Using automake 1.9, 'make install' seems to re-link and re-install all the synfig core modules every time whether they have changed or not.  [http://dooglus.rincevent.net/synfig/automake.html here] is an ugly workaround - it's only worth using if you intend to rebuild synfig repeatedly&lt;br /&gt;
&lt;br /&gt;
The instructions below result in 3 separate subversion working directories being created.  This is inconvenient to work with - you'll need to 'svn commit' in 3 different places to send changes, 'svn update' in 3 different places to get the latest updates, etc.  [[Subversion|This page]] shows how to arrange for the code to be checked out into a single working directory. You can also download a daily updated tarball that uses this from the [[Source code|source code]] page.&lt;br /&gt;
&lt;br /&gt;
The CVS requirement is only because the autopoint program run by autoreconf needs CVS. You can avoid the need for CVS by disabling the translation/gettext stuff in configure.ac.&lt;br /&gt;
&lt;br /&gt;
If you don't want to install to a system-wide directory using sudo, run something like these commands before starting:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export PREFIX=&amp;quot;$HOME/opt&amp;quot;&lt;br /&gt;
export PKG_CONFIG_PATH=&amp;quot;$PKG_CONFIG_PATH:$PREFIX/lib/pkgconfig&amp;quot;&lt;br /&gt;
export PATH=&amp;quot;$PATH:$PREFIX/bin&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And when you run ./configure, run it with --prefix=&amp;quot;$PREFIX&amp;quot; and don't use sudo when you do make install.&lt;br /&gt;
&lt;br /&gt;
=== Automatic build/update script ===&lt;br /&gt;
&lt;br /&gt;
You can use [http://zelgadis.profusehost.net/files/synfig/synfigstudio-svn-build this] script to quickly build/update synfigstudio from SVN (software installed in ~/synfig-svn by default).&lt;br /&gt;
&lt;br /&gt;
To use the script lust execute following single command in terminal: &lt;br /&gt;
&amp;lt;pre&amp;gt;cd &amp;amp;&amp;amp; \&lt;br /&gt;
wget http://zelgadis.profusehost.net/files/synfig/synfigstudio-svn-build &amp;amp;&amp;amp; \&lt;br /&gt;
chmod +x synfigstudio-svn-build &amp;amp;&amp;amp; \&lt;br /&gt;
./synfigstudio-svn-build initialize&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WARNING:''' Your system must satisfy synfig's build requiments, the sript won't do it for you.&lt;br /&gt;
&lt;br /&gt;
=== System-specific instructions ===&lt;br /&gt;
&lt;br /&gt;
* Gentoo: SVN [[Gentoo Ebuilds|ebuilds]] are available&lt;br /&gt;
* MacOS X: [[Building_On_Mac_OS_X|instructions for building]] with the GTK+ Aqua port are available.&lt;br /&gt;
* Windows: [[Windows build instructions|instructions for building]] in [[Mingw_installation|mingw]] are available.&lt;br /&gt;
&lt;br /&gt;
== ETL ==&lt;br /&gt;
&lt;br /&gt;
ETL is a template library, there is nothing to build really, it just needed to be installed.&lt;br /&gt;
&lt;br /&gt;
Requires: autoconf automake&amp;lt;br&amp;gt;&lt;br /&gt;
* Debian: build-essential autoconf automake&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.voria.com/code/ETL/trunk/ etl&lt;br /&gt;
cd etl&lt;br /&gt;
autoreconf --install --force&lt;br /&gt;
./configure&lt;br /&gt;
sudo make install&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== synfig ==&lt;br /&gt;
&lt;br /&gt;
Requires: ETL, libxml++, libsigc++, libltdl, libtool, gettext, cvs&amp;lt;br&amp;gt;&lt;br /&gt;
* Debian: etl-dev libxml++2.6-dev libsigc++-2.0-dev libltdl3-dev libtool gettext cvs&lt;br /&gt;
* Gentoo: virtual/ETL dev-cpp/libxmlpp dev-libs/libsigc++ dev-util/cvs&lt;br /&gt;
** If you are using ./configure --prefix=&amp;quot;$PREFIX&amp;quot; to configure synfig, do not install virtual/ETL.&lt;br /&gt;
&lt;br /&gt;
Note: libpng isn't required to build synfig, but if you build synfig without PNG support and go on to build synfigstudio, that step will fail (because the build process for synfigstudio uses synfig to create .png icon files).  The package is  libpng12-dev on Debian or media-libs/libpng on Gentoo.&lt;br /&gt;
&lt;br /&gt;
Optional: libpng, libmng, libjpeg, libfreetype, libfontconfig, libopenexr, libavcodec, libmagick++, vimage (MacOS only, proprietary)&amp;lt;br&amp;gt;&lt;br /&gt;
* Debian: libpng12-dev libmng-dev libjpeg62-dev libfreetype6-dev libfontconfig1-dev libopenexr-dev libavcodec-dev libavformat-dev libmagick++9-dev&lt;br /&gt;
** if using debian-multimedia.org debs swap the libav packages with the virtual packages libavformatcvs-dev libavcodeccvs-dev libavutilcvs-dev from debian-multimedia&lt;br /&gt;
* Gentoo: sys-devel/libtool media-libs/libpng media-libs/libmng media-libs/jpeg media-libs/freetype media-libs/fontconfig media-libs/openexr media-libs/libavcodec&lt;br /&gt;
Runtime: encodedv (from libdv), ffmpeg, convert (from imagemagick)&lt;br /&gt;
* Debian: libdv-bin ffmpeg imagemagick&lt;br /&gt;
* Gentoo: media-libs/libdv media-video/ffmpeg media-gfx/imagemagick&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.voria.com/code/synfig-core/trunk/ synfig-core&lt;br /&gt;
cd synfig-core&lt;br /&gt;
libtoolize --ltdl --copy --force&lt;br /&gt;
autoreconf --install --force&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* Don't use --enable-half, it is slow.&lt;br /&gt;
&lt;br /&gt;
== synfigstudio ==&lt;br /&gt;
&lt;br /&gt;
Requires: ETL, synfig, gtkmm &amp;gt;= 2.4, gtk &amp;gt;= 2.0, glibmm, libsigc++, libltdl, libtool, gettext, cvs&amp;lt;br&amp;gt;&lt;br /&gt;
* Debian: etl-dev libsynfig-dev libgtkmm-2.4-dev libgtk2.0-dev libglibmm-2.4-dev libsigc++-2.0-dev libltdl3-dev libtool gettext cvs&lt;br /&gt;
* Gentoo: virtual/ETL virtual/synfig dev-cpp/gtkmm-2.4 dev-libs/libsigc++ sys-devel/libtool&lt;br /&gt;
** If you are using ./configure --prefix=&amp;quot;$PREFIX&amp;quot; to configure synfigstudio, do not install virtual/ETL or virtual/synfig.&lt;br /&gt;
Optional: fonts (for the images), [http://www.fmod.org FMOD] (version 3.x, proprietary)&lt;br /&gt;
* Debian: ttf-freefont ttf-dejavu ttf-dustin&lt;br /&gt;
* Gentoo: freefonts dejavu&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.voria.com/code/synfig-studio/trunk/ synfigstudio&lt;br /&gt;
cd synfigstudio&lt;br /&gt;
autoreconf --install --force&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
== synfig-docs ==&lt;br /&gt;
&lt;br /&gt;
(This step isn't required to run synfig or synfigstudio, and the documents it gets you are really quite out of date)&lt;br /&gt;
&lt;br /&gt;
This is basically a copy of what is on this wiki.&lt;br /&gt;
&lt;br /&gt;
Requires: sgml processor, ldp docbook stylesheets, db2ps, db2pdf&lt;br /&gt;
* Debian: openjade ldp-docbook-dsssl docbook-utils&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.voria.com/code/synfig-docs/trunk/ synfig-docs&lt;br /&gt;
cd synfig-docs&lt;br /&gt;
make multiple-html&lt;br /&gt;
make ps&lt;br /&gt;
make pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== finalizing ==&lt;br /&gt;
&lt;br /&gt;
Depending on where you installed synfig to, you might have to tell your system where the libraries can be found.  That can be done via the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Dev:Build_Instructions&amp;diff=7263</id>
		<title>Dev:Build Instructions</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Dev:Build_Instructions&amp;diff=7263"/>
				<updated>2008-06-04T21:47:50Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: added reference to ldconfig&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[[Category:Building]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
If you are using the released versions instead of SVN, the first 3 steps for each component are not necessary. For released versions, &amp;quot;./configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; sudo make install&amp;quot; should be enough.&lt;br /&gt;
&lt;br /&gt;
If you are using packages for synfig's dependencies, you want the '''development packages''' not the main packages. Check below for your distribution's packages.&lt;br /&gt;
&lt;br /&gt;
Please read the [[Source code|source code]] page, [[Download|download page]] and the [[FAQ]] to find out about any issues that you may run into along the way.&lt;br /&gt;
&lt;br /&gt;
Some Linux/BSD distros have a pkg-config that doesn't look in /usr/local/lib/pkgconfig by default. So if you are installing in anywhere other than the system pkg-config path, please run &amp;quot;export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig&amp;quot; or similar before building or installing anything.&lt;br /&gt;
&lt;br /&gt;
Don't use automake 1.4, there are problems with it.&lt;br /&gt;
&lt;br /&gt;
Using automake 1.9, 'make install' seems to re-link and re-install all the synfig core modules every time whether they have changed or not.  [http://dooglus.rincevent.net/synfig/automake.html here] is an ugly workaround - it's only worth using if you intend to rebuild synfig repeatedly&lt;br /&gt;
&lt;br /&gt;
The instructions below result in 3 separate subversion working directories being created.  This is inconvenient to work with - you'll need to 'svn commit' in 3 different places to send changes, 'svn update' in 3 different places to get the latest updates, etc.  [[Subversion|This page]] shows how to arrange for the code to be checked out into a single working directory. You can also download a daily updated tarball that uses this from the [[Source code|source code]] page.&lt;br /&gt;
&lt;br /&gt;
The CVS requirement is only because the autopoint program run by autoreconf needs CVS. You can avoid the need for CVS by disabling the translation/gettext stuff in configure.ac.&lt;br /&gt;
&lt;br /&gt;
If you don't want to install to a system-wide directory using sudo, run something like these commands before starting:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export PREFIX=&amp;quot;$HOME/opt&amp;quot;&lt;br /&gt;
export PKG_CONFIG_PATH=&amp;quot;$PKG_CONFIG_PATH:$PREFIX/lib/pkgconfig&amp;quot;&lt;br /&gt;
export PATH=&amp;quot;$PATH:$PREFIX/bin&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And when you run ./configure, run it with --prefix=&amp;quot;$PREFIX&amp;quot; and don't use sudo when you do make install.&lt;br /&gt;
&lt;br /&gt;
=== Automatic build/update script ===&lt;br /&gt;
&lt;br /&gt;
You can use [http://zelgadis.profusehost.net/files/synfig/synfigstudio-svn-build this] script to quickly build/update synfigstudio from SVN (software installed in ~/synfig-svn by default).&lt;br /&gt;
&lt;br /&gt;
To use the script lust execute following single command in terminal: &lt;br /&gt;
&amp;lt;pre&amp;gt;cd &amp;amp;&amp;amp; \&lt;br /&gt;
wget http://zelgadis.profusehost.net/files/synfig/synfigstudio-svn-build &amp;amp;&amp;amp; \&lt;br /&gt;
chmod +x synfigstudio-svn-build &amp;amp;&amp;amp; \&lt;br /&gt;
./synfigstudio-svn-build initialize&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WARNING:''' Your system must satisfy synfig's build requiments, the sript won't do it for you.&lt;br /&gt;
&lt;br /&gt;
=== System-specific instructions ===&lt;br /&gt;
&lt;br /&gt;
* Gentoo: SVN [[Gentoo Ebuilds|ebuilds]] are available&lt;br /&gt;
* MacOS X: [[Building_On_Mac_OS_X|instructions for building]] with the GTK+ Aqua port are available.&lt;br /&gt;
* Windows: [[Windows build instructions|instructions for building]] in [[Mingw_installation|mingw]] are available.&lt;br /&gt;
&lt;br /&gt;
== ETL ==&lt;br /&gt;
&lt;br /&gt;
ETL is a template library, there is nothing to build really, it just needed to be installed.&lt;br /&gt;
&lt;br /&gt;
Requires: autoconf automake&amp;lt;br&amp;gt;&lt;br /&gt;
* Debian: build-essential autoconf automake&lt;br /&gt;
&lt;br /&gt;
# svn co http://svn.voria.com/code/ETL/trunk/ etl&lt;br /&gt;
# cd etl&lt;br /&gt;
# autoreconf --install --force&lt;br /&gt;
# ./configure&lt;br /&gt;
# sudo make install&lt;br /&gt;
# cd ..&lt;br /&gt;
&lt;br /&gt;
== synfig ==&lt;br /&gt;
&lt;br /&gt;
Requires: ETL, libxml++, libsigc++, libltdl, libtool, gettext, cvs&amp;lt;br&amp;gt;&lt;br /&gt;
* Debian: etl-dev libxml++2.6-dev libsigc++-2.0-dev libltdl3-dev libtool gettext cvs&lt;br /&gt;
* Gentoo: virtual/ETL dev-cpp/libxmlpp dev-libs/libsigc++ dev-util/cvs&lt;br /&gt;
** If you are using ./configure --prefix=&amp;quot;$PREFIX&amp;quot; to configure synfig, do not install virtual/ETL.&lt;br /&gt;
&lt;br /&gt;
Note: libpng isn't required to build synfig, but if you build synfig without PNG support and go on to build synfigstudio, that step will fail (because the build process for synfigstudio uses synfig to create .png icon files).  The package is  libpng12-dev on Debian or media-libs/libpng on Gentoo.&lt;br /&gt;
&lt;br /&gt;
Optional: libpng, libmng, libjpeg, libfreetype, libfontconfig, libopenexr, libavcodec, libmagick++, vimage (MacOS only, proprietary)&amp;lt;br&amp;gt;&lt;br /&gt;
* Debian: libpng12-dev libmng-dev libjpeg62-dev libfreetype6-dev libfontconfig1-dev libopenexr-dev libavcodec-dev libavformat-dev libmagick++9-dev&lt;br /&gt;
** if using debian-multimedia.org debs swap the libav packages with the virtual packages libavformatcvs-dev libavcodeccvs-dev libavutilcvs-dev from debian-multimedia&lt;br /&gt;
* Gentoo: sys-devel/libtool media-libs/libpng media-libs/libmng media-libs/jpeg media-libs/freetype media-libs/fontconfig media-libs/openexr media-libs/libavcodec&lt;br /&gt;
Runtime: encodedv (from libdv), ffmpeg, convert (from imagemagick)&lt;br /&gt;
* Debian: libdv-bin ffmpeg imagemagick&lt;br /&gt;
* Gentoo: media-libs/libdv media-video/ffmpeg media-gfx/imagemagick&lt;br /&gt;
&lt;br /&gt;
# svn co http://svn.voria.com/code/synfig-core/trunk/ synfig-core&lt;br /&gt;
# cd synfig-core&lt;br /&gt;
# libtoolize --ltdl --copy --force&lt;br /&gt;
# autoreconf --install --force&lt;br /&gt;
# ./configure&lt;br /&gt;
# make&lt;br /&gt;
# sudo make install&lt;br /&gt;
# cd ..&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* Don't use --enable-half, it is slow.&lt;br /&gt;
&lt;br /&gt;
== synfigstudio ==&lt;br /&gt;
&lt;br /&gt;
Requires: ETL, synfig, gtkmm &amp;gt;= 2.4, gtk &amp;gt;= 2.0, glibmm, libsigc++, libltdl, libtool, gettext, cvs&amp;lt;br&amp;gt;&lt;br /&gt;
* Debian: etl-dev libsynfig-dev libgtkmm-2.4-dev libgtk2.0-dev libglibmm-2.4-dev libsigc++-2.0-dev libltdl3-dev libtool gettext cvs&lt;br /&gt;
* Gentoo: virtual/ETL virtual/synfig dev-cpp/gtkmm-2.4 dev-libs/libsigc++ sys-devel/libtool&lt;br /&gt;
** If you are using ./configure --prefix=&amp;quot;$PREFIX&amp;quot; to configure synfigstudio, do not install virtual/ETL or virtual/synfig.&lt;br /&gt;
Optional: fonts (for the images), [http://www.fmod.org FMOD] (version 3.x, proprietary)&lt;br /&gt;
* Debian: ttf-freefont ttf-dejavu ttf-dustin&lt;br /&gt;
* Gentoo: freefonts dejavu&lt;br /&gt;
&lt;br /&gt;
# svn co http://svn.voria.com/code/synfig-studio/trunk/ synfigstudio&lt;br /&gt;
# cd synfigstudio&lt;br /&gt;
# autoreconf --install --force&lt;br /&gt;
# ./configure&lt;br /&gt;
# make&lt;br /&gt;
# sudo make install&lt;br /&gt;
# cd ..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
== synfig-docs ==&lt;br /&gt;
&lt;br /&gt;
(This step isn't required to run synfig or synfigstudio, and the documents it gets you are really quite out of date)&lt;br /&gt;
&lt;br /&gt;
This is basically a copy of what is on this wiki.&lt;br /&gt;
&lt;br /&gt;
Requires: sgml processor, ldp docbook stylesheets, db2ps, db2pdf&lt;br /&gt;
* Debian: openjade ldp-docbook-dsssl docbook-utils&lt;br /&gt;
&lt;br /&gt;
# svn co http://svn.voria.com/code/synfig-docs/trunk/ synfig-docs&lt;br /&gt;
# cd synfig-docs&lt;br /&gt;
# make multiple-html&lt;br /&gt;
# make ps&lt;br /&gt;
# make pdf&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== finalizing ==&lt;br /&gt;
&lt;br /&gt;
Depending on where you installed synfig to, you might have to tell your system where the libraries can be found.  That can be done via the following command:&lt;br /&gt;
&lt;br /&gt;
# sudo ldconfig&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Keyframe&amp;diff=6187</id>
		<title>Keyframe</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Keyframe&amp;diff=6187"/>
				<updated>2008-03-21T21:48:21Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: /* Editing Keyframe Properties */  typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is a keyframe? ==&lt;br /&gt;
&lt;br /&gt;
A keyframe is a basically a &amp;quot;mark&amp;quot; in the timeline. This mark allows the user to make Synfig remember the state of the animation at that point (frame). It means that the keyframe is like a label that tell Synfig that this frame should be taken into account when creating waypoints.  It also indicates that the marked frame is a special frame where the information of ''every parameter of every layer is stored in order to be reused later''. &lt;br /&gt;
&lt;br /&gt;
Each keyframe is associated with a particular frame and a frame can only have one keyframe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What does a keyframe looks like? ==&lt;br /&gt;
&lt;br /&gt;
A keyframe looks like a light brown vertical dashed line in the [[Timetrack Panel|Timetrack Panel]] placed at the corresponding frame. You can distinguish it from the time cursor by its color (the time cursor is blue). &lt;br /&gt;
&lt;br /&gt;
[[Image: KeyframesLookTimeLine.png]]&lt;br /&gt;
&lt;br /&gt;
The green dots shown in the image are [[Waypoints|waypoints]].&lt;br /&gt;
&lt;br /&gt;
Keyframes also appear as entries in a list in the [[Keyframes Panel]] (fix keyframe dialog to explain better the columns of the dialog)&lt;br /&gt;
&lt;br /&gt;
[[Image: KeyframesLookList.png]]&lt;br /&gt;
&lt;br /&gt;
== Keyframes and waypoints ==&lt;br /&gt;
&lt;br /&gt;
A keyframe doesn't necessarily imply a waypoint, and a waypoint doesn't necessarily imply a keyframe. &lt;br /&gt;
&lt;br /&gt;
A keyframe could live all the time without any waypoint but it stores the information of the values of the parameters on that specific frame. If there is a waypoint there then the waypoint information is stored too. If there is no waypoint in the keyframe then its &amp;quot;stored&amp;quot; value is the result of the surrounding waypoints, its parameter values and the interpolation values the waypoints have. This means that a keyframe remembers the values of the parameters at that frame but does not keep them static at that frame. To maintain a parameter's value static in a certain frame you must use a waypoint.&lt;br /&gt;
&lt;br /&gt;
The creation of a waypoint can cause the creation of new waypoints on the neighboring keyframes depending on the current value of the [[Lock Keyframes]] state. So, maybe, the creation of a waypoint (modifying a parameter or pasting or moving a waypoint or even duplicating a keyframe) can lead to the creation of a waypoint in the the keyframes that are immediately before and after the inserted waypoint's frame. The waypoints created in the neighboring keyframes are created according to the [[New Layer Defaults#Default Interpolation|default interpolation value]] in the [[Toolbox |toolbox window]].&lt;br /&gt;
&lt;br /&gt;
See the [[#Examples|examples]] to understand how this works.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adding, duplicating and removing keyframes ==&lt;br /&gt;
&lt;br /&gt;
===Add a keyframe===&lt;br /&gt;
[[Image: AddNewKeyframeButton.png]]&lt;br /&gt;
&lt;br /&gt;
Place the time cursor at a frame where there isn't currently any keyframe. Then press the Add new Keyframe button. If you place the time cursor at a frame where there is currently an existing keyframe then the Add Keyframe button is disabled. Once you press the button then a new entry is added to the list of keyframes and a vertical dashed line is added in the time line. No waypoint is created.&lt;br /&gt;
&lt;br /&gt;
===Duplicate a keyframe===&lt;br /&gt;
[[Image: DuplicateKeyframeButton.png]]&lt;br /&gt;
&lt;br /&gt;
Select a keyframe in the keyframe list of the [[Keyframes Panel]] and place the cursor at a frame where there isn't currently any keyframe. Then press the Duplicate Keyframe button. This would have two separated effects:&lt;br /&gt;
&lt;br /&gt;
# If there is a waypoint at the original keyframe then the waypoint is duplicated. Its duplication includes the parameter value and its interpolation types.&lt;br /&gt;
# If there is no waypoint in the original keyframe for any particular parameter then two things could happen:&lt;br /&gt;
#*There is no waypoint for that parameter at ANY frame in the time line: Then NO waypoint is created.&lt;br /&gt;
#*If there is a waypoint in the time line for that parameter, but not in the keyframe that is going to be duplicated, then in the duplicated keyframe is created a new waypoint with a value for the parameter of the result of the current value at the original keyframe and a TCB Smooth interpolation type for both &amp;quot;In&amp;quot; and &amp;quot;Out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Of course, duplicate a keyframe will produce a new keyframe at the place pointed by the time cursor and will add a new one to the keyframe list in the proper place. In the keyframe list, the new added keyframe have the same description than the original, plus a &amp;quot;(Duplicate)&amp;quot; at the end.&lt;br /&gt;
&lt;br /&gt;
===Remove a keyframe===&lt;br /&gt;
[[Image:RemoveKeyframeButton.png]]&lt;br /&gt;
&lt;br /&gt;
Just select a keyframe from the keyframe list and press the Remove keyframe button. It will remove the keyframe and all the waypoints for all parameters for all layers that are currently there.&lt;br /&gt;
&lt;br /&gt;
 ''NOTE: If you move a keyframe by modifying its [[#Time|time]] in the keyframe list dialog&lt;br /&gt;
 ''and immediately press the Remove Keyframe button then the waypoints are not''&lt;br /&gt;
 ''deleted. It seems to be a bug but also can be considered a feature if you really''&lt;br /&gt;
 ''want to keep the waypoints and not the keyframe.''&lt;br /&gt;
&lt;br /&gt;
== Editing keyframes: time, length &amp;amp; description ==&lt;br /&gt;
&lt;br /&gt;
You can see in the Keyframe list dialog that there are four headers on it:&lt;br /&gt;
&lt;br /&gt;
[[Image:KeyframesLookList.png]]&lt;br /&gt;
&lt;br /&gt;
* Time&lt;br /&gt;
* Length&lt;br /&gt;
* Jump&lt;br /&gt;
* Description&lt;br /&gt;
&lt;br /&gt;
The Jump column is only a shourt cut to place the time cursor at the keyframe where you make a click in the (JMP) label.&lt;br /&gt;
&lt;br /&gt;
=== Time ===&lt;br /&gt;
&lt;br /&gt;
You can modify the time (frame) where the keyframe is palced just making a click in the corresponding Time cell. It will allow modify the time forward or backward the amount that you want. If you try to set the time of a certain keyframe to be the same time of another existing keyframe then the program gives you this message:&lt;br /&gt;
&lt;br /&gt;
 keyframe_set: Cannot change keyframe time because another keyframe already exists with that time.&lt;br /&gt;
&lt;br /&gt;
Modifying the Time of a keyframe has the following effects:&lt;br /&gt;
&lt;br /&gt;
# The existing waypoints in the keyframe will move to the new position.&lt;br /&gt;
# If any parameter have a a waypoint in the time line, then the moved keyframe will have a new waypoint set to TCB Smooth on those paramter(s).&lt;br /&gt;
# According to the default interpolation method and the Lock Keyframes status and to the parameters that have any waypoint in the time line, new waypoints will be created on the neighbouring keyframes of the destiny time (frame). The original neighbouring keyframes will be untouched if don't coincide with the destiny neighbouring keyframes.&lt;br /&gt;
&lt;br /&gt;
See [[#Change Keyframe Time|the example]] to see how that works.&lt;br /&gt;
&lt;br /&gt;
=== Length ===&lt;br /&gt;
&lt;br /&gt;
Change this cell doesn't seems to do nothig. Once you press INTRO you obtain the old value again. It seems to be only an informative label.&lt;br /&gt;
&lt;br /&gt;
=== Description ===&lt;br /&gt;
&lt;br /&gt;
This cell allow the user insert a short description of the meaning of the keyframe. Just make click on it and change the text.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Editing Keyframe Properties ==&lt;br /&gt;
[[Image: KeyframePropertiesButton.png]]&lt;br /&gt;
&lt;br /&gt;
The Keyframe Properties dialog allows change the interpolation method for all the waypoints on the keyframe at the same time. Even if, for a certain parameter, there is no waypoint on the keyframe but the parameter have other waypoints in the time line, then when you apply the Keyframe Properties you will add a waypoint at that keyframe were there aren't currently any waypoint. The added waypoints have the interpolation methods stated by the dialog. It means that the Keyframe Properties dialog will modify the interpolation methods for all the parameters that have any waypoint in the time line. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The dialog have the following parameters:&lt;br /&gt;
&lt;br /&gt;
[[Image: KeyframeDialog.png]]&lt;br /&gt;
* In: Checking this value you can change the interpolation method of the left part of the waypoints of the current selected keyframe of all the layers of the canvas to the selected [[Waypoints#Interpolation|interpolation method]] in the drop down menu.&lt;br /&gt;
* Out: Same but for the right part of the waypoint.&lt;br /&gt;
* Tension: See [[TCB]]&lt;br /&gt;
* Bias: See [[TCB]]&lt;br /&gt;
* Continuity:  See [[TCB]]&lt;br /&gt;
* Temporal Tension: See [[TCB]]&lt;br /&gt;
&lt;br /&gt;
You can check only one of both &amp;quot;In&amp;quot; or &amp;quot;Out&amp;quot; check boxes to only affect the change to the left or right part of the waypoints. The non checked part would not be modified. Same comment applies for the Manual interpolation method parameters (Tension, Bias, Continuity and Temporal Tension)&lt;br /&gt;
&lt;br /&gt;
[[Image: KeyframeDialog2.png]]&lt;br /&gt;
&lt;br /&gt;
This dialog would not affect what's the interpolation method for a new waypoint created by the user, automatically created by the keyframe duplication or by the lock keyframe state. The interpolation methods for new waypoints created in those cases will be both the same (In and Out or Left and Right) and depend only on the Default interpolation method of the Tool Box window.&lt;br /&gt;
&lt;br /&gt;
See the [[#Examples|examples]] to understand better how it works.&lt;br /&gt;
&lt;br /&gt;
==Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Duplicate a keyframe with no waypoint on it ===&lt;br /&gt;
For example, imagine that you have following set of keyframes and waypoints and the corresponding parameter of the radius of a circle:&lt;br /&gt;
{|&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
|+ Before duplicate keyframe at 2s to 6s&lt;br /&gt;
!Frame!!Keyframe!!Waypoint!!Radius!!Interpolation&lt;br /&gt;
|-&lt;br /&gt;
|0s||yes||yes||20.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|2s||yes||no||25.0||n/a&lt;br /&gt;
|-&lt;br /&gt;
|4s||yes||no||30.0||n/a&lt;br /&gt;
|-&lt;br /&gt;
|8s||no||yes||40.0||TCB Smooth&lt;br /&gt;
|} &lt;br /&gt;
[[Image: GraphBeforeDuplicate.png]]&lt;br /&gt;
&lt;br /&gt;
 notice that although the interpolation between 0s and 8s is TCB Smooth the real result &lt;br /&gt;
 is linear due that they are the only two waypoints of the animation for that parameter.&lt;br /&gt;
&lt;br /&gt;
If you select the keyframe at 2s, place the time cursor at 6s (where there isn't a keyframe), set the [[New Layer Defaults#Default interpolation | default interpolation]] to TCB Smooth, and have the [[Lock Keyframes | lock keyframe status]] to ''All keyframes locked'' and press the duplicate keyframe button, then the result is the following:&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
|+ After duplicate keyframe at 2s to 6s&lt;br /&gt;
!Frame!!Keyframe!!Waypoint!!Radius!!Interpolation&lt;br /&gt;
|-&lt;br /&gt;
|0s||yes||yes||20.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|2s||yes||no||25,78125||n/a&lt;br /&gt;
|-&lt;br /&gt;
|4s||yes||yes||30.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|6s||yes||yes||25.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|8s||no||yes||40.0||TCB Smooth&lt;br /&gt;
|}&lt;br /&gt;
[[Image: GraphAfterDuplicate.png]]&lt;br /&gt;
&lt;br /&gt;
You can see that:&lt;br /&gt;
# At 0s none has changed. Not affected by the insertion of the keyframe. It is two keyframes away from 6s and also have a waypoint.&lt;br /&gt;
# At 2s there was a keyframe and stills there. But previous to the creation of the keyframe at 6s the current interpolated value of the radius was 25.0. After the creation of the keyframe at 6s the radius is the result of the interpolation between 0s and 4s frames waypoints with its radius values and its interpolation methods. That is 25.78125. This keyframe is more than one keyframe away from the new 6s keyframe so no waypoint is created.&lt;br /&gt;
#At 4s there was a keyframe and still being there. But in this case the 4s keyframe is a neighbor of the new 6s keyframe. As well as the lock keyframe state was set to ''All keyframes locked'' then the keyframe at 4s has been locked adding a waypoint on it. The radius value hasn't changed (still being 30.0) because it was locked adding a waypoint with its current value). The Interpolation mode of the waypoint was set to TCB Smooth as stated by its default value.&lt;br /&gt;
# At 6s there is a new keyframe with a new waypoint with the old value of the interpolated value of the keyframe at 2s. That is a radius of 25.0.&lt;br /&gt;
#At 8s nothing has changed. There wasn't any keyframe and there was a waypoint so nothing is expected to change.&lt;br /&gt;
&lt;br /&gt;
Imagine now that you repeat the same operations but you choose the default interpolation set to Constant. Then the result is the following:&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
|+ After duplicate keyframe at 2s to 6s (constant interpolation)&lt;br /&gt;
!Frame!!Keyframe!!Waypoint!!Radius!!Interpolation&lt;br /&gt;
|-&lt;br /&gt;
|0s||yes||yes||20.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|2s||yes||no||20.0||n/a&lt;br /&gt;
|-&lt;br /&gt;
|4s||yes||yes||30.0||Constant&lt;br /&gt;
|-&lt;br /&gt;
|6s||yes||yes||25.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|8s||no||yes||40.0||TCB Smooth&lt;br /&gt;
|}&lt;br /&gt;
[[Image: GraphAfterDuplicateConstant.png]]&lt;br /&gt;
&lt;br /&gt;
Now you can see that the keyframe at 2s doesn't hold the value of the parameter by itself. It only remember the value if a waypoint is created on it, by the result of the insertion of a neighbour waypoint, or if a keyframe is duplicated and the lock keyframe status affects that keyframe. In this example the value at 2s has changed drastically due to the different interpolation method for the created waypoint on 4s. If in this situation you duplicate again the keyframe at 2s to other frame (ej. 10s) then it would copy a keyframe with a waypoint on it with a radius's value of 20.0, what is the current value of the parameter in that keyframe before duplicate it.&lt;br /&gt;
&lt;br /&gt;
=== Editing Keyframe Properties ===&lt;br /&gt;
&lt;br /&gt;
Consider this situation for a certain layer:&lt;br /&gt;
&lt;br /&gt;
[[Image:BeforeChangeKeyframeProperties.png]]&lt;br /&gt;
&lt;br /&gt;
In the sample the animation duration is 10 seconds so the image shows all the existing waypoints and keyframes. The time cursor isn't over any keyframe.&lt;br /&gt;
&lt;br /&gt;
Now consider that you have the following default values:&lt;br /&gt;
&lt;br /&gt;
* [[New Layer Defaults#Default Interpolation|Default Interpolation]] method set to &amp;quot;Ease in/out&amp;quot;&lt;br /&gt;
* [[Lock Keyframes| Lock Keyframes]] status set to &amp;quot;All Keyframes Locked&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now select the keyframe at frame 4s in the keyframe list. Press the Keyframe Properties button and set the following interpolation method:&lt;br /&gt;
&lt;br /&gt;
[[Image: KeyframeProperties2.png]]&lt;br /&gt;
&lt;br /&gt;
and press Apply button. The result will be this:&lt;br /&gt;
&lt;br /&gt;
[[Image:AfterChangeKeyframeProperties.png]]&lt;br /&gt;
&lt;br /&gt;
You can see the following effects:&lt;br /&gt;
&lt;br /&gt;
# The existing waypoints at 4s keyframe have changed its interpolation methods according to the Keyframe Properties dialog.&lt;br /&gt;
# There are new added waypoints at 4s keyframe. The waypoints are added to the paramters that have almost one waypoint in the time line (for example the one that have only a waypoint at 9s). The added waypoints at 4s keyframe have the interpolation settings that was stated by the Keyframe Properties dialog.&lt;br /&gt;
# New waypoints have been created for the neighbouring keyframes to 4s (2s and 6s) fo all the parameters that have any waypoint in the time line. The waypoints are created in the neighbouring keyframes according to the [[Lock Keyframes |Lock Keyframes]] status. Also the created waypoints interpolation method responds to the [[New Layer Defaults#Default Interpolation|default interpolation]] method you have set.&lt;br /&gt;
&lt;br /&gt;
If in the Keyframe Properties dialog you were checked off the Out or the In check boxes then it would have happened two things:&lt;br /&gt;
&lt;br /&gt;
# The existing waypoints at 4s would only change its interpolation method on the side the check box was checked on. The other side will be untouched.&lt;br /&gt;
# The new added waypoints will have the interpolation method set to TCB Smooth method where the check box is off and the interpolation method set by the keyframe properties dialog where the check box is on.&lt;br /&gt;
&lt;br /&gt;
[[Image:AfterChangeKeyframeProperties2.png]]&lt;br /&gt;
&lt;br /&gt;
In this sample it was only checked on the &amp;quot;In&amp;quot; check box.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Change Keyframe Time ===&lt;br /&gt;
&lt;br /&gt;
Consider again this situation for a certain layer: &lt;br /&gt;
&lt;br /&gt;
[[Image:BeforeChangeKeyframeProperties.png]]&lt;br /&gt;
&lt;br /&gt;
Now consider that you have the following default values:&lt;br /&gt;
&lt;br /&gt;
* [[New Layer Defaults#Default Interpolation|Default Interpolation]] method set to &amp;quot;Ease in/out&amp;quot;&lt;br /&gt;
* [[Lock Keyframes| Lock Keyframes]] status set to &amp;quot;All Keyframes Locked&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now select the keyframe at frame 4s in the keyframe list. Make a click in the TIme cell and modify the time to be 3s. The result will be this:&lt;br /&gt;
&lt;br /&gt;
[[Image:AfterChangeKeyframeTime.png]]&lt;br /&gt;
&lt;br /&gt;
== Advanced uses of keyframes ==&lt;br /&gt;
&lt;br /&gt;
===Reusing keyframes===&lt;br /&gt;
If you want to learn more about advanced uses of keyframes see this tutorial about reusing animations. Keyframes can be like stored &amp;quot;poses&amp;quot; that can be reused several time in the animation. Very useful for lip sync. &lt;br /&gt;
&lt;br /&gt;
[[Reuse Animations]]&lt;br /&gt;
&lt;br /&gt;
===Usage of Onionskin===&lt;br /&gt;
&lt;br /&gt;
To properly use the onion skin feature (ALT-O or File&amp;gt;View&amp;gt;Toggle Onion Skin) you should consider the frame where the keyframes are set. Onion skin will show you the before and after keyframes images with a 50% opaque copy of the current view. Also the current view is 50% opaque.&lt;br /&gt;
&lt;br /&gt;
See [[Toggle Onion Skin]] for more detail.&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Duplicate_Layer&amp;diff=5951</id>
		<title>Duplicate Layer</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Duplicate_Layer&amp;diff=5951"/>
				<updated>2008-03-01T15:23:32Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: Added more explanation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The 'Duplicate' layer makes multiple copies of the layers under it in real time.&lt;br /&gt;
&lt;br /&gt;
It has a single parameter, &amp;quot;Index&amp;quot; which is automatically exported.  This is the only ValueNode that will change from one copy to the next.  This exported value can then be selected in the Children dialog and Connected to the parameter(s) in the layer under the duplicate dialog which should change in the copies.&lt;br /&gt;
&lt;br /&gt;
The Duplicate layer works like a loop over the content below it and provides a changing variable to that content. This variable (the exported Index) can now be used (Connected) within that content.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Index&amp;quot; parameter has 3 sub-parameters, &amp;quot;From&amp;quot;, &amp;quot;To&amp;quot;, and &amp;quot;Step&amp;quot;.  The value of the exported &amp;quot;Index&amp;quot; parameter varies from the value of &amp;quot;From&amp;quot; to the value of &amp;quot;To&amp;quot; in steps of size &amp;quot;Step&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;From&amp;quot; can be higher or lower than &amp;quot;To&amp;quot;.  It doesn't matter whether &amp;quot;Step&amp;quot; is positive or negative.  The steps will be in the direction from &amp;quot;From&amp;quot; to &amp;quot;To&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Known Problems ==&lt;br /&gt;
&lt;br /&gt;
* The Duplicate Layer doesn't do anything about bounding boxes.  Doing so could help to speed up rendering when the duplicated layers are outside the visible area.  It's not clear how useful or possible this would be.  To calculate its bounding box, the duplicate layer would need to loop through all values of Index to get the underlying bounding boxes and union them together.  Maybe it's worth doing anyway.&lt;br /&gt;
&lt;br /&gt;
* Editing a Bline below a dup layer becomes very difficult while a recent edit is still being rendered, because the Bline ducks move around as the render runs (if the duplications are at different positions or scale).  I tried using the same mutex around the Duplicate ValueNode's operator() method as is used in the Duplicate Layer's code, but it lead to [http://dooglus.rincevent.net/random/deadlock.txt a deadlock].&lt;br /&gt;
&lt;br /&gt;
=== Recently Fixed Problems (please test) ===&lt;br /&gt;
&lt;br /&gt;
* Cloning a duplicate layer and having one above the other (rather than having them each inside a disjoint PasteCanvas) causes Synfig to hang, since the same ValueNode will be used for the Index parameter in each of them. [ fixed in r1277 ]&lt;br /&gt;
&lt;br /&gt;
* It shouldn't be possible to Disconnect the Index param in the duplicate layer, but it is. [ fixed in r1278 ]&lt;br /&gt;
&lt;br /&gt;
* It shouldn't be possible to Convert the Index param from Duplicate to any other type, but it is. [ fixed in r1279 ]&lt;br /&gt;
&lt;br /&gt;
* It shouldn't be possible to Disconnect a Duplicate ValueNode using the Children dialog, but it is. [ fixed in r1280 ]&lt;br /&gt;
&lt;br /&gt;
* It shouldn't be possible to Convert a Duplicate ValueNode to any other type using the Children dialog, but it is. [fixed in r1281 ]&lt;br /&gt;
&lt;br /&gt;
* It shouldn't be possible to Connect any ValueNode from the Children dialog to the Index param of a Duplicate layer, but it is. [ fixed in r1282 ]&lt;br /&gt;
&lt;br /&gt;
* Maybe it would be helpful to Auto-Export the Index parameter to give the user less work to do.  It can always be renamed to something memorable later. [ added in r1283 ]&lt;br /&gt;
&lt;br /&gt;
* Automatic export of the Index parameter works for new layers, but not for cloned layers (copy/paste or right-click &amp;gt; duplicate). [ fixed in r1286 ]&lt;br /&gt;
&lt;br /&gt;
* The Add and Subtract ValueNodes won't allow the linking of the Duplicate layer's Index to their LHS and RHS if they are converted from a Time parameter. [ fixed in r1299 (for add) and r1330 (for subtract) ]&lt;br /&gt;
&lt;br /&gt;
* The layer doesn't seem to work well with PasteCanvas' parameters.  Duplicating a PasteCanvas and linking the Index to its position or time offset doesn't have any effect. [ fixed in r1331 ]&lt;br /&gt;
&lt;br /&gt;
* Rendering the Duplicate layer modifies the Index parameter.  Studio renders the Navigator dialog's thumbnail and the main canvas at the same time.  These two renders can interfere with each other, since they don't use a mutex to protect the read/write of the Index parameter. [ fixed in r1358 ]&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Talk:Duplicate_Layer&amp;diff=5950</id>
		<title>Talk:Duplicate Layer</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Talk:Duplicate_Layer&amp;diff=5950"/>
				<updated>2008-03-01T15:17:26Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: Suggestion for explanation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Suggestion for explanation ==&lt;br /&gt;
Since I had some difficulties grasping the meaning of the Duplicate layer, I suggest adding the following after the 2nd paragraph:&lt;br /&gt;
&lt;br /&gt;
:The Duplicate layer works like a loop over the content below it and provides a changing variable to that content.  This variable (the exported ''Index'') can now be used (''Connected'') within that content.&lt;br /&gt;
&lt;br /&gt;
--[[User:Rubikcube|Rubikcube]] 10:17, 1 March 2008 (EST)&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Dev:Gentoo_Ebuilds&amp;diff=5947</id>
		<title>Dev:Gentoo Ebuilds</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Dev:Gentoo_Ebuilds&amp;diff=5947"/>
				<updated>2008-02-29T23:56:55Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: /* media-gfx/synfig-svn */ Added cvs dependency&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[[Category:Building]]&lt;br /&gt;
&lt;br /&gt;
We're working on ebuild files for the Gentoo operating system here. To use this page directly with Gentoo, you need to know how Portage works. Specifically:&lt;br /&gt;
* Create a Portage overlay so these ebuilds won't be clobbered by an emerge sync&lt;br /&gt;
* Cut out each ebuild and put it in the proper place in the overlay.&lt;br /&gt;
* Find mistakes in the ebuilds, and post fixes here&lt;br /&gt;
&lt;br /&gt;
= Release-version ebuilds in Gentoo's BugZilla =&lt;br /&gt;
&lt;br /&gt;
These are also in gentoo's sunrise overlay.&lt;br /&gt;
&lt;br /&gt;
'''synfig-studio''' (-&amp;gt; /overlay/media-gfx/synfig-studio)&lt;br /&gt;
&lt;br /&gt;
  http://bugs.gentoo.org/show_bug.cgi?id=111279&lt;br /&gt;
&lt;br /&gt;
'''synfig''' (-&amp;gt; /overlay/media-gfx/synfig)&lt;br /&gt;
&lt;br /&gt;
  http://bugs.gentoo.org/show_bug.cgi?id=111278&lt;br /&gt;
&lt;br /&gt;
'''ETL''' (-&amp;gt; /overlay/dev-cpp/ETL)&lt;br /&gt;
&lt;br /&gt;
  http://bugs.gentoo.org/show_bug.cgi?id=111277&lt;br /&gt;
&lt;br /&gt;
= Short howto =&lt;br /&gt;
&lt;br /&gt;
1. make digests in your '''overlay''' directory i.e.:&lt;br /&gt;
  '''ebuild''' /overlay/media-gfx/synfig-studio/synfig-studio-0.61.05.ebuild '''digest'''&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
2. this goes in the '''/etc/portage/package.use'''&lt;br /&gt;
  media-gfx/synfig  ffmpeg freetype imagemagick libdv openexr&lt;br /&gt;
  media-gfx/synfig-studio fmod&lt;br /&gt;
&lt;br /&gt;
3. emerge -av synfig-studio&lt;br /&gt;
&lt;br /&gt;
= SVN Ebuilds =&lt;br /&gt;
&lt;br /&gt;
== dev-cpp/ETL-svn ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION=&amp;quot;VoriaETL is a multiplatform class and template library designed to&lt;br /&gt;
complement and supplement the C++ STL. (SVN-sources)&amp;quot;&lt;br /&gt;
HOMEPAGE=&amp;quot;http://www.synfig.com/&amp;quot;&lt;br /&gt;
SRC_URI=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
LICENSE=&amp;quot;GPL-2&amp;quot;&lt;br /&gt;
SLOT=&amp;quot;0&amp;quot;&lt;br /&gt;
KEYWORDS=&amp;quot;~amd64 ~x86&amp;quot;&lt;br /&gt;
IUSE=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
DEPEND=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
PROVIDE=&amp;quot;virtual/ETL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ESVN_REPO_URI=&amp;quot;http://svn.voria.com/code/ETL/trunk/&amp;quot;&lt;br /&gt;
ESVN_PROJECT=&amp;quot;${PN}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit eutils&lt;br /&gt;
inherit subversion&lt;br /&gt;
&lt;br /&gt;
src_compile() {&lt;br /&gt;
        autoreconf -if&lt;br /&gt;
        econf || die&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
src_install() {&lt;br /&gt;
        make DESTDIR=&amp;quot;${D}&amp;quot; install || die&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== media-gfx/synfig-svn ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION=&amp;quot;Synfig: Film-Quality Vector Animation (core engine, SVN-sources)&amp;quot;&lt;br /&gt;
HOMEPAGE=&amp;quot;http://www.synfig.com/&amp;quot;&lt;br /&gt;
SRC_URI=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
LICENSE=&amp;quot;GPL-2&amp;quot;&lt;br /&gt;
SLOT=&amp;quot;0&amp;quot;&lt;br /&gt;
KEYWORDS=&amp;quot;~amd64 ~x86&amp;quot;&lt;br /&gt;
IUSE=&amp;quot;tiff jpeg png freetype fontconfig openexr ffmpeg debug&amp;quot;&lt;br /&gt;
&lt;br /&gt;
DEPEND=&amp;quot;dev-cpp/libxmlpp&lt;br /&gt;
        dev-libs/libsigc++&lt;br /&gt;
	sys-devel/libtool&lt;br /&gt;
	dev-util/cvs&lt;br /&gt;
	png? ( media-libs/libpng )&lt;br /&gt;
	tiff? ( media-libs/tiff )&lt;br /&gt;
	jpeg? ( media-libs/jpeg )&lt;br /&gt;
	imagemagick? ( media-gfx/imagemagick )&lt;br /&gt;
	freetype? ( media-libs/freetype )&lt;br /&gt;
	fontconfig? ( media-libs/fontconfig )&lt;br /&gt;
	openexr? ( media-libs/openexr )&lt;br /&gt;
	ffmpeg? ( media-video/ffmpeg )&lt;br /&gt;
	&lt;br /&gt;
        virtual/ETL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
PROVIDE=&amp;quot;virtual/synfig&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ESVN_REPO_URI=&amp;quot;http://svn.voria.com/code/synfig-core/trunk&amp;quot;&lt;br /&gt;
ESVN_PROJECT=&amp;quot;${PN}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit subversion&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
src_compile() {&lt;br /&gt;
	libtoolize --ltdl --copy -f&lt;br /&gt;
	autoreconf -if&lt;br /&gt;
	econf \&lt;br /&gt;
	$(use_enable ffmpeg) \&lt;br /&gt;
	$(use_enable libdv) \&lt;br /&gt;
	$(use_enable imagemagick) \&lt;br /&gt;
	$(use_enable ffmpeg libavcodec) \&lt;br /&gt;
	$(use_enable freetype) \&lt;br /&gt;
        $(use_enable debug) \&lt;br /&gt;
	|| die&lt;br /&gt;
	emake || die&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
src_install() {&lt;br /&gt;
	make DESTDIR=&amp;quot;${D}&amp;quot; install || die&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== media-gfx/synfig-studio-svn ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION=&amp;quot;Synfig: Film-Quality Vector Animation (main UI, SVN-sources)&amp;quot;&lt;br /&gt;
HOMEPAGE=&amp;quot;http://www.synfig.com/&amp;quot;&lt;br /&gt;
SRC_URI=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
LICENSE=&amp;quot;GPL-2&amp;quot;&lt;br /&gt;
SLOT=&amp;quot;0&amp;quot;&lt;br /&gt;
KEYWORDS=&amp;quot;~amd64 ~x86&amp;quot;&lt;br /&gt;
IUSE=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
DEPEND=&amp;quot;&amp;gt;=dev-cpp/gtkmm-2.4&lt;br /&gt;
        virtual/synfig&lt;br /&gt;
	!media-gfx/synfig-studio&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ESVN_REPO_URI=&amp;quot;http://svn.voria.com/code/synfig-studio/trunk&amp;quot;&lt;br /&gt;
ESVN_PROJECT=&amp;quot;${PN}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit subversion&lt;br /&gt;
&lt;br /&gt;
src_compile() {&lt;br /&gt;
	autoreconf -if&lt;br /&gt;
	econf || die&lt;br /&gt;
	emake || die&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
src_install() {&lt;br /&gt;
	make DESTDIR=&amp;quot;${D}&amp;quot; install || die&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Dev:Build_Instructions&amp;diff=5946</id>
		<title>Dev:Build Instructions</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Dev:Build_Instructions&amp;diff=5946"/>
				<updated>2008-02-29T23:55:47Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: /* synfig */ Added gentoo cvs dependence&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[[Category:Building]]&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
&lt;br /&gt;
If you are using the released versions instead of SVN, the first 3 steps for each component are not necessary. For released versions, &amp;quot;./configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; sudo make install&amp;quot; should be enough.&lt;br /&gt;
&lt;br /&gt;
If you are using packages for synfig's dependencies, you want the '''development packages''' not the main packages. Check below for your distribution's packages.&lt;br /&gt;
&lt;br /&gt;
Please read the [[Source code|source code]] page, [[Download|download page]] and the [[FAQ]] to find out about any issues that you may run into along the way.&lt;br /&gt;
&lt;br /&gt;
Some Linux/BSD distros have a pkg-config that doesn't look in /usr/local/lib/pkgconfig by default. So if you are installing in anywhere other than the system pkg-config path, please run &amp;quot;export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig&amp;quot; or similar before building or installing anything.&lt;br /&gt;
&lt;br /&gt;
Don't use automake 1.4, there are problems with it.&lt;br /&gt;
&lt;br /&gt;
Using automake 1.9, 'make install' seems to re-link and re-install all the synfig core modules every time whether they have changed or not.  [http://dooglus.rincevent.net/synfig/automake.html here] is an ugly workaround - it's only worth using if you intend to rebuild synfig repeatedly&lt;br /&gt;
&lt;br /&gt;
The instructions below result in 3 separate subversion working directories being created.  This is inconvenient to work with - you'll need to 'svn commit' in 3 different places to send changes, 'svn update' in 3 different places to get the latest updates, etc.  [[Subversion|This page]] shows how to arrange for the code to be checked out into a single working directory. You can also download a daily updated tarball that uses this from the [[Source code|source code]] page.&lt;br /&gt;
&lt;br /&gt;
The CVS requirement is only because the autopoint program run by autoreconf needs CVS. You can avoid the need for CVS by disabling the translation/gettext stuff in configure.ac.&lt;br /&gt;
&lt;br /&gt;
If you don't want to install to a system-wide directory using sudo, run something like these commands before starting:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export PREFIX=&amp;quot;$HOME/opt&amp;quot;&lt;br /&gt;
export PKG_CONFIG_PATH=&amp;quot;$PKG_CONFIG_PATH:$PREFIX/lib/pkgconfig&amp;quot;&lt;br /&gt;
export PATH=&amp;quot;$PATH:$PREFIX/bin&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And when you run ./configure, run it with --prefix=&amp;quot;$PREFIX&amp;quot; and don't use sudo when you do make install.&lt;br /&gt;
&lt;br /&gt;
You can use [http://zelgadis.profusehost.net/files/synfig/synfigstudio-svn-build this] script to quickly build/update synfigstudio from SVN (software installed in ~/synfig-svn by default).&lt;br /&gt;
&lt;br /&gt;
== System-specific instructions ==&lt;br /&gt;
&lt;br /&gt;
* Gentoo: SVN [[Gentoo Ebuilds|ebuilds]] are available&lt;br /&gt;
* MacOS X: [[Building_On_Mac_OS_X|instructions for building]] with the GTK+ Aqua port are available.&lt;br /&gt;
* Windows: [[Windows build instructions|instructions for building]] in [[Mingw_installation|mingw]] are available.&lt;br /&gt;
&lt;br /&gt;
= ETL = &lt;br /&gt;
&lt;br /&gt;
ETL is a template library, there is nothing to build really, it just needed to be installed.&lt;br /&gt;
&lt;br /&gt;
Requires: autoconf automake&amp;lt;br&amp;gt;&lt;br /&gt;
* Debian: build-essential autoconf automake&lt;br /&gt;
&lt;br /&gt;
# svn co http://svn.voria.com/code/ETL/trunk/ etl&lt;br /&gt;
# cd etl&lt;br /&gt;
# autoreconf --install --force&lt;br /&gt;
# ./configure&lt;br /&gt;
# sudo make install&lt;br /&gt;
# cd ..&lt;br /&gt;
&lt;br /&gt;
= synfig =&lt;br /&gt;
&lt;br /&gt;
Requires: ETL, libxml++, libsigc++, libltdl, libtool, gettext, cvs&amp;lt;br&amp;gt;&lt;br /&gt;
* Debian: etl-dev libxml++2.6-dev libsigc++-2.0-dev libltdl3-dev libtool gettext cvs&lt;br /&gt;
* Gentoo: virtual/ETL dev-cpp/libxmlpp dev-libs/libsigc++ dev-util/cvs&lt;br /&gt;
** If you are using ./configure --prefix=&amp;quot;$PREFIX&amp;quot; to configure synfig, do not install virtual/ETL.&lt;br /&gt;
&lt;br /&gt;
Note: libpng isn't required to build synfig, but if you build synfig without PNG support and go on to build synfigstudio, that step will fail (because the build process for synfigstudio uses synfig to create .png icon files).  The package is  libpng12-dev on Debian or media-libs/libpng on Gentoo.&lt;br /&gt;
&lt;br /&gt;
Optional: libpng, libmng, libtiff, libjpeg, libfreetype, libfontconfig, libopenexr, libavcodec, libmagick++, vimage (MacOS only, proprietary)&amp;lt;br&amp;gt;&lt;br /&gt;
* Debian: libpng12-dev libmng-dev libtiff4-dev libjpeg62-dev libfreetype6-dev libfontconfig1-dev libopenexr-dev libavcodec-dev libavformat-dev libmagick++9-dev&lt;br /&gt;
** if using debian-multimedia.org debs swap the libav packages with the virtual packages libavformatcvs-dev libavcodeccvs-dev libavutilcvs-dev from debian-multimedia&lt;br /&gt;
* Gentoo: sys-devel/libtool media-libs/libpng media-libs/libmng media-libs/tiff media-libs/jpeg media-libs/freetype media-libs/fontconfig media-libs/openexr media-libs/libavcodec&lt;br /&gt;
Runtime: encodedv (from libdv), ffmpeg, convert (from imagemagick)&lt;br /&gt;
* Debian: libdv-bin ffmpeg imagemagick&lt;br /&gt;
* Gentoo: media-libs/libdv media-video/ffmpeg media-gfx/imagemagick&lt;br /&gt;
&lt;br /&gt;
# svn co http://svn.voria.com/code/synfig-core/trunk/ synfig-core&lt;br /&gt;
# cd synfig-core&lt;br /&gt;
# libtoolize --ltdl --copy --force&lt;br /&gt;
# autoreconf --install --force&lt;br /&gt;
# ./configure&lt;br /&gt;
# make&lt;br /&gt;
# sudo make install&lt;br /&gt;
# cd ..&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* Don't use --enable-half, it is slow.&lt;br /&gt;
&lt;br /&gt;
= synfigstudio =&lt;br /&gt;
&lt;br /&gt;
Requires: ETL, synfig, gtkmm &amp;gt;= 2.4, gtk &amp;gt;= 2.0, glibmm, libsigc++, libltdl, libtool, gettext, cvs&amp;lt;br&amp;gt;&lt;br /&gt;
* Debian: etl-dev libsynfig-dev libgtkmm-2.4-dev libgtk2.0-dev libglibmm-2.4-dev libsigc++-2.0-dev libltdl3-dev libtool gettext cvs&lt;br /&gt;
* Gentoo: virtual/ETL virtual/synfig dev-cpp/gtkmm-2.4 dev-libs/libsigc++ sys-devel/libtool&lt;br /&gt;
** If you are using ./configure --prefix=&amp;quot;$PREFIX&amp;quot; to configure synfigstudio, do not install virtual/ETL or virtual/synfig.&lt;br /&gt;
Optional: fonts (for the images), [http://www.fmod.org FMOD] (proprietary)&lt;br /&gt;
* Debian: ttf-freefont ttf-dejavu ttf-dustin&lt;br /&gt;
* Gentoo: freefonts dejavu&lt;br /&gt;
&lt;br /&gt;
# svn co http://svn.voria.com/code/synfig-studio/trunk/ synfigstudio&lt;br /&gt;
# cd synfigstudio&lt;br /&gt;
# autoreconf --install --force&lt;br /&gt;
# ./configure&lt;br /&gt;
# make&lt;br /&gt;
# sudo make install&lt;br /&gt;
# cd ..&lt;br /&gt;
&lt;br /&gt;
= synfig-docs =&lt;br /&gt;
&lt;br /&gt;
(This step isn't required to run synfig or synfigstudio, and the documents it gets you are really quite out of date)&lt;br /&gt;
&lt;br /&gt;
This is basically a copy of what is on this wiki.&lt;br /&gt;
&lt;br /&gt;
Requires: sgml processor, ldp docbook stylesheets, db2ps, db2pdf&lt;br /&gt;
* Debian: openjade ldp-docbook-dsssl docbook-utils&lt;br /&gt;
&lt;br /&gt;
# svn co http://svn.voria.com/code/synfig-docs/trunk/ synfig-docs&lt;br /&gt;
# cd synfig-docs&lt;br /&gt;
# make multiple-html&lt;br /&gt;
# make ps&lt;br /&gt;
# make pdf&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Dev:Wish_list&amp;diff=5943</id>
		<title>Dev:Wish list</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Dev:Wish_list&amp;diff=5943"/>
				<updated>2008-02-29T21:38:26Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: /* Mathematical functions to animate */ my vote for (4)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Got a great idea for a new feature? Just add it here, or on the [http://sourceforge.net/tracker/?group_id=144022&amp;amp;atid=757419 feature requests tracker]. Before you do, please check the [http://svn.voria.com/code/ETL/trunk/TODO etl], [http://svn.voria.com/code/synfig-core/trunk/TODO synfig] and [http://svn.voria.com/code/synfig-studio/trunk/TODO synfigstudio] TODO files for similar ideas. Please add a rating of how essential this feature is to your workflow according to the following scale:&lt;br /&gt;
&lt;br /&gt;
#&amp;quot;Well, it might be nifty. To someone.&amp;quot;&lt;br /&gt;
#&amp;quot;I probably would make use this&amp;quot;&lt;br /&gt;
#&amp;quot;It's not essential, but I'd really like to have this at my disposal.&amp;quot;&lt;br /&gt;
#&amp;quot;Synfig would be soooo much better with this change&amp;quot;&lt;br /&gt;
#&amp;quot;I can't/won't use Synfig without it!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Wishes ==&lt;br /&gt;
&lt;br /&gt;
=== Good high-level documentation of the source code ===&lt;br /&gt;
&lt;br /&gt;
(2) It'd be nice if a newbie could quickly navigate around the source code. The best thing to do would be to add top-level comments in each file, explaining what that file does, a README.TXT in each directory, explaining what's in that directory. This would be pretty fast and easy to do, and make it much easier for new programmers to join. &lt;br /&gt;
&lt;br /&gt;
Time permitting, it would also be good to document on a high level what the data structures are, but that's harder, since those tend to evolve, and it is often difficult to keep in sync. It would also be useful to document what individual functions do (just a one-liner high-level description), but that also takes more time.&lt;br /&gt;
: There is a page link in the wiki that connect to the [http://www.synfig.com/doc Synfig API Documentation]. I think this link should be highlighted to be more accessible for newbies contributors and mature developers (the link was found [[Releases/DeveloperPreview#Support | here]]). --[[User:Genete|Genete]] 10:02, 11 December 2007 (EST)&lt;br /&gt;
&lt;br /&gt;
=== Mathematical functions to animate ===&lt;br /&gt;
(2/4) If you want to make a waving flag, it would be handful a sine function, tuned with random correctors, for example. &lt;br /&gt;
: -This should generate waypoints each 1, 2, 4 frames or any other step at artist's wish.&lt;br /&gt;
: -When applying a function you can add it to current values, add it to 1st frame values or simply override old values. Perhaps other options (such multiplication) would be fine, too. Something like texture editor in [http://www.artofillusion.org Art of Illusion], perhaps.&lt;br /&gt;
Perhaps it would be useful reusing the [http://www.gnu.org/software/octave/ Octave] source code to parse mathematical expressions.&lt;br /&gt;
I have rated this wish with a '2' because undoubtly many users will not be familiar to mathematical concepts, but for those who will be, I'd rate it with a 4. It would be possible to make a ball describing a parabolic moving in no time.&lt;br /&gt;
[[User:ajotatxe|ajotatxe]] 20 November 2007&lt;br /&gt;
: dooglus can probably chime in better than I here (see his example of balls on mathematical paths at http://uk.youtube.com/watch?v=YTpSfUthuVE ), but I believe that this is already possible.  Synfig does support a variety of mathematical transforms for parameters, although the way you do this is by no means intuitive.  (You might also want to check out the preambletaffy.sifz example for an easier approach to a waving flag. I know you were just using that as an example, but for the record...) [[User:Pxegeek|Pxegeek]] 00:58, 21 November 2007 (EST)&lt;br /&gt;
&lt;br /&gt;
: I'd also rate it with a (4) (and updated the rating accordingly), not for this special case, but to make many workarounds much easier.  Simulating [Parabolic Shot|free fall], for example, would be a lot easier with real formulas.  I don't know, though how easy it will be to implement, maybe waiting for a scripting interface to be implemented is better than hacking this feature in an ad-hoc manner.  --[[User:Rubikcube|Rubikcube]] 16:38, 29 February 2008 (EST)&lt;br /&gt;
&lt;br /&gt;
=== Warning about editing bizarre things in animate editing mode ===&lt;br /&gt;
(3.5) It seems to have little sense animate certain things like Blend Method or Type of Feather. It would be very nice that the program asked comfirmation if you change these attributes in animate editing mode. If you do want to, you would have three options: &amp;quot;Yes, never ask&amp;quot;, &amp;quot;Yes, never ask for this attribute&amp;quot;, &amp;quot;No&amp;quot;. I guess that internally, this attributes has integer type (or something like that) and the attributes that you normally want to animate, float type, so I think that this feature is relatively easy to implement. My English is not very good, so please feel free to fix this post.&lt;br /&gt;
[[User:ajotatxe|ajotatxe]] 20 November 2007&lt;br /&gt;
&lt;br /&gt;
=== General outline / Polygon-based Outline / &amp;quot;Set Tangents to Zero&amp;quot; button ===&lt;br /&gt;
(3.5) I'm no artist, thus my primary form of art is stick figures, not to mention, many interesting animations are done in stick-figure style. Stick figures must be perfectly straight to get the effect across, so when I'm making an outline using B-Curves, it is too time consuming to set the tangents to 0 each time. Similarly, outlines of other shapes like squares, circles and so forth would be very useful. Whichever of the above is easiest, please implement right away. --[[User:Dragontamer|Dragontamer]] 02:35, 19 November 2007 (EST)&lt;br /&gt;
: For perfectly straight lines, click without moving the mouse.  You will get a single point with no tangents.  Outline shapes would require some development, particularly with some thought given to backward compatibility.  A workaround you might consider is to create a duplicate shape with a different color and make the top one slightly smaller, so the outline of the one below shows.  [[User:Pxegeek|Pxegeek]] 21:58, 19 November 2007 (EST)&lt;br /&gt;
:: Well, in general, whenever I click on a point to edit it (say, to make it move somewhere in animation mode), there is a decent chance that I click on a tangent instead. Then, if I want to right click the point itself, I usually right click the tangent marker instead. It isn't that big a deal, but simplicity at the cost of power generally is a good thing, especially when it will save a few mouse clicks. &lt;br /&gt;
:: As for the outlines, yeah, I've tried that and it is a decent solution for now, although it is no replacement for a real outline. I am going to also experiment with a clamp to see if I can make the center of the shape have 100% alpha... but I don't have synfig on the computer I'm on right now. Thanks for the tips Pxegeek. --[[User:Dragontamer|Dragontamer]] 01:58, 27 November 2007 (EST)&lt;br /&gt;
::: You can press Alt+3 to hide tangent ducks. --[[User:Zelgadis|Zelgadis]] 09:27, 27 November 2007 (EST)&lt;br /&gt;
&lt;br /&gt;
=== Bones with FK &amp;amp; IK + grouping of objects into folders ===&lt;br /&gt;
&lt;br /&gt;
(1) Bones cane move specific vector assigned to them or the bones can have envelopes that move the vectors within their field of influence, much Like Anime Studio/Moho does. It's quite a time saving process of animating. Objects created can be saved into separate groups or folders using the same system as Anime Studio/Moho -Shadowphoenix 27/8/2007&lt;br /&gt;
&lt;br /&gt;
=== Copy &amp;amp; Paste/Image Importing ===&lt;br /&gt;
&lt;br /&gt;
(4) I sometimes make graphics in other programs, or use clipart and other images. Would it be possible for Synfig to be able to import images and/or copy and paste them?--Khlieeq 2007-07-19&lt;br /&gt;
Well, it doesn't support Copy &amp;amp; paste from the clipboard, but you can import images using &amp;quot;New Layer -&amp;gt; Other -&amp;gt; Import&amp;quot;.  This will create an Import layer, for which you can then edit the properties to point to the file containing your image.  PXEGeek.  2007-07-19&lt;br /&gt;
&lt;br /&gt;
=== Animated sketch ===&lt;br /&gt;
&lt;br /&gt;
(1) it would be great, if the tool Sketch will return and it will be animatable (for example, in a form of a special sketch-layer). --Zelgadis 2007-06-14&lt;br /&gt;
&amp;lt;br&amp;gt;For the first part of the request, note that the sketch tool can be re-enabled using environment variables.  See [[FAQ#Where_did_the_polygon.2C_draw.2C_sketch.2C_and_width_tools_go.3F|FAQ]] for details.  [[user:pxegeek|PXEGeek]] 9/26/07&lt;br /&gt;
&lt;br /&gt;
=== Duck for Amount value in Zoom layer ===&lt;br /&gt;
&lt;br /&gt;
(2) It would be nice if Amount value in Zoom layer was controlled by additional duck. --[[User:Zelgadis|Zelgadis]] 02:49, 29 December 2007 (EST)&lt;br /&gt;
: I found that I can better use Warp layer instead of Zoom to change size. But it'd be nice to have Amount duck for Zoom layer anyway...&lt;br /&gt;
:: The Amount parameter works exponentially; each time you add 1 to the Amount, the image is zoomed by a further factor of e (= 2.71828 or so).  Would a duck be any use if it just controlled the value of Amount in a linear way?&lt;br /&gt;
:: Workarounds include: export Amount, select it in the children dialog.  Whatever's selected in the children dialog shows a duck.  You can adjust it using that duck.&lt;br /&gt;
:: Also, if you use a Stretch layer, convert the Amount to Composite, export the X-Axis and connect it to the Y-Axis, then you have a duck-controllable fixed-aspect zoom. -- [[User:Dooglus|dooglus]] 15:32, 15 January 2008 (EST)&lt;br /&gt;
::: Yeah I found this workaround, but it's to much actions - i prefer better use Warp or Stretch layers. Why not the link Amount duck and Amount value with logarithmic function? ;) --[[User:Zelgadis|Zelgadis]] 10:33, 17 January 2008 (EST)&lt;br /&gt;
&lt;br /&gt;
=== Recursive Waypoint Manipulation ===&lt;br /&gt;
&lt;br /&gt;
(4) it is really tiresome to revert changes to waypoints created by manipulating tangent/position ducks or change their interpolation functions. making it possible to right-click-modify the waypoint shown for objects that have some waypoint in a referenced sub-object would be great! -- timonator 2007-06-01&lt;br /&gt;
:You can do it in two ways: changing the interpolation method of the waypoint of paste canvas or editing the keyframe properties. The first allow to modify the waypoints interpolation method for all the waypoints of all the parameters of all the layers that are inside the paste canvas layer. You can right click on the left or right part of the waypoint to edit by a context menu the left or the right interpolation method of the waipoints. The second method would add and modify all the parameters that have any waypoint in the animation. See [[Keyframe]] for more detail. --[[User:Genete|Genete]] 13:10, 29 October 2007 (EDT)&lt;br /&gt;
&lt;br /&gt;
=== Automatic colour palette optimisation ===&lt;br /&gt;
&lt;br /&gt;
(0) it would be nice to use libcontrast [http://david.navi.cx/blog/?p=132] [http://david.navi.cx/blog/?p=94] [http://david.navi.cx/blog/?p=99] [http://svn.gnome.org/svn/xchat-gnome/trunk/src/libcontrast/] to automatically adjust selected or all the palette items for best visual contrast. It would also be interesting to have a layer that uses this code to filter the image.&lt;br /&gt;
&lt;br /&gt;
=== Tweening for images developed in other imaging programs ===&lt;br /&gt;
&lt;br /&gt;
It's obvious I am a beginner at image movement, but morphing is not enough: movement across the page is needed.  Thanks for listening. [[User:Comwell@bellsouth.net|Comwell]]&amp;lt;br&amp;gt;&lt;br /&gt;
Imported images can be moved across the page.  They can also be scaled, rotated and deformed.  Was there a specific example you had in mind?  [[User:Pxegeek|pxegeek]]&amp;lt;br&amp;gt;&lt;br /&gt;
:I also would like a way to tween images that have been drawn in other programs. I've had trouble drawing with Bline tool and the drawing tool in Synfig, and I'd rather just draw with a paint brush (like the one in Photoshop). Another problem I have is that Synfig tends to shut down on me every 20 minutes or so, and it's really frustrating even with the auto recover feature, because my sketches disappear. It'd be nice if I'm able to draw all of the keyframes in Photoshop or another image program and import it to Synfig so that Synfig can tween and animate them. Thank you. [[User:xychefoo@gmail.com|Huina]]&lt;br /&gt;
::You CAN use images, drawn in other programs. Just select &amp;quot;File-&amp;gt;Import&amp;quot; from [[Canvas Menu Caret|canvas menu]] --[[User:Zelgadis|Zelgadis]] 01:39, 24 November 2007 (EST)&lt;br /&gt;
:::But how do you animate using images from other sources? I tried to make 2 keyframes with 2 different images, and it doesn't animate. It just stays as 1 picture for the entire render. The closest thing I saw to importing images from another source into Synfig and having it animate is the Walking Cycle Tutorial, but I would still have to trace the images to make it animate. As I said earlier, I'm not entirely fond of using the draw/Bline tool.  [[User:xychefoo@gmail.com|Huina]]&lt;br /&gt;
:::: Huina, there's no way to do what you want right now.  Interpolating between two images that are not created in Synfig is well beyond its scope right now.  However, what you could do is take an image and separate elements of the picture onto different layers (e.g. have a picture of an arm and another of the rest of the body) and you can move those around, stretch and rotate them.  (If you're familiar with the work of Terry Gilliam on Monty Python you'll know what I mean) I don't know how feasible it is to implement your request (I suspect some heavy lifting).  We'll keep it on the list, but don't hold your breath.  [[User:Pxegeek|Pxegeek]] 19:57, 24 November 2007 (EST)&lt;br /&gt;
&lt;br /&gt;
:::: I think, you hardly find any other animation package  which allow you to do such things. You could use a special tools for this task, like xmorph (http://xmorph.sourceforge.net/). But to do the tween between two bitmap images you STILL need to set points. It's not tracing, but very similar. Anyway, result may be poor and I'd better suggest to use technique, described in Walking Cycle Tutorial or which the [[User:Pxegeek|Pxegeek]] meant. --[[User:Zelgadis|Zelgadis]] 02:08, 25 November 2007 (EST)&lt;br /&gt;
&lt;br /&gt;
:::: There is a technique called &amp;quot;optical flow&amp;quot;.  It takes two input frames and calculates the movement of each individual pixel between the frames, allowing interpolation to be done. Here's an example: http://www.fxguide.com/article333.html.  It doesn't require setting of control points, but it has problems it's own set of problems: http://www.fxguide.com/article333.html. --[[User:Yoyobuae|Yoyobuae]] 13:32, 3 February 2008 (EST)&lt;br /&gt;
&lt;br /&gt;
=== Auto-link option in [[Draw tool]] ===&lt;br /&gt;
&lt;br /&gt;
(4) so that you can draw a line, and have its endpoint automatically link to a duck - or if Auto-connect is off, you can get a line object linked to the end of another line object. / I missed this too, it even should be like that by default I think. [[User:Maxy|Maxy]] 13:22, 25 Apr 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
: Isn't this done already?  We don't have line objects, but blines are automatically linked to if auto-connect is on.  Am I missing something? -- [[User:Dooglus|dooglus]] 17:29, 27 September 2007 (EDT)&lt;br /&gt;
&lt;br /&gt;
::To clarify dooglus' comments - If you have an outline created by the draw tool highlighted in the layer dialog and the &amp;lt;b&amp;gt;auto-extend&amp;lt;/b&amp;gt; checkbox is checked, then you can continue drawing with the draw tool in that same layer.  Blines created with the Bline tool cannot be extended once a different tool or layer is selected.  [[User:Pxegeek|Pxegeek]] 23:46, 12 October 2007 (EDT)&lt;br /&gt;
&lt;br /&gt;
::: A line is a line - Synfig doesn't remember whether it was created with the Bline tool or the Draw tool - so you can extend blines created with the bline tool using the draw tool.  Just make sure the line is selected (so that its ducks are visible), not looped (so that it has end points to extend from), enable the draw tool, check 'auto extend' and start drawing at one of its end ducks. [[User:Dooglus|dooglus]] 05:47, 13 October 2007 (EDT)&lt;br /&gt;
&lt;br /&gt;
So this sounds like it is already done.  But on a related note, being able to open an existing bline in the bline tool to extend it would be useful. -- [[User:Dooglus|dooglus]] 04:51, 29 January 2008 (EST)&lt;br /&gt;
&lt;br /&gt;
=== Arbitrary Color Channels ===&lt;br /&gt;
&lt;br /&gt;
&amp;amp;mdash; The ability for the user to create any number of custom channels for various purposes.&lt;br /&gt;
&lt;br /&gt;
=== Autorecover History ===&lt;br /&gt;
&lt;br /&gt;
&amp;amp;mdash; It would be great if autorecover could also recover the associated history of a file in the event of a crash.&lt;br /&gt;
&lt;br /&gt;
=== Layer Convert ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;(4)&amp;lt;/strike&amp;gt; (2) &amp;amp;mdash; The original intent of this feature request has been solved and documented - [[How_do_I#Fill_an_outline.3F|How do I....Fill an Outline?]] - but it would still be nice to have a way to convert one sort of path layer to another. ''(Downgraded to level 2) [[User:SnapSilverlight|Snap]] 12:32, 17 Jan 2006 (PST)''&lt;br /&gt;
&lt;br /&gt;
=== Layer hide boolean parameter ===&lt;br /&gt;
&lt;br /&gt;
(3) &amp;amp;mdash; An animatable way to remove a layer from visibility and consideration in tools. And as an option, to hide the layer in the layer list while it is invisible. This crosses over functionality from the [[Amount Parameter]], the Show/Hide checkbox in the [[Layers Panel]], and builds upon it as well, allowing the [[Layers Panel]] to dynamically unclutter. ''(This feature request is a refactoring of the [[Amount Parameter]])''&lt;br /&gt;
: With the addition of the [[Convert#Switch|Switch]] type conversion it is not needed this feature request. You can convert the Amount parameter to a Switch value and give 0 and 1 to the Linked OFF/ON values. --[[User:Genete|Genete]] 13:20, 29 October 2007 (EDT)&lt;br /&gt;
&lt;br /&gt;
=== Vector fill bucket ===&lt;br /&gt;
&lt;br /&gt;
(3) &amp;amp;mdash; Like the traditional bitmap fill, but this fills the area clicked out to the nearest boundary paths with a region of that area, set to the foreground color (it actually would create a new [[Region Layer|region layer]]). &amp;lt;p&amp;gt;Alternatively, a single-duck layer object, that performs a simple bitmap fill from its (animatable) location, with its stored color value. (This second approach is similar to the behavior of one of Softimage's TOONZ[http://www.google.com/search?q=softimage+TOONZ]'s tools)&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;If this is implemented, it will probably be necessary to change the existing &amp;quot;fill&amp;quot; tool's name and icon to a &amp;quot;color injector&amp;quot; (hypodermic needle / turkey injector icon) tool, as that's closer to describing what it does.&lt;br /&gt;
&lt;br /&gt;
=== [[redraw tool]] ===&lt;br /&gt;
&lt;br /&gt;
(4-5) &amp;amp;mdash; Intutive reshaping of path-based layers. See link.&lt;br /&gt;
&lt;br /&gt;
=== [http://developer.gnome.org/projects/gup/hig/ Gnome HIG Compliance] ===&lt;br /&gt;
&lt;br /&gt;
&amp;amp;mdash; This should solve all complaints about the layout, without requiring Synfig to be &amp;quot;just like program (x)&amp;quot;. See [[UI Reloaded]] for progress on this.&lt;br /&gt;
&lt;br /&gt;
=== Feedback for [[Smooth Move Tool]] ===&lt;br /&gt;
&lt;br /&gt;
(3) &amp;amp;mdash; This tool does what a lot of folks are looking for, warping selected ducks in a &amp;quot;soft&amp;quot; fashion. But it's not very obvious what sort of effect it will have, from the tool's interface. It needs some sort of momentary center-of-action and radius indicator at the very least. Perhaps an &amp;quot;influence gradient&amp;quot; overlaid on the canvas once Synfig's core is sped up?&lt;br /&gt;
&lt;br /&gt;
=== Networkability ===&lt;br /&gt;
&lt;br /&gt;
(2) &amp;amp;mdash; Like Inkscape's &amp;quot;inkboard&amp;quot; feature (using Jabber), or Blender's Verse server [http://www.blender.org/modules/verse/index.php], or OpenCanvas's Networking option. This should probably farm off all the networking stuff to the telepathy framework so that synfig doesn't have to deal with all the account/etc issues.&lt;br /&gt;
&lt;br /&gt;
=== Riding ducks ===&lt;br /&gt;
&lt;br /&gt;
(2) &amp;amp;mdash; Not chocobos. The ability to link a duck from one shape to an arbitrary position on another path, without creating an extra shape duck on that path.&lt;br /&gt;
&lt;br /&gt;
=== Intuitive tangent modification ===&lt;br /&gt;
&lt;br /&gt;
(3) &amp;amp;mdash; (BBQ Pulled Duck) Inkscape has this for still handles - basically, grab a section of the spline between handles, and pull it around, the program automatically alters the tangent handles to match. What would be really neat is if you could do the same for temporal handles - be able to grab the spline between keyframes, and yank it around, and have Synfig automatically adjust the key interpolation to match. Not sure exactly what the workflow in the UI would be for this, however.&lt;br /&gt;
&lt;br /&gt;
=== Plugin API ===&lt;br /&gt;
&lt;br /&gt;
(1) &amp;amp;mdash; Would be nice to enable additional functionality to be added to the program without it necessarily needing to be in the Synfig source tree. ''According to the Synfig 0.61.01 roadmap on [http://deepdarc.com/ deepdarc.com], there is a plugin API already implemented. So instead, this may be a [[Wiki Wish List|Wiki Wish]] for documentation, depending on how much has already been completed. [[User:SnapSilverlight|Snap]] 19:57, 13 Jan 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
=== Python support ===&lt;br /&gt;
&lt;br /&gt;
(1) of some sort will no doubt be demanded by the userbase eventually, for studio-specific automation of tasks, noncompiled plugins, etc. I ([[User:Snap|SnapSilverlight]]) don't have any particular use for it at the moment, tho'.&lt;br /&gt;
&lt;br /&gt;
=== mod_synfig ===&lt;br /&gt;
&lt;br /&gt;
(1) &amp;amp;mdash; For Apache. Render .sif to some format like png/mng on access.&lt;br /&gt;
&lt;br /&gt;
=== synfig nsplugin ===&lt;br /&gt;
&lt;br /&gt;
(1) &amp;amp;mdash; Let Mozilla and Mozilla-based view synfig files in-browser.&lt;br /&gt;
&lt;br /&gt;
=== Image filmstrip import ===&lt;br /&gt;
&lt;br /&gt;
(2) &amp;amp;mdash; Allow import of a series of images (TGA, etc) as frames of an animation, on a layer. &amp;lt;br&amp;gt;&lt;br /&gt;
Response - 'lst' files of a list of images can be imported.  I've used this to develop a walk cycle.  See [[Walk_Cycle|Walk cycle]] for an example.  [[user:pxegeek|pxegeek]]&lt;br /&gt;
&lt;br /&gt;
=== Bitmap Objects and Backgrounds ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;(5)&amp;lt;/s&amp;gt;(0) &amp;amp;mdash; Simmilar to the above but for more than for just purely bitmap based animations. I feel that the to do production quality animations you need production quality backgrounds, foregrounds, and effects. Many of which are very difficult or even impossible to achieve with vector based graphics. I suggest support for alpha transparencies as well to make this truely useful. An example of how this could be used would be a bitmap background and a bitmap foreground that can be panned as the scene moves.&lt;br /&gt;
::''Static bitmaps with alpha are possible already, if that is what you mean. I have just documented it in [[How do I]]. [[User:Maxy|Maxy]] 06:35, 9 Apr 2006 (PDT)''&lt;br /&gt;
&lt;br /&gt;
=== Align function ===&lt;br /&gt;
&lt;br /&gt;
(3) &amp;amp;mdash; Align objects at a common border (as in Inkscape)&lt;br /&gt;
&lt;br /&gt;
=== Improved SVG import ===&lt;br /&gt;
&lt;br /&gt;
(4) &amp;amp;mdash; Currently, all importing an SVG does is render it in ImageMagick. What I want is the ability to import the SVG document so that all the shapes, etc. of the SVG document show up as their equivilant synfig layers - i.e. if I had put them there myself. I'm trying to write a patch for this but the codebase is mostly undocumented. [[User:KMeist|KMeist]] 16:38, 25 Feb 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
[[svg2synfig]] could be incorporated using an open source XSLT processor. --[[User:Dmd|Dmd]] 13:34, 26 January 2008 (EST)&lt;br /&gt;
&lt;br /&gt;
=== Gradient Paint Tool ===&lt;br /&gt;
&lt;br /&gt;
How about a tool that can 'paint' a gradient object.  For example the options would be width and gradient type, one would make a stroke with the tool and the gradient would be automatically applied inside of the outline (set by width).  This would save the trouble of having to the all the encapsulation stuff. (Actually any tool that makes creating gradient one step would be good).--[[User:Triclops|Triclops]] 09:52, 9 Aug 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
=== Character Animation Tools ===&lt;br /&gt;
&lt;br /&gt;
I have seen some interesting methods for helping character design/animation in different 2d/3d software.  Hash's animation master has 'poses' which are extremes of a model, for example smiling and frowning, once you add these extremes ot a set you can use slider to create a pose that somewhere inbetween.  The real power of this is when you have serveral different poses on the same object, a face say,  you can easily come up with new facial expressions. Maybe something similar could be done with synfig using layers and groups, the implementation could something similar to Moho's switch layers. --[[User:Triclops|Triclops]] 09:52, 9 Aug 2006 (PDT)&lt;br /&gt;
: Have you read this tutorial? [[Reuse Animations]]. It is very close to the Switch layer of Moho/Anime Studio. Also You can change the Canvas parameter to any other canvas dynamically in the time line by clicking on it and selecting other exported canvas. Other option is convert the canvas to a Switch type and alternate between two different canvas.  --[[User:Genete|Genete]] 13:26, 29 October 2007 (EDT)&lt;br /&gt;
&lt;br /&gt;
=== Another character Animation Tools ===&lt;br /&gt;
&lt;br /&gt;
Bone system with inverse kinematics, very important for quick animation. You put bones on a drawed man and you can animate him like a puppet. I'm using that in Moho (lost marble product).--[[User:Ziolive|ziolive]] 23 Aug 2006&lt;br /&gt;
&lt;br /&gt;
*'''AVI Backgrounds''' - Is there any way I can add an avi as a background so I could add facial expressions to a stop-motion animated figure. [zotz here, I was thinking DV background or extra timeline. I would like to mix animations with live footage. rating (3/4)]&lt;br /&gt;
&lt;br /&gt;
=== Character tool on Tool Options Dialog ===&lt;br /&gt;
&lt;br /&gt;
I want to use the as a character generator for a TV show. By using chroma key hide the background.  Even better interface to a video overlay card with Alpha blending.&lt;br /&gt;
&lt;br /&gt;
=== Collect for Publication ===&lt;br /&gt;
&lt;br /&gt;
(3/4) - (zotz) Menu item, functionality that would collect alll files referenced in a sif and place them all in a tgz for sending elsewhere or publishing anumations in source form.&lt;br /&gt;
&lt;br /&gt;
=== Object Library ===&lt;br /&gt;
&lt;br /&gt;
(3/4) - (zotz) Haven't thought this all through yet, but synfig could come with a library of categotrised &amp;quot;objects&amp;quot; with a copyleft license (GPL?  CC BY-SA?) An animation clip art type deal.&lt;br /&gt;
**I'd suggest this should be public domain and distributed by openclipart.org -- --[[User:PaulWise|pabs]]&lt;br /&gt;
&lt;br /&gt;
=== Flash Export ===&lt;br /&gt;
&lt;br /&gt;
(3/4) Well, might just be me but if there was a posiblity to  export in .swf or .fla, I think the project might become a lot more popular.[[User:Conceit|Conceit]]&lt;br /&gt;
&lt;br /&gt;
(4/5) I wholeheartedly agree. I would definitely use synfig more if this feature were added and it would most definitely increase popularity. [[User:cdj05a|cdj05a]]&lt;br /&gt;
&lt;br /&gt;
=== Single window ===&lt;br /&gt;
&lt;br /&gt;
(2/4)why does Synfig generate so many separate windows? just starting it clutters my desktop, I think it would be useful if they were atleast displayed as one in the start bar. [[User:Conceit|Conceit]]&lt;br /&gt;
&lt;br /&gt;
=== Line width tool ===&lt;br /&gt;
(4) It will be good to have a tool for easy changing line width. There was a such tool in earlier versions, but it's not usable. I'm often use variable line width, when drawing in synfig, so it is important for me. -- [[User:Zelgadis|Zelgadis]] 2007-09-09&lt;br /&gt;
&lt;br /&gt;
: It is [[FAQ#Where did the polygon, draw, sketch, and width tools go?|still available]].  Also, you can turn on the width ducks, using Alt-5. -- [[User:Dooglus|dooglus]] 12:18, 9 October 2007 (EDT)&lt;br /&gt;
&lt;br /&gt;
:: It is available, but I never was able to figure out how it works. Alt-5 works, but it is hard to set width to zero, for example. -- [[User:Zelgadis|Zelgadis]] 2007-09-10&lt;br /&gt;
&lt;br /&gt;
::: Are you wanting something that works on one vertex at a time?  Or all the vertices in an area?  Apparently the width tool was designed to work on a bunch of vertices at once.  I didn't figure out how it works though, either. -- [[User:Dooglus|dooglus]] 16:57, 10 October 2007 (EDT)&lt;br /&gt;
&lt;br /&gt;
:::: Width tool is surely a mystery. :) I'm waiting for something that works on one vertex at time. I liked the way as width was changed in Moho (Anime Studio now) - there was a special width tool and holding left mouse button on the vertex and moving cursor left decreasing width value, moving right - increasing. Maybe it make sense to rework Width tool in such way. -- [[User:Zelgadis|Zelgadis]] 2007-09-13&lt;br /&gt;
&lt;br /&gt;
=== Export Wizard ===&lt;br /&gt;
&lt;br /&gt;
(2/4) Conversion and export to other file formats (mpg, avi, flash formats, others, and the synfig format) with a step by step wizard for choosing format and place of saving. Similar to Gimp's saving of .png files but for movie/video type files. --&lt;br /&gt;
[[User:Hiddenghost|hiddenghost]]&lt;br /&gt;
&lt;br /&gt;
=== Using Synfig as a portable app ===&lt;br /&gt;
&lt;br /&gt;
(3) This isn't really a feature request (though it could be) but I was wondering if synfig could be used as a portable application (as in www.portableapps.com). Does the windows install require registry access? i really want to use Synfig at work, but I'm reluctant to install it just in case it leave footprints in the regisitry or something, and it would be sweet to use it on my travels as well. Only thing is, I can't test it out at home because I am using Linux.&lt;br /&gt;
See also: http://portableapps.com/node/5761&lt;br /&gt;
[[User:Zenoscope|zenoscope]]&lt;br /&gt;
&lt;br /&gt;
This isn't currently possible without modifying the source code. That has been on my TODO list for ages [[User:PaulWise|pabs]] 01:17, 26 October 2007 (EDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Allow organize child valuenodes in an hierarchy ===&lt;br /&gt;
(3-2) And allow maintain the organization once the file is saved. Now they are reordered in alphabetical order what is very usefulness. --[[User:Genete|Genete]] 13:37, 29 October 2007 (EDT)&lt;br /&gt;
&lt;br /&gt;
=== Triangle sliders to be always visible ===&lt;br /&gt;
(3) I would like that the triangle sliders from [[Colors Dialog]] and [[Gradient Editor Dialog]] were visible whatever color or channel you're editing. Some times when the color or channel is to bright or light the slider is difficult to distinguish. --[[User:Genete|Genete]] 14:30, 29 October 2007 (EDT)&lt;br /&gt;
&lt;br /&gt;
=== XICC support ===&lt;br /&gt;
&lt;br /&gt;
It would be cool if synfigstudio had support for [http://burtonini.com/blog/computers/xicc XICC].&lt;br /&gt;
&lt;br /&gt;
=== Improved User Experience for First Contact ===&lt;br /&gt;
* Single file download and installer (at least for Windows)&lt;br /&gt;
* Ability to draw the first object directly after starting the application (start with an empty document)&lt;br /&gt;
* Ability to animate the object directly after drawing the first object (new documents have a say 3 seconds timeline)&lt;br /&gt;
In my opinion this is crucial to attract potential users. Because if I see how easy it is to create my first animation I'm going to accept all the bugs and clumsyness. A good example is the Pencil animation software. --[[User:Dmd|Dmd]] 13:50, 26 January 2008 (EST)&lt;br /&gt;
&lt;br /&gt;
: I've implemented #2 and #3 above in svn r1519 &amp;amp; 1520.  If no files are specified to be opened when running studio, it'll make a new one.  It won't pop up the canvas properties dialog when making new canvases by default.  And the default end time is 5s (3s is small enough to cause the time slider to show &amp;quot;1s 12f&amp;quot;, whereas 5s looks cleaner). -- [[User:Dooglus|dooglus]] 04:00, 29 January 2008 (EST)&lt;br /&gt;
&lt;br /&gt;
=== Area to Edit ===&lt;br /&gt;
&lt;br /&gt;
 08:43 &amp;lt; factor&amp;gt; also an option like blender - select area to update would be nice&lt;br /&gt;
 08:44 &amp;lt; factor&amp;gt; so the only part of the image that updates whne you add or change someting is in the selected area&lt;br /&gt;
 08:44 &amp;lt; factor&amp;gt; makes it quicker for doing changes&lt;br /&gt;
&lt;br /&gt;
ie. when working on a complex composition, studio doesn't know, when I tweak a tiny part of the composition, that only that part needs redrawing, so it redraws the whole thing.  It would be good if there was some way of telling it which part to focus on. -- [[User:Dooglus|dooglus]] 04:02, 3 February 2008 (EST)&lt;br /&gt;
&lt;br /&gt;
=== Histograms ===&lt;br /&gt;
&lt;br /&gt;
 01:23  * AkhIL wish to have histograms and luma/color scope like [http://mac.softpedia.com/progScreenshots/Avid-Xpress-DV-Screenshot-14207.html] in synfig&lt;br /&gt;
&lt;br /&gt;
I've looked at those pictures but don't know what they're showing.  Can you describe what those scopes are doing, and what the histograms display?  ie. what are the X and Y axes of the histograms? -- [[User:Dooglus|dooglus]] 04:07, 3 February 2008 (EST)&lt;br /&gt;
&lt;br /&gt;
First look this description in blender wiki [http://wiki.blender.org/index.php/Manual/VSE_Modes]&lt;br /&gt;
&lt;br /&gt;
Ok There is four things.&lt;br /&gt;
* Upper left is Lumascope (Luma Waveform in blender). X-Axis represents image's X-Axys. Y-Axis  is average luminescence of column of pixels.&lt;br /&gt;
* Upper right is Chromascope (Chroma Vectorscope in blender). Just look description on blender wiki.&lt;br /&gt;
* Lower left is like Lumascope but for each channel &lt;br /&gt;
* Lower right is histograms. X is luminescence and Y is count of pixels with such luminiscence.&lt;br /&gt;
&lt;br /&gt;
=== Sound Layer ===&lt;br /&gt;
&lt;br /&gt;
(4) It would be a very good improvement if the sound system were implemented into synfig in [[Sound Layer | this]] way. --[[User:Genete|Genete]] 07:46, 8 February 2008 (EST)&lt;br /&gt;
&lt;br /&gt;
=== Rearrange the view of waypoints for Canvas param ===&lt;br /&gt;
As reported in [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1888858&amp;amp;group_id=144022&amp;amp;atid=757416 Bug #1888858] waypoints are not displayed for canvas switch events.&lt;br /&gt;
I suggest to rearrange waypoints display according to [[Media:Canvas_prop.png|this scheme]].&lt;br /&gt;
&lt;br /&gt;
== Granted Wishes ==&lt;br /&gt;
&lt;br /&gt;
=== MNG target filetype ===&lt;br /&gt;
&lt;br /&gt;
The ability to save as/in the Free/Open MNG (.mng) format [http://libpng.org/pub/mng/]&lt;br /&gt;
&lt;br /&gt;
A partial implementation was committed in SVN r470.&lt;br /&gt;
&lt;br /&gt;
It was implemented in svn 986. See [[Render options]]. --[[User:Genete|Genete]] 13:12, 29 October 2007 (EDT)&lt;br /&gt;
&lt;br /&gt;
=== Optionally display RGB in Hex in Color dialog ===&lt;br /&gt;
&lt;br /&gt;
(3) When colors are quoted as 3 bytes of hexadecimal, you have to convert them to decimal, divide by 255, multiply by 100 to get a number to type into the dialog box.  It's painful to match color schemes for example, with the [http://tango.freedesktop.org/Tango_Icon_Theme_Guidelines Tango Icon Theme style guidelines].  [[User:pxegeek|PXEGeek]] 3/16/07&lt;br /&gt;
&lt;br /&gt;
: Added in [http://kibi.dyndns.org:8083/~dooglus/gitweb.pl?p=synfig;a=commitdiff;h=40dda9d27b5249ee32f62d84c819ff569f078929 svn r354].  You can type 3 or 6 digit hex codes and hit return to use.  3 digit code 36a gives colour 3366aa (each digit is duplicated) -- [[User:Dooglus|dooglus]] 3/18/07&lt;br /&gt;
&lt;br /&gt;
:: Many thanks - already used many times! PXEGeek.&lt;br /&gt;
&lt;br /&gt;
::: Did you notice that you can use single digit codes too?  '5' gives 555555 for instance, giving you 16 equally spaces shades of black through white. -- [[User:Dooglus|dooglus]] 17:51, 25 September 2007 (EDT)&lt;br /&gt;
&lt;br /&gt;
=== Restore Default Layout ===&lt;br /&gt;
&lt;br /&gt;
(3) &amp;amp;mdash; It's very difficult to put all the dialogs back where they were when you started the program, if you've closed them. In addition, with many programs, if you've done something with your window manager to take a window's position off screen, this command is sometimes the only way to bring them back.&lt;br /&gt;
-&amp;gt; I'd like to second this one - especially with the bug where dialog boxes sometime shrink to nothing or offscreen, and no amount of maximizing or minimizing restores them.  The only solution is to kill the windows, and none of the combo options in the dialog menu match the default configuration.  4/4/07 PXEGeek&lt;br /&gt;
&lt;br /&gt;
: Implemented in [http://kibi.dyndns.org:8083/~dooglus/gitweb.pl?p=synfig;a=commitdiff;h=036306f3c2c265a604971728d50fcce258766552 svn r757] -- [[User:Dooglus|dooglus]] 17:48, 25 September 2007 (EDT)&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Keyframe&amp;diff=5801</id>
		<title>Keyframe</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Keyframe&amp;diff=5801"/>
				<updated>2008-02-25T22:51:53Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: /* Duplicate a keyframe with no waypoint on it */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is a keyframe? ==&lt;br /&gt;
&lt;br /&gt;
A keyframe is a basically a &amp;quot;mark&amp;quot; in the timeline. This mark allows the user to make Synfig remember the state of the animation at that point (frame). It means that the keyframe is like a label that tell Synfig that this frame should be taken into account when creating waypoints.  It also indicates that the marked frame is a special frame where the information of ''every parameter of every layer is stored in order to be reused later''. &lt;br /&gt;
&lt;br /&gt;
Each keyframe is associated with a particular frame and a frame can only have one keyframe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What does a keyframe looks like? ==&lt;br /&gt;
&lt;br /&gt;
A keyframe looks like a light brown vertical dashed line in the [[Timetrack Panel|Timetrack Panel]] placed at the corresponding frame. You can distinguish it from the time cursor by its color (the time cursor is blue). &lt;br /&gt;
&lt;br /&gt;
[[Image: KeyframesLookTimeLine.png]]&lt;br /&gt;
&lt;br /&gt;
The green dots shown in the image are [[Waypoints|waypoints]].&lt;br /&gt;
&lt;br /&gt;
Keyframes also appear as entries in a list in the [[Keyframes Panel]] (fix keyframe dialog to explain better the columns of the dialog)&lt;br /&gt;
&lt;br /&gt;
[[Image: KeyframesLookList.png]]&lt;br /&gt;
&lt;br /&gt;
== Keyframes and waypoints ==&lt;br /&gt;
&lt;br /&gt;
A keyframe doesn't necessarily imply a waypoint, and a waypoint doesn't necessarily imply a keyframe. &lt;br /&gt;
&lt;br /&gt;
A keyframe could live all the time without any waypoint but it stores the information of the values of the parameters on that specific frame. If there is a waypoint there then the waypoint information is stored too. If there is no waypoint in the keyframe then its &amp;quot;stored&amp;quot; value is the result of the surrounding waypoints, its parameter values and the interpolation values the waypoints have. This means that a keyframe remembers the values of the parameters at that frame but does not keep them static at that frame. To maintain a parameter's value static in a certain frame you must use a waypoint.&lt;br /&gt;
&lt;br /&gt;
The creation of a waypoint can cause the creation of new waypoints on the neighboring keyframes depending on the current value of the [[Lock Keyframes]] state. So, maybe, the creation of a waypoint (modifying a parameter or pasting or moving a waypoint or even duplicating a keyframe) can lead to the creation of a waypoint in the the keyframes that are immediately before and after the inserted waypoint's frame. The waypoints created in the neighboring keyframes are created according to the [[New Layer Defaults#Default Interpolation|default interpolation value]] in the [[Toolbox |toolbox window]].&lt;br /&gt;
&lt;br /&gt;
See the [[#Examples|examples]] to understand how this works.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adding, duplicating and removing keyframes ==&lt;br /&gt;
&lt;br /&gt;
===Add a keyframe===&lt;br /&gt;
[[Image: AddNewKeyframeButton.png]]&lt;br /&gt;
&lt;br /&gt;
Place the time cursor at a frame where there isn't currently any keyframe. Then press the Add new Keyframe button. If you place the time cursor at a frame where there is currently an existing keyframe then the Add Keyframe button is disabled. Once you press the button then a new entry is added to the list of keyframes and a vertical dashed line is added in the time line. No waypoint is created.&lt;br /&gt;
&lt;br /&gt;
===Duplicate a keyframe===&lt;br /&gt;
[[Image: DuplicateKeyframeButton.png]]&lt;br /&gt;
&lt;br /&gt;
Select a keyframe in the keyframe list of the [[Keyframes Panel]] and place the cursor at a frame where there isn't currently any keyframe. Then press the Duplicate Keyframe button. This would have two separated effects:&lt;br /&gt;
&lt;br /&gt;
# If there is a waypoint at the original keyframe then the waypoint is duplicated. Its duplication include the parameter value and its interpolation values.&lt;br /&gt;
# If there is no waypoint in the original keyframe for any particular parameter then two things could happen:&lt;br /&gt;
#*There is no waypoint for that parameter at ANY frame in the time line: Then NONE waypoint is created.&lt;br /&gt;
#*If there is a waypoint in the time line for that parameter, but not in the keyframe that is going to be duplicated, then in the duplicated keyframe is created a new waypoint with a value for the parameter of the result of the current value at the original keyframe and a TBC Smooth interpolation type for both &amp;quot;In&amp;quot; and &amp;quot;Out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Of course, duplicate a keyframe will produce a new keyframe at the place pointed by the time cursor and will add a new one to the keyframe list in the proper place. In the keyframe list, the new added keyframe have the same description than the original, plus a &amp;quot;(Duplicate)&amp;quot; at the end.&lt;br /&gt;
&lt;br /&gt;
===Remove a keyframe===&lt;br /&gt;
[[Image:RemoveKeyframeButton.png]]&lt;br /&gt;
&lt;br /&gt;
Just select a keyframe from the keyframe list and press the Remove keyframe button. It will remove the keyframe and all the waypoints for all parameters for all layers that are currently there.&lt;br /&gt;
&lt;br /&gt;
 ''NOTE: If you move a keyframe by modifying its [[#Time|time]] in the keyframe list dialog&lt;br /&gt;
 ''and immediately press the Remove Keyframe button then the waypoints are not''&lt;br /&gt;
 ''deleted. It seems to be a bug but also can be considered a feature if you really''&lt;br /&gt;
 ''want to keep the waypoints and not the keyframe.''&lt;br /&gt;
&lt;br /&gt;
== Editing keyframes: time, length &amp;amp; description ==&lt;br /&gt;
&lt;br /&gt;
You can see in the Keyframe list dialog that there are four headers on it:&lt;br /&gt;
&lt;br /&gt;
[[Image:KeyframesLookList.png]]&lt;br /&gt;
&lt;br /&gt;
* Time&lt;br /&gt;
* Length&lt;br /&gt;
* Jump&lt;br /&gt;
* Description&lt;br /&gt;
&lt;br /&gt;
The Jump column is only a shourt cut to place the time cursor at the keyframe where you make a click in the (JMP) label.&lt;br /&gt;
&lt;br /&gt;
=== Time ===&lt;br /&gt;
&lt;br /&gt;
You can modify the time (frame) where the keyframe is palced just making a click in the corresponding Time cell. It will allow modify the time forward or backward the amount that you want. If you try to set the time of a certain keyframe to be the same time of another existing keyframe then the program gives you this message:&lt;br /&gt;
&lt;br /&gt;
 keyframe_set: Cannot change keyframe time because another keyframe already exists with that time.&lt;br /&gt;
&lt;br /&gt;
Modifying the Time of a keyframe can have the following effects:&lt;br /&gt;
&lt;br /&gt;
# The existing waypoints in the keyframe will move to the new position.&lt;br /&gt;
# If any parameter have a a waypoint in the time line, then the moved keyframe will have a new waypoint set to TCB Smooth on those paramter(s).&lt;br /&gt;
# According to the default interpolation method and the Lock Keyframes status and to the parameters that have any waypoint in the time line, new waypoints will be created on the neighbouring keyframes of the destiny time (frame). The original neighbouring keyframes will be untouched if don't coincide with the destiny neighbouring keyframes.&lt;br /&gt;
&lt;br /&gt;
See [[#Change Keyframe Time|the example]] to see how that works.&lt;br /&gt;
&lt;br /&gt;
=== Length ===&lt;br /&gt;
&lt;br /&gt;
Change this cell doesn't seems to do nothig. Once you press INTRO you obtain the old value again. It seems to be only an informative label.&lt;br /&gt;
&lt;br /&gt;
=== Description ===&lt;br /&gt;
&lt;br /&gt;
This cell allow the user insert a short description of the meaning of the keyframe. Just make click on it and change the text.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Editing Keyframe Properties ==&lt;br /&gt;
[[Image: KeyframePropertiesButton.png]]&lt;br /&gt;
&lt;br /&gt;
The Keyframe Properties dialog allows change the interpolation method for all the waypoints on the keyframe at the same time. Even if, for a certain parameter, there is no waypoint on the keyframe but the parameter have other waypoints in the time line, then when you apply the Keyframe Properties you will add a waypoint at that keyframe were there aren't currently any waypoint. The added waypoint have the interpolation methods stated by the dialog. It means that the Keyframe Properties dialog will modify the interpolation methods for al the paramters that have any waypoint in the time line. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The dialog have the following parameters:&lt;br /&gt;
&lt;br /&gt;
[[Image: KeyframeDialog.png]]&lt;br /&gt;
* In: Checking this value you can change the interpolation method of the left part of the waypoints of the current selected keyframe of all the layers of the canvas to the selected [[Waypoints#Interpolation|interpolation method]] in the drop down menu.&lt;br /&gt;
* Out: Same but for the right part of the waypoint.&lt;br /&gt;
* Tension: See [[TCB]]&lt;br /&gt;
* Bias: See [[TCB]]&lt;br /&gt;
* Continuity:  See [[TCB]]&lt;br /&gt;
* Temporal Tension: See [[TCB]]&lt;br /&gt;
&lt;br /&gt;
You can check only one of both &amp;quot;In&amp;quot; or &amp;quot;Out&amp;quot; check boxes to only affect the change to the left or right part of the waypoints. The non checked part would not be modified. Same comment applies for the Manual interpolation method parameters (Tension, Bias, Continuity and Temporal Tension)&lt;br /&gt;
&lt;br /&gt;
[[Image: KeyframeDialog2.png]]&lt;br /&gt;
&lt;br /&gt;
This dialog would not affect what's the interpolation method for a new waypoint created by the user, automatically created by the keyframe duplication or by the lock keyframe state. The interpolation methods for new waypoints created in those cases will be both the same (In and Out or Left and Right) and depend only on the Default interpolation method of the Tool Box window.&lt;br /&gt;
&lt;br /&gt;
See the [[#Examples|examples]] to understand better how it works.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Duplicate a keyframe with no waypoint on it ===&lt;br /&gt;
For example, imagine that you have following set of keyframes and waypoints and the corresponding parameter of the radius of a circle:&lt;br /&gt;
{|&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
|+ Before duplicate keyframe at 2s to 6s&lt;br /&gt;
!Frame!!Keyframe!!Waypoint!!Radius!!Interpolation&lt;br /&gt;
|-&lt;br /&gt;
|0s||yes||yes||20.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|2s||yes||no||25.0||n/a&lt;br /&gt;
|-&lt;br /&gt;
|4s||yes||no||30.0||n/a&lt;br /&gt;
|-&lt;br /&gt;
|8s||no||yes||40.0||TCB Smooth&lt;br /&gt;
|} &lt;br /&gt;
[[Image: GraphBeforeDuplicate.png]]&lt;br /&gt;
&lt;br /&gt;
 notice that although the interpolation between 0s and 8s is TCB Smooth the real result &lt;br /&gt;
 is linear due that they are the only two waypoints of the animation for that parameter.&lt;br /&gt;
&lt;br /&gt;
If you select the keyframe at 2s, place the time cursor at 6s (where there isn't a keyframe), set the [[New Layer Defaults#Default interpolation | default interpolation]] to TCB Smooth, and have the [[Lock Keyframes | lock keyframe status]] to ''All keyframes locked'' and press the duplicate keyframe button, then the result is the following:&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
|+ After duplicate keyframe at 2s to 6s&lt;br /&gt;
!Frame!!Keyframe!!Waypoint!!Radius!!Interpolation&lt;br /&gt;
|-&lt;br /&gt;
|0s||yes||yes||20.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|2s||yes||no||25,78125||n/a&lt;br /&gt;
|-&lt;br /&gt;
|4s||yes||yes||30.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|6s||yes||yes||25.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|8s||no||yes||40.0||TCB Smooth&lt;br /&gt;
|}&lt;br /&gt;
[[Image: GraphAfterDuplicate.png]]&lt;br /&gt;
&lt;br /&gt;
You can see that:&lt;br /&gt;
# At 0s none has changed. Not affected by the insertion of the keyframe. It is two keyframes away from 6s and also have a waypoint.&lt;br /&gt;
# At 2s there was a keyframe and stills there. But previous to the creation of the keyframe at 6s the current interpolated value of the radius was 25.0. After the creation of the keyframe at 6s the radius is the result of the interpolation between 0s and 4s frames waypoints with its radius values and its interpolation methods. That is 25.78125. This keyframe is more than one keyframe away from the new 6s keyframe so no waypoint is created.&lt;br /&gt;
#At 4s there was a keyframe and still being there. But in this case the 4s keyframe is a neighbor of the new 6s keyframe. As well as the lock keyframe state was set to ''All keyframes locked'' then the keyframe at 4s has been locked adding a waypoint on it. The radius value hasn't changed (still being 30.0) because it was locked adding a waypoint with its current value). The Interpolation mode of the waypoint was set to TCB Smooth as stated by its default value.&lt;br /&gt;
# At 6s there is a new keyframe with a new waypoint with the old value of the interpolated value of the keyframe at 2s. That is a radius of 25.0.&lt;br /&gt;
#At 8s nothing has changed. There wasn't any keyframe and there was a waypoint so nothing is expected to change.&lt;br /&gt;
&lt;br /&gt;
Imagine now that you repeat the same operations but you choose the default interpolation set to Constant. Then the result is the following:&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
|+ After duplicate keyframe at 2s to 6s (constant interpolation)&lt;br /&gt;
!Frame!!Keyframe!!Waypoint!!Radius!!Interpolation&lt;br /&gt;
|-&lt;br /&gt;
|0s||yes||yes||20.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|2s||yes||no||20.0||n/a&lt;br /&gt;
|-&lt;br /&gt;
|4s||yes||yes||30.0||Constant&lt;br /&gt;
|-&lt;br /&gt;
|6s||yes||yes||25.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|8s||no||yes||40.0||TCB Smooth&lt;br /&gt;
|}&lt;br /&gt;
[[Image: GraphAfterDuplicateConstant.png]]&lt;br /&gt;
&lt;br /&gt;
Now you can see that the keyframe at 2s doesn't hold the value of the parameter by itself. It only remember the value if a waypoint is created on it, by the result of the insertion of a neighbour waypoint, or if a keyframe is duplicated and the lock keyframe status affects that keyframe. In this example the value at 2s has changed drastically due to the different interpolation method for the created waypoint on 4s. If in this situation you duplicate again the keyframe at 2s to other frame (ej. 10s) then it would copy a keyframe with a waypoint on it with a radius's value of 20.0, what is the current value of the parameter in that keyframe before duplicate it.&lt;br /&gt;
&lt;br /&gt;
=== Editing Keyframe Properties ===&lt;br /&gt;
&lt;br /&gt;
Consider this situation for a certain layer:&lt;br /&gt;
&lt;br /&gt;
[[Image:BeforeChangeKeyframeProperties.png]]&lt;br /&gt;
&lt;br /&gt;
In the sample the animation duration is 10 seconds so the image shows all the existing waypoints and keyframes. The time cursor isn't over any keyframe.&lt;br /&gt;
&lt;br /&gt;
Now consider that you have the following default values:&lt;br /&gt;
&lt;br /&gt;
* [[New Layer Defaults#Default Interpolation|Default Interpolation]] method set to &amp;quot;Ease in/out&amp;quot;&lt;br /&gt;
* [[Lock Keyframes| Lock Keyframes]] status set to &amp;quot;All Keyframes Locked&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now select the keyframe at frame 4s in the keyframe list. Press the Keyframe Properties button and set the following interpolation method:&lt;br /&gt;
&lt;br /&gt;
[[Image: KeyframeProperties2.png]]&lt;br /&gt;
&lt;br /&gt;
and press Apply button. The result will be this:&lt;br /&gt;
&lt;br /&gt;
[[Image:AfterChangeKeyframeProperties.png]]&lt;br /&gt;
&lt;br /&gt;
You can see the following effects:&lt;br /&gt;
&lt;br /&gt;
# The existing waypoints at 4s keyframe have changed its interpolation methods according to the Keyframe Properties dialog.&lt;br /&gt;
# There are new added waypoints at 4s keyframe. The waypoints are added to the paramters that have almost one waypoint in the time line (for example the one that have only a waypoint at 9s). The added waypoints at 4s keyframe have the interpolation settings that was stated by the Keyframe Properties dialog.&lt;br /&gt;
# New waypoints have been created for the neighbouring keyframes to 4s (2s and 6s) fo all the parameters that have any waypoint in the time line. The waypoints are created in the neighbouring keyframes according to the [[Lock Keyframes |Lock Keyframes]] status. Also the created waypoints interpolation method responds to the [[New Layer Defaults#Default Interpolation|default interpolation]] method you have set.&lt;br /&gt;
&lt;br /&gt;
If in the Keyframe Properties dialog you were checked off the Out or the In check boxes then it would have happened two things:&lt;br /&gt;
&lt;br /&gt;
# The existing waypoints at 4s would only change its interpolation method on the side the check box was checked on. The other side will be untouched.&lt;br /&gt;
# The new added waypoints will have the interpolation method set to TCB Smooth method where the check box is off and the interpolation method set by the keyframe properties dialog where the check box is on.&lt;br /&gt;
&lt;br /&gt;
[[Image:AfterChangeKeyframeProperties2.png]]&lt;br /&gt;
&lt;br /&gt;
In this sample it was only checked on the &amp;quot;In&amp;quot; check box.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Change Keyframe Time ===&lt;br /&gt;
&lt;br /&gt;
Consider again this situation for a certain layer: &lt;br /&gt;
&lt;br /&gt;
[[Image:BeforeChangeKeyframeProperties.png]]&lt;br /&gt;
&lt;br /&gt;
Now consider that you have the following default values:&lt;br /&gt;
&lt;br /&gt;
* [[New Layer Defaults#Default Interpolation|Default Interpolation]] method set to &amp;quot;Ease in/out&amp;quot;&lt;br /&gt;
* [[Lock Keyframes| Lock Keyframes]] status set to &amp;quot;All Keyframes Locked&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now select the keyframe at frame 4s in the keyframe list. Make a click in the TIme cell and modify the time to be 3s. The result will be this:&lt;br /&gt;
&lt;br /&gt;
[[Image:AfterChangeKeyframeTime.png]]&lt;br /&gt;
&lt;br /&gt;
== Advanced uses of keyframes ==&lt;br /&gt;
&lt;br /&gt;
===Reusing keyframes===&lt;br /&gt;
If you want to learn more about advanced uses of keyframes see this tutorial about reusing animations. Keyframes can be like stored &amp;quot;poses&amp;quot; that can be reused several time in the animation. Very useful for lip sync. &lt;br /&gt;
&lt;br /&gt;
[[Reuse Animations]]&lt;br /&gt;
&lt;br /&gt;
===Usage of Onionskin===&lt;br /&gt;
&lt;br /&gt;
To properly use the onion skin feature (ALT-O or File&amp;gt;View&amp;gt;Toggle Onion Skin) you should consider the frame where the keyframes are set. Onion skin will show you the before and after keyframes images with a 50% opaque copy of the current view. Also the current view is 50% opaque.&lt;br /&gt;
&lt;br /&gt;
See [[Toggle Onion Skin]] for more detail.&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Keyframe&amp;diff=5800</id>
		<title>Keyframe</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Keyframe&amp;diff=5800"/>
				<updated>2008-02-25T22:43:56Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: /* Time */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is a keyframe? ==&lt;br /&gt;
&lt;br /&gt;
A keyframe is a basically a &amp;quot;mark&amp;quot; in the timeline. This mark allows the user to make Synfig remember the state of the animation at that point (frame). It means that the keyframe is like a label that tell Synfig that this frame should be taken into account when creating waypoints.  It also indicates that the marked frame is a special frame where the information of ''every parameter of every layer is stored in order to be reused later''. &lt;br /&gt;
&lt;br /&gt;
Each keyframe is associated with a particular frame and a frame can only have one keyframe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What does a keyframe looks like? ==&lt;br /&gt;
&lt;br /&gt;
A keyframe looks like a light brown vertical dashed line in the [[Timetrack Panel|Timetrack Panel]] placed at the corresponding frame. You can distinguish it from the time cursor by its color (the time cursor is blue). &lt;br /&gt;
&lt;br /&gt;
[[Image: KeyframesLookTimeLine.png]]&lt;br /&gt;
&lt;br /&gt;
The green dots shown in the image are [[Waypoints|waypoints]].&lt;br /&gt;
&lt;br /&gt;
Keyframes also appear as entries in a list in the [[Keyframes Panel]] (fix keyframe dialog to explain better the columns of the dialog)&lt;br /&gt;
&lt;br /&gt;
[[Image: KeyframesLookList.png]]&lt;br /&gt;
&lt;br /&gt;
== Keyframes and waypoints ==&lt;br /&gt;
&lt;br /&gt;
A keyframe doesn't necessarily imply a waypoint, and a waypoint doesn't necessarily imply a keyframe. &lt;br /&gt;
&lt;br /&gt;
A keyframe could live all the time without any waypoint but it stores the information of the values of the parameters on that specific frame. If there is a waypoint there then the waypoint information is stored too. If there is no waypoint in the keyframe then its &amp;quot;stored&amp;quot; value is the result of the surrounding waypoints, its parameter values and the interpolation values the waypoints have. This means that a keyframe remembers the values of the parameters at that frame but does not keep them static at that frame. To maintain a parameter's value static in a certain frame you must use a waypoint.&lt;br /&gt;
&lt;br /&gt;
The creation of a waypoint can cause the creation of new waypoints on the neighboring keyframes depending on the current value of the [[Lock Keyframes]] state. So, maybe, the creation of a waypoint (modifying a parameter or pasting or moving a waypoint or even duplicating a keyframe) can lead to the creation of a waypoint in the the keyframes that are immediately before and after the inserted waypoint's frame. The waypoints created in the neighboring keyframes are created according to the [[New Layer Defaults#Default Interpolation|default interpolation value]] in the [[Toolbox |toolbox window]].&lt;br /&gt;
&lt;br /&gt;
See the [[#Examples|examples]] to understand how this works.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adding, duplicating and removing keyframes ==&lt;br /&gt;
&lt;br /&gt;
===Add a keyframe===&lt;br /&gt;
[[Image: AddNewKeyframeButton.png]]&lt;br /&gt;
&lt;br /&gt;
Place the time cursor at a frame where there isn't currently any keyframe. Then press the Add new Keyframe button. If you place the time cursor at a frame where there is currently an existing keyframe then the Add Keyframe button is disabled. Once you press the button then a new entry is added to the list of keyframes and a vertical dashed line is added in the time line. No waypoint is created.&lt;br /&gt;
&lt;br /&gt;
===Duplicate a keyframe===&lt;br /&gt;
[[Image: DuplicateKeyframeButton.png]]&lt;br /&gt;
&lt;br /&gt;
Select a keyframe in the keyframe list of the [[Keyframes Panel]] and place the cursor at a frame where there isn't currently any keyframe. Then press the Duplicate Keyframe button. This would have two separated effects:&lt;br /&gt;
&lt;br /&gt;
# If there is a waypoint at the original keyframe then the waypoint is duplicated. Its duplication include the parameter value and its interpolation values.&lt;br /&gt;
# If there is no waypoint in the original keyframe for any particular parameter then two things could happen:&lt;br /&gt;
#*There is no waypoint for that parameter at ANY frame in the time line: Then NONE waypoint is created.&lt;br /&gt;
#*If there is a waypoint in the time line for that parameter, but not in the keyframe that is going to be duplicated, then in the duplicated keyframe is created a new waypoint with a value for the parameter of the result of the current value at the original keyframe and a TBC Smooth interpolation type for both &amp;quot;In&amp;quot; and &amp;quot;Out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Of course, duplicate a keyframe will produce a new keyframe at the place pointed by the time cursor and will add a new one to the keyframe list in the proper place. In the keyframe list, the new added keyframe have the same description than the original, plus a &amp;quot;(Duplicate)&amp;quot; at the end.&lt;br /&gt;
&lt;br /&gt;
===Remove a keyframe===&lt;br /&gt;
[[Image:RemoveKeyframeButton.png]]&lt;br /&gt;
&lt;br /&gt;
Just select a keyframe from the keyframe list and press the Remove keyframe button. It will remove the keyframe and all the waypoints for all parameters for all layers that are currently there.&lt;br /&gt;
&lt;br /&gt;
 ''NOTE: If you move a keyframe by modifying its [[#Time|time]] in the keyframe list dialog&lt;br /&gt;
 ''and immediately press the Remove Keyframe button then the waypoints are not''&lt;br /&gt;
 ''deleted. It seems to be a bug but also can be considered a feature if you really''&lt;br /&gt;
 ''want to keep the waypoints and not the keyframe.''&lt;br /&gt;
&lt;br /&gt;
== Editing keyframes: time, length &amp;amp; description ==&lt;br /&gt;
&lt;br /&gt;
You can see in the Keyframe list dialog that there are four headers on it:&lt;br /&gt;
&lt;br /&gt;
[[Image:KeyframesLookList.png]]&lt;br /&gt;
&lt;br /&gt;
* Time&lt;br /&gt;
* Length&lt;br /&gt;
* Jump&lt;br /&gt;
* Description&lt;br /&gt;
&lt;br /&gt;
The Jump column is only a shourt cut to place the time cursor at the keyframe where you make a click in the (JMP) label.&lt;br /&gt;
&lt;br /&gt;
=== Time ===&lt;br /&gt;
&lt;br /&gt;
You can modify the time (frame) where the keyframe is palced just making a click in the corresponding Time cell. It will allow modify the time forward or backward the amount that you want. If you try to set the time of a certain keyframe to be the same time of another existing keyframe then the program gives you this message:&lt;br /&gt;
&lt;br /&gt;
 keyframe_set: Cannot change keyframe time because another keyframe already exists with that time.&lt;br /&gt;
&lt;br /&gt;
Modifying the Time of a keyframe can have the following effects:&lt;br /&gt;
&lt;br /&gt;
# The existing waypoints in the keyframe will move to the new position.&lt;br /&gt;
# If any parameter have a a waypoint in the time line, then the moved keyframe will have a new waypoint set to TCB Smooth on those paramter(s).&lt;br /&gt;
# According to the default interpolation method and the Lock Keyframes status and to the parameters that have any waypoint in the time line, new waypoints will be created on the neighbouring keyframes of the destiny time (frame). The original neighbouring keyframes will be untouched if don't coincide with the destiny neighbouring keyframes.&lt;br /&gt;
&lt;br /&gt;
See [[#Change Keyframe Time|the example]] to see how that works.&lt;br /&gt;
&lt;br /&gt;
=== Length ===&lt;br /&gt;
&lt;br /&gt;
Change this cell doesn't seems to do nothig. Once you press INTRO you obtain the old value again. It seems to be only an informative label.&lt;br /&gt;
&lt;br /&gt;
=== Description ===&lt;br /&gt;
&lt;br /&gt;
This cell allow the user insert a short description of the meaning of the keyframe. Just make click on it and change the text.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Editing Keyframe Properties ==&lt;br /&gt;
[[Image: KeyframePropertiesButton.png]]&lt;br /&gt;
&lt;br /&gt;
The Keyframe Properties dialog allows change the interpolation method for all the waypoints on the keyframe at the same time. Even if, for a certain parameter, there is no waypoint on the keyframe but the parameter have other waypoints in the time line, then when you apply the Keyframe Properties you will add a waypoint at that keyframe were there aren't currently any waypoint. The added waypoint have the interpolation methods stated by the dialog. It means that the Keyframe Properties dialog will modify the interpolation methods for al the paramters that have any waypoint in the time line. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The dialog have the following parameters:&lt;br /&gt;
&lt;br /&gt;
[[Image: KeyframeDialog.png]]&lt;br /&gt;
* In: Checking this value you can change the interpolation method of the left part of the waypoints of the current selected keyframe of all the layers of the canvas to the selected [[Waypoints#Interpolation|interpolation method]] in the drop down menu.&lt;br /&gt;
* Out: Same but for the right part of the waypoint.&lt;br /&gt;
* Tension: See [[TCB]]&lt;br /&gt;
* Bias: See [[TCB]]&lt;br /&gt;
* Continuity:  See [[TCB]]&lt;br /&gt;
* Temporal Tension: See [[TCB]]&lt;br /&gt;
&lt;br /&gt;
You can check only one of both &amp;quot;In&amp;quot; or &amp;quot;Out&amp;quot; check boxes to only affect the change to the left or right part of the waypoints. The non checked part would not be modified. Same comment applies for the Manual interpolation method parameters (Tension, Bias, Continuity and Temporal Tension)&lt;br /&gt;
&lt;br /&gt;
[[Image: KeyframeDialog2.png]]&lt;br /&gt;
&lt;br /&gt;
This dialog would not affect what's the interpolation method for a new waypoint created by the user, automatically created by the keyframe duplication or by the lock keyframe state. The interpolation methods for new waypoints created in those cases will be both the same (In and Out or Left and Right) and depend only on the Default interpolation method of the Tool Box window.&lt;br /&gt;
&lt;br /&gt;
See the [[#Examples|examples]] to understand better how it works.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Duplicate a keyframe with no waypoint on it ===&lt;br /&gt;
For example, imagine that you have following set of keyframes and waypoints and the corresponding parameter of the radius of a circle:&lt;br /&gt;
{|&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
|+ Before duplicate keyframe at 2s to 6s&lt;br /&gt;
!Frame!!Keyframe!!Waypoint!!Radius!!Interpolation&lt;br /&gt;
|-&lt;br /&gt;
|0s||yes||yes||20.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|2s||yes||no||25.0||n/a&lt;br /&gt;
|-&lt;br /&gt;
|4s||yes||no||30.0||n/a&lt;br /&gt;
|-&lt;br /&gt;
|8s||no||yes||40.0||TCB Smooth&lt;br /&gt;
|} &lt;br /&gt;
[[Image: GraphBeforeDuplicate.png]]&lt;br /&gt;
&lt;br /&gt;
 notice that although the interpolation between 0s and 8s is TCB Smooth the real result &lt;br /&gt;
 is linear due that they are the only two waypoints of the animation for that parameter.&lt;br /&gt;
&lt;br /&gt;
If you select the keyframe at 2s, place the time cursor at 6s (where there isn't a keyframe), set the [[New Layer Defaults#Default interpolation | default interpolation]] to TCB Smooth, and have the [[Lock Keyframes | lock keyframe status]] to ''All keyframes locked'' and press the duplicate keyframe button, then the result is the following:&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
|+ After duplicate keyframe at 2s to 6s&lt;br /&gt;
!Frame!!Keyframe!!Waypoint!!Radius!!Interpolation&lt;br /&gt;
|-&lt;br /&gt;
|0s||yes||yes||20.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|2s||yes||no||25,78125||n/a&lt;br /&gt;
|-&lt;br /&gt;
|4s||yes||yes||30.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|6s||yes||yes||25.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|8s||no||yes||40.0||TCB Smooth&lt;br /&gt;
|}&lt;br /&gt;
[[Image: GraphAfterDuplicate.png]]&lt;br /&gt;
&lt;br /&gt;
You can see that:&lt;br /&gt;
# At 0s none has changed. Not affected by the insertion of the keyframe. It is two keyframes away from 6s and also have a waypoint.&lt;br /&gt;
# At 2s there was a keyframe and stills there. But previous to the creation of the keyframe at 6s the current interpolated value of the radius was 25.0. After the creation of the keyframe at 6s the radius is the result of the interpolation between 0s and 4s frames waypoints with its radius values and its interpolation methods. That is 25.78125. This keyframe is one keyframe away the new 6s keyframe so no waypoint is created.&lt;br /&gt;
#At 4s there was a keyframe and still being there. But in this case the 4s keyframe is a neighbor of the new 6s keyframe. As well as the lock keyframe state was set to ''All keyframes locked'' then the keyframe at 4s has been locked adding a waypoint on it. The radius value hasn't changed (still being 30.0) because it was locked adding a waypoint with its current value). The Interpolation mode of the waypoint was set to TCB Smooth as stated by its default value.&lt;br /&gt;
# At 6s there is a new keyframe with a new waypoint with the old value of the interpolated value of the keyframe at 2s. That is a radius of 25.0.&lt;br /&gt;
#At 8s nothing has changed. There wasn't any keyframe and there was a waypoint so nothing is expected to change.&lt;br /&gt;
&lt;br /&gt;
Imagine now that you repeat the same operations but you choose the default interpolation set to Constant. Then the result is the following:&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
|+ After duplicate keyframe at 2s to 6s (constant interpolation)&lt;br /&gt;
!Frame!!Keyframe!!Waypoint!!Radius!!Interpolation&lt;br /&gt;
|-&lt;br /&gt;
|0s||yes||yes||20.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|2s||yes||no||20.0||n/a&lt;br /&gt;
|-&lt;br /&gt;
|4s||yes||yes||30.0||Constant&lt;br /&gt;
|-&lt;br /&gt;
|6s||yes||yes||25.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|8s||no||yes||40.0||TCB Smooth&lt;br /&gt;
|}&lt;br /&gt;
[[Image: GraphAfterDuplicateConstant.png]]&lt;br /&gt;
&lt;br /&gt;
Now you can see that the keyframe at 2s doesn't hold the value of the parameter by itself. It only remember the value if a waypoint is created on it, by the result of the insertion of a neighbour waypoint, or if a keyframe is duplicated and the lock keyframe status affects that keyframe. In this example the value at 2s has changed drastically due to the different interpolation method for the created waypoint on 4s. If in this situation you duplicate again the keyframe at 2s to other frame (ej. 10s) then it would copy a keyframe with a waypoint on it with a radius's value of 20.0, what is the current value of the parameter in that keyframe before duplicate it.&lt;br /&gt;
&lt;br /&gt;
=== Editing Keyframe Properties ===&lt;br /&gt;
&lt;br /&gt;
Consider this situation for a certain layer:&lt;br /&gt;
&lt;br /&gt;
[[Image:BeforeChangeKeyframeProperties.png]]&lt;br /&gt;
&lt;br /&gt;
In the sample the animation duration is 10 seconds so the image shows all the existing waypoints and keyframes. The time cursor isn't over any keyframe.&lt;br /&gt;
&lt;br /&gt;
Now consider that you have the following default values:&lt;br /&gt;
&lt;br /&gt;
* [[New Layer Defaults#Default Interpolation|Default Interpolation]] method set to &amp;quot;Ease in/out&amp;quot;&lt;br /&gt;
* [[Lock Keyframes| Lock Keyframes]] status set to &amp;quot;All Keyframes Locked&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now select the keyframe at frame 4s in the keyframe list. Press the Keyframe Properties button and set the following interpolation method:&lt;br /&gt;
&lt;br /&gt;
[[Image: KeyframeProperties2.png]]&lt;br /&gt;
&lt;br /&gt;
and press Apply button. The result will be this:&lt;br /&gt;
&lt;br /&gt;
[[Image:AfterChangeKeyframeProperties.png]]&lt;br /&gt;
&lt;br /&gt;
You can see the following effects:&lt;br /&gt;
&lt;br /&gt;
# The existing waypoints at 4s keyframe have changed its interpolation methods according to the Keyframe Properties dialog.&lt;br /&gt;
# There are new added waypoints at 4s keyframe. The waypoints are added to the paramters that have almost one waypoint in the time line (for example the one that have only a waypoint at 9s). The added waypoints at 4s keyframe have the interpolation settings that was stated by the Keyframe Properties dialog.&lt;br /&gt;
# New waypoints have been created for the neighbouring keyframes to 4s (2s and 6s) fo all the parameters that have any waypoint in the time line. The waypoints are created in the neighbouring keyframes according to the [[Lock Keyframes |Lock Keyframes]] status. Also the created waypoints interpolation method responds to the [[New Layer Defaults#Default Interpolation|default interpolation]] method you have set.&lt;br /&gt;
&lt;br /&gt;
If in the Keyframe Properties dialog you were checked off the Out or the In check boxes then it would have happened two things:&lt;br /&gt;
&lt;br /&gt;
# The existing waypoints at 4s would only change its interpolation method on the side the check box was checked on. The other side will be untouched.&lt;br /&gt;
# The new added waypoints will have the interpolation method set to TCB Smooth method where the check box is off and the interpolation method set by the keyframe properties dialog where the check box is on.&lt;br /&gt;
&lt;br /&gt;
[[Image:AfterChangeKeyframeProperties2.png]]&lt;br /&gt;
&lt;br /&gt;
In this sample it was only checked on the &amp;quot;In&amp;quot; check box.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Change Keyframe Time ===&lt;br /&gt;
&lt;br /&gt;
Consider again this situation for a certain layer: &lt;br /&gt;
&lt;br /&gt;
[[Image:BeforeChangeKeyframeProperties.png]]&lt;br /&gt;
&lt;br /&gt;
Now consider that you have the following default values:&lt;br /&gt;
&lt;br /&gt;
* [[New Layer Defaults#Default Interpolation|Default Interpolation]] method set to &amp;quot;Ease in/out&amp;quot;&lt;br /&gt;
* [[Lock Keyframes| Lock Keyframes]] status set to &amp;quot;All Keyframes Locked&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now select the keyframe at frame 4s in the keyframe list. Make a click in the TIme cell and modify the time to be 3s. The result will be this:&lt;br /&gt;
&lt;br /&gt;
[[Image:AfterChangeKeyframeTime.png]]&lt;br /&gt;
&lt;br /&gt;
== Advanced uses of keyframes ==&lt;br /&gt;
&lt;br /&gt;
===Reusing keyframes===&lt;br /&gt;
If you want to learn more about advanced uses of keyframes see this tutorial about reusing animations. Keyframes can be like stored &amp;quot;poses&amp;quot; that can be reused several time in the animation. Very useful for lip sync. &lt;br /&gt;
&lt;br /&gt;
[[Reuse Animations]]&lt;br /&gt;
&lt;br /&gt;
===Usage of Onionskin===&lt;br /&gt;
&lt;br /&gt;
To properly use the onion skin feature (ALT-O or File&amp;gt;View&amp;gt;Toggle Onion Skin) you should consider the frame where the keyframes are set. Onion skin will show you the before and after keyframes images with a 50% opaque copy of the current view. Also the current view is 50% opaque.&lt;br /&gt;
&lt;br /&gt;
See [[Toggle Onion Skin]] for more detail.&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Keyframe&amp;diff=5799</id>
		<title>Keyframe</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Keyframe&amp;diff=5799"/>
				<updated>2008-02-25T22:09:21Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: /* Duplicate a keyframe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is a keyframe? ==&lt;br /&gt;
&lt;br /&gt;
A keyframe is a basically a &amp;quot;mark&amp;quot; in the timeline. This mark allows the user to make Synfig remember the state of the animation at that point (frame). It means that the keyframe is like a label that tell Synfig that this frame should be taken into account when creating waypoints.  It also indicates that the marked frame is a special frame where the information of ''every parameter of every layer is stored in order to be reused later''. &lt;br /&gt;
&lt;br /&gt;
Each keyframe is associated with a particular frame and a frame can only have one keyframe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What does a keyframe looks like? ==&lt;br /&gt;
&lt;br /&gt;
A keyframe looks like a light brown vertical dashed line in the [[Timetrack Panel|Timetrack Panel]] placed at the corresponding frame. You can distinguish it from the time cursor by its color (the time cursor is blue). &lt;br /&gt;
&lt;br /&gt;
[[Image: KeyframesLookTimeLine.png]]&lt;br /&gt;
&lt;br /&gt;
The green dots shown in the image are [[Waypoints|waypoints]].&lt;br /&gt;
&lt;br /&gt;
Keyframes also appear as entries in a list in the [[Keyframes Panel]] (fix keyframe dialog to explain better the columns of the dialog)&lt;br /&gt;
&lt;br /&gt;
[[Image: KeyframesLookList.png]]&lt;br /&gt;
&lt;br /&gt;
== Keyframes and waypoints ==&lt;br /&gt;
&lt;br /&gt;
A keyframe doesn't necessarily imply a waypoint, and a waypoint doesn't necessarily imply a keyframe. &lt;br /&gt;
&lt;br /&gt;
A keyframe could live all the time without any waypoint but it stores the information of the values of the parameters on that specific frame. If there is a waypoint there then the waypoint information is stored too. If there is no waypoint in the keyframe then its &amp;quot;stored&amp;quot; value is the result of the surrounding waypoints, its parameter values and the interpolation values the waypoints have. This means that a keyframe remembers the values of the parameters at that frame but does not keep them static at that frame. To maintain a parameter's value static in a certain frame you must use a waypoint.&lt;br /&gt;
&lt;br /&gt;
The creation of a waypoint can cause the creation of new waypoints on the neighboring keyframes depending on the current value of the [[Lock Keyframes]] state. So, maybe, the creation of a waypoint (modifying a parameter or pasting or moving a waypoint or even duplicating a keyframe) can lead to the creation of a waypoint in the the keyframes that are immediately before and after the inserted waypoint's frame. The waypoints created in the neighboring keyframes are created according to the [[New Layer Defaults#Default Interpolation|default interpolation value]] in the [[Toolbox |toolbox window]].&lt;br /&gt;
&lt;br /&gt;
See the [[#Examples|examples]] to understand how this works.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adding, duplicating and removing keyframes ==&lt;br /&gt;
&lt;br /&gt;
===Add a keyframe===&lt;br /&gt;
[[Image: AddNewKeyframeButton.png]]&lt;br /&gt;
&lt;br /&gt;
Place the time cursor at a frame where there isn't currently any keyframe. Then press the Add new Keyframe button. If you place the time cursor at a frame where there is currently an existing keyframe then the Add Keyframe button is disabled. Once you press the button then a new entry is added to the list of keyframes and a vertical dashed line is added in the time line. No waypoint is created.&lt;br /&gt;
&lt;br /&gt;
===Duplicate a keyframe===&lt;br /&gt;
[[Image: DuplicateKeyframeButton.png]]&lt;br /&gt;
&lt;br /&gt;
Select a keyframe in the keyframe list of the [[Keyframes Panel]] and place the cursor at a frame where there isn't currently any keyframe. Then press the Duplicate Keyframe button. This would have two separated effects:&lt;br /&gt;
&lt;br /&gt;
# If there is a waypoint at the original keyframe then the waypoint is duplicated. Its duplication include the parameter value and its interpolation values.&lt;br /&gt;
# If there is no waypoint in the original keyframe for any particular parameter then two things could happen:&lt;br /&gt;
#*There is no waypoint for that parameter at ANY frame in the time line: Then NONE waypoint is created.&lt;br /&gt;
#*If there is a waypoint in the time line for that parameter, but not in the keyframe that is going to be duplicated, then in the duplicated keyframe is created a new waypoint with a value for the parameter of the result of the current value at the original keyframe and a TBC Smooth interpolation type for both &amp;quot;In&amp;quot; and &amp;quot;Out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Of course, duplicate a keyframe will produce a new keyframe at the place pointed by the time cursor and will add a new one to the keyframe list in the proper place. In the keyframe list, the new added keyframe have the same description than the original, plus a &amp;quot;(Duplicate)&amp;quot; at the end.&lt;br /&gt;
&lt;br /&gt;
===Remove a keyframe===&lt;br /&gt;
[[Image:RemoveKeyframeButton.png]]&lt;br /&gt;
&lt;br /&gt;
Just select a keyframe from the keyframe list and press the Remove keyframe button. It will remove the keyframe and all the waypoints for all parameters for all layers that are currently there.&lt;br /&gt;
&lt;br /&gt;
 ''NOTE: If you move a keyframe by modifying its [[#Time|time]] in the keyframe list dialog&lt;br /&gt;
 ''and immediately press the Remove Keyframe button then the waypoints are not''&lt;br /&gt;
 ''deleted. It seems to be a bug but also can be considered a feature if you really''&lt;br /&gt;
 ''want to keep the waypoints and not the keyframe.''&lt;br /&gt;
&lt;br /&gt;
== Editing keyframes: time, length &amp;amp; description ==&lt;br /&gt;
&lt;br /&gt;
You can see in the Keyframe list dialog that there are four headers on it:&lt;br /&gt;
&lt;br /&gt;
[[Image:KeyframesLookList.png]]&lt;br /&gt;
&lt;br /&gt;
* Time&lt;br /&gt;
* Length&lt;br /&gt;
* Jump&lt;br /&gt;
* Description&lt;br /&gt;
&lt;br /&gt;
The Jump column is only a shourt cut to place the time cursor at the keyframe where you make a click in the (JMP) label.&lt;br /&gt;
&lt;br /&gt;
=== Time ===&lt;br /&gt;
&lt;br /&gt;
You can modify the time (frame) where the keyframe is palced just making a click in the corresponding Time cell. It will allow modify the time forward or backward the amount that you want. If you try to set the time of a certain keyframe to be the same time of another existing keyframe then the program gives you this message:&lt;br /&gt;
&lt;br /&gt;
 keyframe_set: Cannot change keyframe time because another keyframe already exists with that time.&lt;br /&gt;
&lt;br /&gt;
Modify the Time of a keyframe have the following effects:&lt;br /&gt;
&lt;br /&gt;
# The existing waypoints in the keyframe will move to the new position.&lt;br /&gt;
# If any parameter have a a waypoint in the time line, then the moved keyframe will have a new waypoint set to TCB Smooth on those paramter(s).&lt;br /&gt;
# According to the default interpolation method and the Lock Keyframes status and to the parameters that have any waypoint in the time line, new waypoints will be created on the neighbouring keyframes of the destiny time (frame). The original neighbouring keyframes will be untouched if don't coincide with the destiny neighbouring keyframes.&lt;br /&gt;
&lt;br /&gt;
See [[#Change Keyframe Time|the example]] to see how that works.&lt;br /&gt;
&lt;br /&gt;
=== Length ===&lt;br /&gt;
&lt;br /&gt;
Change this cell doesn't seems to do nothig. Once you press INTRO you obtain the old value again. It seems to be only an informative label.&lt;br /&gt;
&lt;br /&gt;
=== Description ===&lt;br /&gt;
&lt;br /&gt;
This cell allow the user insert a short description of the meaning of the keyframe. Just make click on it and change the text.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Editing Keyframe Properties ==&lt;br /&gt;
[[Image: KeyframePropertiesButton.png]]&lt;br /&gt;
&lt;br /&gt;
The Keyframe Properties dialog allows change the interpolation method for all the waypoints on the keyframe at the same time. Even if, for a certain parameter, there is no waypoint on the keyframe but the parameter have other waypoints in the time line, then when you apply the Keyframe Properties you will add a waypoint at that keyframe were there aren't currently any waypoint. The added waypoint have the interpolation methods stated by the dialog. It means that the Keyframe Properties dialog will modify the interpolation methods for al the paramters that have any waypoint in the time line. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The dialog have the following parameters:&lt;br /&gt;
&lt;br /&gt;
[[Image: KeyframeDialog.png]]&lt;br /&gt;
* In: Checking this value you can change the interpolation method of the left part of the waypoints of the current selected keyframe of all the layers of the canvas to the selected [[Waypoints#Interpolation|interpolation method]] in the drop down menu.&lt;br /&gt;
* Out: Same but for the right part of the waypoint.&lt;br /&gt;
* Tension: See [[TCB]]&lt;br /&gt;
* Bias: See [[TCB]]&lt;br /&gt;
* Continuity:  See [[TCB]]&lt;br /&gt;
* Temporal Tension: See [[TCB]]&lt;br /&gt;
&lt;br /&gt;
You can check only one of both &amp;quot;In&amp;quot; or &amp;quot;Out&amp;quot; check boxes to only affect the change to the left or right part of the waypoints. The non checked part would not be modified. Same comment applies for the Manual interpolation method parameters (Tension, Bias, Continuity and Temporal Tension)&lt;br /&gt;
&lt;br /&gt;
[[Image: KeyframeDialog2.png]]&lt;br /&gt;
&lt;br /&gt;
This dialog would not affect what's the interpolation method for a new waypoint created by the user, automatically created by the keyframe duplication or by the lock keyframe state. The interpolation methods for new waypoints created in those cases will be both the same (In and Out or Left and Right) and depend only on the Default interpolation method of the Tool Box window.&lt;br /&gt;
&lt;br /&gt;
See the [[#Examples|examples]] to understand better how it works.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Duplicate a keyframe with no waypoint on it ===&lt;br /&gt;
For example, imagine that you have following set of keyframes and waypoints and the corresponding parameter of the radius of a circle:&lt;br /&gt;
{|&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
|+ Before duplicate keyframe at 2s to 6s&lt;br /&gt;
!Frame!!Keyframe!!Waypoint!!Radius!!Interpolation&lt;br /&gt;
|-&lt;br /&gt;
|0s||yes||yes||20.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|2s||yes||no||25.0||n/a&lt;br /&gt;
|-&lt;br /&gt;
|4s||yes||no||30.0||n/a&lt;br /&gt;
|-&lt;br /&gt;
|8s||no||yes||40.0||TCB Smooth&lt;br /&gt;
|} &lt;br /&gt;
[[Image: GraphBeforeDuplicate.png]]&lt;br /&gt;
&lt;br /&gt;
 notice that although the interpolation between 0s and 8s is TCB Smooth the real result &lt;br /&gt;
 is linear due that they are the only two waypoints of the animation for that parameter.&lt;br /&gt;
&lt;br /&gt;
If you select the keyframe at 2s, place the time cursor at 6s (where there isn't a keyframe), set the [[New Layer Defaults#Default interpolation | default interpolation]] to TCB Smooth, and have the [[Lock Keyframes | lock keyframe status]] to ''All keyframes locked'' and press the duplicate keyframe button, then the result is the following:&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
|+ After duplicate keyframe at 2s to 6s&lt;br /&gt;
!Frame!!Keyframe!!Waypoint!!Radius!!Interpolation&lt;br /&gt;
|-&lt;br /&gt;
|0s||yes||yes||20.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|2s||yes||no||25,78125||n/a&lt;br /&gt;
|-&lt;br /&gt;
|4s||yes||yes||30.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|6s||yes||yes||25.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|8s||no||yes||40.0||TCB Smooth&lt;br /&gt;
|}&lt;br /&gt;
[[Image: GraphAfterDuplicate.png]]&lt;br /&gt;
&lt;br /&gt;
You can see that:&lt;br /&gt;
# At 0s none has changed. Not affected by the insertion of the keyframe. It is two keyframes away from 6s and also have a waypoint.&lt;br /&gt;
# At 2s there was a keyframe and stills there. But previous to the creation of the keyframe at 6s the current interpolated value of the radius was 25.0. After the creation of the keyframe at 6s the radius is the result of the interpolation between 0s and 4s frames waypoints with its radius values and its interpolation methods. That is 25.78125. This keyframe is one keyframe away the new 6s keyframe so no waypoint is created.&lt;br /&gt;
#At 4s there was a keyframe and still being there. But in this case the 4s keyframe is a neighbor of the new 6s keyframe. As well as the lock keyframe state was set to ''All keyframes locked'' then the keyframe at 4s has been locked adding a waypoint on it. The radius value hasn't changed (still being 30.0) because it was locked adding a waypoint with its current value). The Interpolation mode of the waypoint was set to TCB Smooth as stated by its default value.&lt;br /&gt;
# At 6s there is a new keyframe with a new waypoint with the old value of the interpolated value of the keyframe at 2s. That is a radius of 25.0.&lt;br /&gt;
#At 8s nothing has changed. There wasn't any keyframe and there was a waypoint so nothing is expected to change.&lt;br /&gt;
&lt;br /&gt;
Imagine now that you repeat the same operations but you choose the default interpolation set to Constant. Then the result is the following:&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
|+ After duplicate keyframe at 2s to 6s (constant interpolation)&lt;br /&gt;
!Frame!!Keyframe!!Waypoint!!Radius!!Interpolation&lt;br /&gt;
|-&lt;br /&gt;
|0s||yes||yes||20.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|2s||yes||no||20.0||n/a&lt;br /&gt;
|-&lt;br /&gt;
|4s||yes||yes||30.0||Constant&lt;br /&gt;
|-&lt;br /&gt;
|6s||yes||yes||25.0||TCB Smooth&lt;br /&gt;
|-&lt;br /&gt;
|8s||no||yes||40.0||TCB Smooth&lt;br /&gt;
|}&lt;br /&gt;
[[Image: GraphAfterDuplicateConstant.png]]&lt;br /&gt;
&lt;br /&gt;
Now you can see that the keyframe at 2s doesn't hold the value of the parameter by itself. It only remember the value if a waypoint is created on it, by the result of the insertion of a neighbour waypoint, or if a keyframe is duplicated and the lock keyframe status affects that keyframe. In this example the value at 2s has changed drastically due to the different interpolation method for the created waypoint on 4s. If in this situation you duplicate again the keyframe at 2s to other frame (ej. 10s) then it would copy a keyframe with a waypoint on it with a radius's value of 20.0, what is the current value of the parameter in that keyframe before duplicate it.&lt;br /&gt;
&lt;br /&gt;
=== Editing Keyframe Properties ===&lt;br /&gt;
&lt;br /&gt;
Consider this situation for a certain layer:&lt;br /&gt;
&lt;br /&gt;
[[Image:BeforeChangeKeyframeProperties.png]]&lt;br /&gt;
&lt;br /&gt;
In the sample the animation duration is 10 seconds so the image shows all the existing waypoints and keyframes. The time cursor isn't over any keyframe.&lt;br /&gt;
&lt;br /&gt;
Now consider that you have the following default values:&lt;br /&gt;
&lt;br /&gt;
* [[New Layer Defaults#Default Interpolation|Default Interpolation]] method set to &amp;quot;Ease in/out&amp;quot;&lt;br /&gt;
* [[Lock Keyframes| Lock Keyframes]] status set to &amp;quot;All Keyframes Locked&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now select the keyframe at frame 4s in the keyframe list. Press the Keyframe Properties button and set the following interpolation method:&lt;br /&gt;
&lt;br /&gt;
[[Image: KeyframeProperties2.png]]&lt;br /&gt;
&lt;br /&gt;
and press Apply button. The result will be this:&lt;br /&gt;
&lt;br /&gt;
[[Image:AfterChangeKeyframeProperties.png]]&lt;br /&gt;
&lt;br /&gt;
You can see the following effects:&lt;br /&gt;
&lt;br /&gt;
# The existing waypoints at 4s keyframe have changed its interpolation methods according to the Keyframe Properties dialog.&lt;br /&gt;
# There are new added waypoints at 4s keyframe. The waypoints are added to the paramters that have almost one waypoint in the time line (for example the one that have only a waypoint at 9s). The added waypoints at 4s keyframe have the interpolation settings that was stated by the Keyframe Properties dialog.&lt;br /&gt;
# New waypoints have been created for the neighbouring keyframes to 4s (2s and 6s) fo all the parameters that have any waypoint in the time line. The waypoints are created in the neighbouring keyframes according to the [[Lock Keyframes |Lock Keyframes]] status. Also the created waypoints interpolation method responds to the [[New Layer Defaults#Default Interpolation|default interpolation]] method you have set.&lt;br /&gt;
&lt;br /&gt;
If in the Keyframe Properties dialog you were checked off the Out or the In check boxes then it would have happened two things:&lt;br /&gt;
&lt;br /&gt;
# The existing waypoints at 4s would only change its interpolation method on the side the check box was checked on. The other side will be untouched.&lt;br /&gt;
# The new added waypoints will have the interpolation method set to TCB Smooth method where the check box is off and the interpolation method set by the keyframe properties dialog where the check box is on.&lt;br /&gt;
&lt;br /&gt;
[[Image:AfterChangeKeyframeProperties2.png]]&lt;br /&gt;
&lt;br /&gt;
In this sample it was only checked on the &amp;quot;In&amp;quot; check box.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Change Keyframe Time ===&lt;br /&gt;
&lt;br /&gt;
Consider again this situation for a certain layer: &lt;br /&gt;
&lt;br /&gt;
[[Image:BeforeChangeKeyframeProperties.png]]&lt;br /&gt;
&lt;br /&gt;
Now consider that you have the following default values:&lt;br /&gt;
&lt;br /&gt;
* [[New Layer Defaults#Default Interpolation|Default Interpolation]] method set to &amp;quot;Ease in/out&amp;quot;&lt;br /&gt;
* [[Lock Keyframes| Lock Keyframes]] status set to &amp;quot;All Keyframes Locked&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now select the keyframe at frame 4s in the keyframe list. Make a click in the TIme cell and modify the time to be 3s. The result will be this:&lt;br /&gt;
&lt;br /&gt;
[[Image:AfterChangeKeyframeTime.png]]&lt;br /&gt;
&lt;br /&gt;
== Advanced uses of keyframes ==&lt;br /&gt;
&lt;br /&gt;
===Reusing keyframes===&lt;br /&gt;
If you want to learn more about advanced uses of keyframes see this tutorial about reusing animations. Keyframes can be like stored &amp;quot;poses&amp;quot; that can be reused several time in the animation. Very useful for lip sync. &lt;br /&gt;
&lt;br /&gt;
[[Reuse Animations]]&lt;br /&gt;
&lt;br /&gt;
===Usage of Onionskin===&lt;br /&gt;
&lt;br /&gt;
To properly use the onion skin feature (ALT-O or File&amp;gt;View&amp;gt;Toggle Onion Skin) you should consider the frame where the keyframes are set. Onion skin will show you the before and after keyframes images with a 50% opaque copy of the current view. Also the current view is 50% opaque.&lt;br /&gt;
&lt;br /&gt;
See [[Toggle Onion Skin]] for more detail.&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Doc:How_Do_I&amp;diff=5793</id>
		<title>Doc:How Do I</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Doc:How_Do_I&amp;diff=5793"/>
				<updated>2008-02-24T23:08:07Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: /* Copy a complex convert combination between parameters of different layers? */ Some typos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
&lt;br /&gt;
Feel free to add your own questions here. Or put them on the [[Wiki Wish List]].&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Apply a gradient to an object instead of the entire canvas? ==&lt;br /&gt;
&lt;br /&gt;
# Create the region you want to fill with a gradient, and the gradient layer, if you haven't already.&lt;br /&gt;
# Make sure that the gradient layer is above the region layer in the [[Layers Panel]].&lt;br /&gt;
# Select both layers, right click, and select [[Encapsulate]].&lt;br /&gt;
# Expand the new [[Paste Canvas|Inline Canvas]] layer if it's not already, and select your gradient layer.&lt;br /&gt;
# In the [[Params Panel]] select the [[Blend Method]] parameter, and choose [[Blend Method#Onto|Onto]] from the drop-down menu.&lt;br /&gt;
&lt;br /&gt;
The gradient will clip to the visible area of the region below it inside the [[Paste Canvas|Inline Canvas]]. (and any other layers in that section).&lt;br /&gt;
&lt;br /&gt;
== Show or hide a layer, or fade the effect of a blur? ==&lt;br /&gt;
In the [[Params Panel]], look for an option labeled [[Amount Parameter|Amount]] - this controls how much of the blended result of the layer is composited with the blend of the layers beneath it.&lt;br /&gt;
&lt;br /&gt;
In other words, for a typical layer, this will 'fade it out'. For a [[Blur Layer]] set to &amp;quot;[[Blend Method#Straight|Straight]]&amp;quot;, this will fade ''between'' the blurred version and the unblurred version of the canvas. If you want it to become less blurry, adjust the [[Blur Layer#Size|Blur Layer's 'size' parameter]].&lt;br /&gt;
&lt;br /&gt;
== Fill an outline? ==&lt;br /&gt;
(Requested by [[User:Karlb|Karlb]])&lt;br /&gt;
&lt;br /&gt;
There are several options:&lt;br /&gt;
* The easiest way is to link a new region layer to the outline's shape.&lt;br /&gt;
*# Select the outline you want to fill.&lt;br /&gt;
*# In the Params Panel, right-click the Vertices parameter, select &amp;quot;Export&amp;quot;, enter a name for the shape, and hit return.  This will export the shape of the outline, making it visible in the Children dialog.&lt;br /&gt;
*# In the Children dialog, open the ValueBase Nodes tree and select the name you just saved the shape as.&lt;br /&gt;
*# From the [[Layer Menu]] (either context-click on the [[Layers Panel]] or use the [[Canvas Menu Caret]]) create a new [[Region Layer]] by selecting &amp;quot;New Layer -&amp;gt; Geometry -&amp;gt; Region&amp;quot;. Ensure that the created layer is selected.&lt;br /&gt;
*# In the parameter dialog, right-click the Vertices parameter and click &amp;quot;Connect&amp;quot;.&lt;br /&gt;
*# Now, if you don't need exported shape, you can unexport it: right click name of the shape in the Children dialog and click &amp;quot;Unexport&amp;quot;.&lt;br /&gt;
* Similar to the above, but using a different method:&lt;br /&gt;
*# Create a new region layer as above, and leave it selected.&lt;br /&gt;
*# Don't make any changes to the outline layer, which you want to fill! (see the Tier 5 on the [[Linking]] page for details).&lt;br /&gt;
*# Select both layers in the [[Layers Panel]] This will display only the parameters shared by both layers in the [[Params Panel]].&lt;br /&gt;
*# Context-click on the [[Vertices Parameter]], and select [[Linking|Link]].&lt;br /&gt;
*# The [[Region Layer]] will snap to the shape of the [[Outline Layer]].&lt;br /&gt;
* When you create an [[Outline Layer|outline]] with the [[Bline Tool]] that you intend to be a filled area as well, make sure you select the Fill checkbox in the [[Bline Tool#Options|tool options dialog]]. Obviously, this doesn't help much if you realise later that you needed a fill here.&lt;br /&gt;
* If you are using the [[draw tool]], there is a button at the bottom of the [[draw tool#Options|tool options dialog]] labeled &amp;quot;Fill Last Stroke&amp;quot;, which creates a new [[Region Layer]] and links its shape to the previously drawn outline. Unfortunately, it doesn't work as of Synfig Studio v0.61.04.  It has been fixed in the current SVN version of the code.&lt;br /&gt;
* Create a [[Region Layer|region]] with the same number of ducks, and manually link each duck. If you want a region that depends on multiple outline layers, this is really your only choice for now.&lt;br /&gt;
* Use the draw tool, select only the outline to fill, draw a stroke roughly following the outline and make sure you're holding the Control key when you left go of the mouse button at the end of the stroke.  This doesn't work 100% right at the moment.&lt;br /&gt;
&lt;br /&gt;
== Dock windows together? ==&lt;br /&gt;
&lt;br /&gt;
*To dock (join) separate windows into one you must drag the tab ''icons'' for each of the tools into another window. &lt;br /&gt;
*You can create subdivisions inside the windows by dragging the icons into the side tabs (located around the edges, the look like rectangles). &lt;br /&gt;
*Tool tabs inside the window can be arranged by dragging them on top of one another, therefore changing the order.&lt;br /&gt;
&lt;br /&gt;
== Use an external bitmap? ==&lt;br /&gt;
&lt;br /&gt;
* In the image menu (&amp;gt;) choose file--&amp;gt;import. PNG with alpha channel works fine.&lt;br /&gt;
* To animate it without accidental stretching, right-click on the layer and choose encapsulate. You can then animate the position of the new &amp;quot;Inline Canvas&amp;quot; layer instead of the bbox.&lt;br /&gt;
&lt;br /&gt;
== Close a bline? ==&lt;br /&gt;
&lt;br /&gt;
* Right click on the starting point and then click on loop bline.&lt;br /&gt;
&lt;br /&gt;
Note: It doesn't work unless the initial point has a tangent - ie the first segment is curved. But you can hide tangent ducks (Alt+3, or &amp;quot;Caret Menu &amp;gt; View &amp;gt; Show/Hide Ducks &amp;gt; Show tangent ducks&amp;quot;) and process as described. Don't forget to press (Alt+3) after that to show tangent ducks again.&lt;br /&gt;
&lt;br /&gt;
== How do I transform encapsulated objects? ==&lt;br /&gt;
&lt;br /&gt;
* Right click on the Encapsulated object in the Layer dialog and choose &amp;quot;select all child layers&amp;quot;. Then you select the ducks you want to transform (usually just all of them, like for rotating the object), and the rotate or scale tool and do the work.&lt;br /&gt;
&lt;br /&gt;
== Make objects go behind each other, without moving layers? ==&lt;br /&gt;
&lt;br /&gt;
You'll notice each layer you make has a number in the z depth column in the Layers Panel. Say you have 3 layers, they will be numbered 2 (lowest, e.g. a square) 1 (eg a circle) 0 (highest, the default, e.g. a line). In order to make layer 1, the circle, pass behind layer 2, the square, change its z depth to be 3 or more. The z depth of the circle needs to be greater than 2 in order to be behind the square. To make the square on top of everything, you'd change its z depth to -1 or less. &lt;br /&gt;
&lt;br /&gt;
Positive numbers on the z axis go into the screen, and negative numbers go out of the screen, towards the viewer.  &lt;br /&gt;
&lt;br /&gt;
It is possible to animate this effect, but each layer is discrete. They seem to go from 0 to 0.9999.&lt;br /&gt;
&lt;br /&gt;
In addition, objects in encapsulated layers can only go behind other objects in the same encapsulated layer. However an encapsulated layer can go behind another encapsulated layer.&lt;br /&gt;
&lt;br /&gt;
== Copy a complex convert combination between parameters of different layers? ==&lt;br /&gt;
&lt;br /&gt;
For example: you want to copy a complicated [[Convert|conversion]] type that you have in one parameter from a layer, to other parameter (maybe not a root parameter, but a sub-parameter) of other layer. If you [[Export|export]] the complicated conversion type from the original layer and then go to the other layer and select [[Connect]] (right click and the exported and the parameter both selected) then you have the parameter form the second layer to be exactly the same than the original one. But there is a drawback: if you modify one of the sub-parameters in the complicated conversion type (e.g. you change the value of one of them) then automatically the same sub-parameter of the other layer is changed.&lt;br /&gt;
&lt;br /&gt;
How can you copy the conversion but allow modify the sub-parameters independently on each layer? &lt;br /&gt;
&lt;br /&gt;
Once you have achieved the complex conversion type in the original layer, &amp;lt;u&amp;gt;don't export the root parameter!&amp;lt;/u&amp;gt; If you have done yet [[Export|unexport]] it. (Why?. You will understand it later.) Now duplicate the original layer. Then you should obtain the same layer with the same conversion type placed at the same parameter (but not exported). NOW export the parameter from the duplicated layer. Then go to the (sub) parameter of the layer where you want to copy the complex conversion type and Connect it to the just exported parameter form the duplicated layer. Now delete the duplicated layer (!). Then the exported [[ValueNode]] still undeleted and the layer where you wanted to copy the complex convert type have a (sub) parameter connected to it. You can [[Export|unexport]] the ValueNode or not. It is up to you. But notice that the conversion type is already copied into other (sub) parameter of other layer and they are independent as well as you can change one of them (by modifying the sub-parameters) and the other remains untouched.&lt;br /&gt;
&lt;br /&gt;
== Make an existing animation run at half speed? ==&lt;br /&gt;
&lt;br /&gt;
If you have an animation that runs from 0s to 10s and you want it to run at half speed from 0s to 20s, how can you do that?&lt;br /&gt;
&lt;br /&gt;
* Either: encapsulate it, and use the 'time offset' parameter in the encapsulation layer to slow it down:&lt;br /&gt;
** Right-click 'time offset' in the encapsulation layer, convert&amp;gt;linear, rate -0.5 offset 0.  That means offset the time by -0.5 seconds per second - or in other words, run at half speed&lt;br /&gt;
** Or, putting waypoints on the 'time offset' param would work too: 0 at 0s and -10 at 20s.  (The choice between using a linear convert and valuenodes is entirely up to you.  They both achieve the same result in this simple case).&lt;br /&gt;
&lt;br /&gt;
* Or: use a [[Time Loop Layer]].  The first method seems better and more intuitive in this case, but there are ways of getting the same effect from the Time Loop layer.  Perhaps the Time Loop layer is better if the animation doesn't run from 0s, but from some other time.  Anyway: put a Time Loop layer over the layers you wish to slow down, and:&lt;br /&gt;
** Either: set duration to 0, local time to 0, convert-&amp;gt;linear the link time and set rate to 0.5 - this slows the animation down *to* 50% of its original speed;  use bigger rates to slow it down less&lt;br /&gt;
** Or: set duration to 1h (*), link time to 0, convert-&amp;gt;linear the local time and set rate to 0.5 - this slows the animation down *by* 50%; use bigger rates to slow it down more&lt;br /&gt;
(*) if your animation is longer than 1h then set this parameter to EOT (End Of Time) what is the same as Infinite (INF) for a real number but for a time parameter.&lt;br /&gt;
&lt;br /&gt;
== Draw a rectangle with a given width and height? ==&lt;br /&gt;
&lt;br /&gt;
I was asked on IRC how to specify the width and height of a rectangle, rather than having to specify the position of two opposite corners.  Here's how:&lt;br /&gt;
&lt;br /&gt;
* draw a rectangle&lt;br /&gt;
* go to the [[Params Panel]]&lt;br /&gt;
* right-click the 'point 1' parameter and [[Export]]&lt;br /&gt;
* give it a name, &amp;quot;p1&amp;quot; say&lt;br /&gt;
* right-click the 'point 2' parameter and [[Convert]] to [[Convert#Add|Add]]&lt;br /&gt;
* (that's saying that rather than specifying the absolute position of the other point, you want synfig to calculate it for you)&lt;br /&gt;
* (it will make 2 new sub-parameters for 'point 2', and the value used for point 2 will be their sum so we want to tell it to use 'point 1' and your (width,height))&lt;br /&gt;
* open up the sub-parameters of 'point 2' by clicking the triangle to its left&lt;br /&gt;
* go to the [[Children Panel]], open up the values and select the one you exported earlier (p1)&lt;br /&gt;
* right-click the &amp;quot;LHS&amp;quot; parameter in the parameters dialog and [[Connect]] it&lt;br /&gt;
* then enter the width and height you want in the 'RHS' parameter&lt;br /&gt;
&lt;br /&gt;
== Make linked BLine vertices not affected by Rotate layer? ==&lt;br /&gt;
Look at the http://dooglus.rincevent.net/synfig/logs/2008/%23synfig-2008-02-07.log &lt;br /&gt;
See also: [[Convert]].&lt;br /&gt;
&lt;br /&gt;
== Create dashed outlines? ==&lt;br /&gt;
&lt;br /&gt;
If you want to make simple dashed outlines the faster way is proceed like this:&lt;br /&gt;
&lt;br /&gt;
* Create a Curve Gradient and an Outline over the same [[Bline]] using the [[Bline Tool]] options. Check both Outline and Gradient at the [[Tool Options Panel]].&lt;br /&gt;
* Raise up the gradient layer (it is created below the [[Outline Layer]]).&lt;br /&gt;
* Modify the gradient [[Blend Method]] parameter to be Straight Onto. That would render the gradient onto the outline width. Also it wouldn't render the outline, so transparent portions of the gradient are transparent.&lt;br /&gt;
* Check the 'Perpendicular' parameter of the Curve Gradient Layer.&lt;br /&gt;
* [[Convert]] the Gradient Parameter of the Curve Gradient Layer to be one of those types: Stripes or Repeat Gradient.&lt;br /&gt;
* Modify the properties of the sub parameters to achieve the desired effect.&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Doc:How_Do_I&amp;diff=5791</id>
		<title>Doc:How Do I</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Doc:How_Do_I&amp;diff=5791"/>
				<updated>2008-02-24T23:01:55Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: /* Copy a complex convert combination between parameters of different layers? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Categories--&amp;gt;&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
&lt;br /&gt;
Feel free to add your own questions here. Or put them on the [[Wiki Wish List]].&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Apply a gradient to an object instead of the entire canvas? ==&lt;br /&gt;
&lt;br /&gt;
# Create the region you want to fill with a gradient, and the gradient layer, if you haven't already.&lt;br /&gt;
# Make sure that the gradient layer is above the region layer in the [[Layers Panel]].&lt;br /&gt;
# Select both layers, right click, and select [[Encapsulate]].&lt;br /&gt;
# Expand the new [[Paste Canvas|Inline Canvas]] layer if it's not already, and select your gradient layer.&lt;br /&gt;
# In the [[Params Panel]] select the [[Blend Method]] parameter, and choose [[Blend Method#Onto|Onto]] from the drop-down menu.&lt;br /&gt;
&lt;br /&gt;
The gradient will clip to the visible area of the region below it inside the [[Paste Canvas|Inline Canvas]]. (and any other layers in that section).&lt;br /&gt;
&lt;br /&gt;
== Show or hide a layer, or fade the effect of a blur? ==&lt;br /&gt;
In the [[Params Panel]], look for an option labeled [[Amount Parameter|Amount]] - this controls how much of the blended result of the layer is composited with the blend of the layers beneath it.&lt;br /&gt;
&lt;br /&gt;
In other words, for a typical layer, this will 'fade it out'. For a [[Blur Layer]] set to &amp;quot;[[Blend Method#Straight|Straight]]&amp;quot;, this will fade ''between'' the blurred version and the unblurred version of the canvas. If you want it to become less blurry, adjust the [[Blur Layer#Size|Blur Layer's 'size' parameter]].&lt;br /&gt;
&lt;br /&gt;
== Fill an outline? ==&lt;br /&gt;
(Requested by [[User:Karlb|Karlb]])&lt;br /&gt;
&lt;br /&gt;
There are several options:&lt;br /&gt;
* The easiest way is to link a new region layer to the outline's shape.&lt;br /&gt;
*# Select the outline you want to fill.&lt;br /&gt;
*# In the Params Panel, right-click the Vertices parameter, select &amp;quot;Export&amp;quot;, enter a name for the shape, and hit return.  This will export the shape of the outline, making it visible in the Children dialog.&lt;br /&gt;
*# In the Children dialog, open the ValueBase Nodes tree and select the name you just saved the shape as.&lt;br /&gt;
*# From the [[Layer Menu]] (either context-click on the [[Layers Panel]] or use the [[Canvas Menu Caret]]) create a new [[Region Layer]] by selecting &amp;quot;New Layer -&amp;gt; Geometry -&amp;gt; Region&amp;quot;. Ensure that the created layer is selected.&lt;br /&gt;
*# In the parameter dialog, right-click the Vertices parameter and click &amp;quot;Connect&amp;quot;.&lt;br /&gt;
*# Now, if you don't need exported shape, you can unexport it: right click name of the shape in the Children dialog and click &amp;quot;Unexport&amp;quot;.&lt;br /&gt;
* Similar to the above, but using a different method:&lt;br /&gt;
*# Create a new region layer as above, and leave it selected.&lt;br /&gt;
*# Don't make any changes to the outline layer, which you want to fill! (see the Tier 5 on the [[Linking]] page for details).&lt;br /&gt;
*# Select both layers in the [[Layers Panel]] This will display only the parameters shared by both layers in the [[Params Panel]].&lt;br /&gt;
*# Context-click on the [[Vertices Parameter]], and select [[Linking|Link]].&lt;br /&gt;
*# The [[Region Layer]] will snap to the shape of the [[Outline Layer]].&lt;br /&gt;
* When you create an [[Outline Layer|outline]] with the [[Bline Tool]] that you intend to be a filled area as well, make sure you select the Fill checkbox in the [[Bline Tool#Options|tool options dialog]]. Obviously, this doesn't help much if you realise later that you needed a fill here.&lt;br /&gt;
* If you are using the [[draw tool]], there is a button at the bottom of the [[draw tool#Options|tool options dialog]] labeled &amp;quot;Fill Last Stroke&amp;quot;, which creates a new [[Region Layer]] and links its shape to the previously drawn outline. Unfortunately, it doesn't work as of Synfig Studio v0.61.04.  It has been fixed in the current SVN version of the code.&lt;br /&gt;
* Create a [[Region Layer|region]] with the same number of ducks, and manually link each duck. If you want a region that depends on multiple outline layers, this is really your only choice for now.&lt;br /&gt;
* Use the draw tool, select only the outline to fill, draw a stroke roughly following the outline and make sure you're holding the Control key when you left go of the mouse button at the end of the stroke.  This doesn't work 100% right at the moment.&lt;br /&gt;
&lt;br /&gt;
== Dock windows together? ==&lt;br /&gt;
&lt;br /&gt;
*To dock (join) separate windows into one you must drag the tab ''icons'' for each of the tools into another window. &lt;br /&gt;
*You can create subdivisions inside the windows by dragging the icons into the side tabs (located around the edges, the look like rectangles). &lt;br /&gt;
*Tool tabs inside the window can be arranged by dragging them on top of one another, therefore changing the order.&lt;br /&gt;
&lt;br /&gt;
== Use an external bitmap? ==&lt;br /&gt;
&lt;br /&gt;
* In the image menu (&amp;gt;) choose file--&amp;gt;import. PNG with alpha channel works fine.&lt;br /&gt;
* To animate it without accidental stretching, right-click on the layer and choose encapsulate. You can then animate the position of the new &amp;quot;Inline Canvas&amp;quot; layer instead of the bbox.&lt;br /&gt;
&lt;br /&gt;
== Close a bline? ==&lt;br /&gt;
&lt;br /&gt;
* Right click on the starting point and then click on loop bline.&lt;br /&gt;
&lt;br /&gt;
Note: It doesn't work unless the initial point has a tangent - ie the first segment is curved. But you can hide tangent ducks (Alt+3, or &amp;quot;Caret Menu &amp;gt; View &amp;gt; Show/Hide Ducks &amp;gt; Show tangent ducks&amp;quot;) and process as described. Don't forget to press (Alt+3) after that to show tangent ducks again.&lt;br /&gt;
&lt;br /&gt;
== How do I transform encapsulated objects? ==&lt;br /&gt;
&lt;br /&gt;
* Right click on the Encapsulated object in the Layer dialog and choose &amp;quot;select all child layers&amp;quot;. Then you select the ducks you want to transform (usually just all of them, like for rotating the object), and the rotate or scale tool and do the work.&lt;br /&gt;
&lt;br /&gt;
== Make objects go behind each other, without moving layers? ==&lt;br /&gt;
&lt;br /&gt;
You'll notice each layer you make has a number in the z depth column in the Layers Panel. Say you have 3 layers, they will be numbered 2 (lowest, e.g. a square) 1 (eg a circle) 0 (highest, the default, e.g. a line). In order to make layer 1, the circle, pass behind layer 2, the square, change its z depth to be 3 or more. The z depth of the circle needs to be greater than 2 in order to be behind the square. To make the square on top of everything, you'd change its z depth to -1 or less. &lt;br /&gt;
&lt;br /&gt;
Positive numbers on the z axis go into the screen, and negative numbers go out of the screen, towards the viewer.  &lt;br /&gt;
&lt;br /&gt;
It is possible to animate this effect, but each layer is discrete. They seem to go from 0 to 0.9999.&lt;br /&gt;
&lt;br /&gt;
In addition, objects in encapsulated layers can only go behind other objects in the same encapsulated layer. However an encapsulated layer can go behind another encapsulated layer.&lt;br /&gt;
&lt;br /&gt;
== Copy a complex convert combination between parameters of different layers? ==&lt;br /&gt;
&lt;br /&gt;
For example: you want to copy a complicated [[Convert|conversion]] type that you have in one parameter from a layer, to other parameter (maybe not a root parameter, but a sub-parameter) of other layer. If you [[Export|export]] the complicated conversion type from the original layer and then go to the other layer and select [[Connect]] (right click and the exported and the parameter both selected) then you have the parameter form the second layer to be exactly the same than the original one. But there is a drawback: if you modify one of the sub-parameters in the complicated conversion type (e.g. you change the value of one of them) then automatically the same sub-parameter of the other layer is changed.&lt;br /&gt;
&lt;br /&gt;
How can you copy the conversion but allow modify the sub-parameters independently on each layer? &lt;br /&gt;
&lt;br /&gt;
Once you have achieved the complex conversion type in the original layer, &amp;lt;u&amp;gt;don't export the root parameter!&amp;lt;/u&amp;gt; if you have done yet [[Export|unexport]] it. (Why?). You will understand it later. Now duplicate the original layer. Then you should obtain the same layer with the same conversion type placed at the same parameter (but not exported). NOW export the parameter from the duplicated layer. Then go to the (sub) parameter of the layer where you want to copy the complex conversion type and Connect it to the just exported parameter form the duplicated layer. Now delete the duplicated layer (!). Then the exported [[ValueNode]] still undeleted and the layer where you wanted to copy the complex convert type have a (sub) parameter connected to it. You can [[Export|unexport]] the ValueNode or not. It is up to you. But notice that the conversion type is already copied into other (sub) parameter of other layer and they are independent as well as you can change one of them (by modifying the sub-parameters) and the other remains untouched.&lt;br /&gt;
&lt;br /&gt;
== Make an existing animation run at half speed? ==&lt;br /&gt;
&lt;br /&gt;
If you have an animation that runs from 0s to 10s and you want it to run at half speed from 0s to 20s, how can you do that?&lt;br /&gt;
&lt;br /&gt;
* Either: encapsulate it, and use the 'time offset' parameter in the encapsulation layer to slow it down:&lt;br /&gt;
** Right-click 'time offset' in the encapsulation layer, convert&amp;gt;linear, rate -0.5 offset 0.  That means offset the time by -0.5 seconds per second - or in other words, run at half speed&lt;br /&gt;
** Or, putting waypoints on the 'time offset' param would work too: 0 at 0s and -10 at 20s.  (The choice between using a linear convert and valuenodes is entirely up to you.  They both achieve the same result in this simple case).&lt;br /&gt;
&lt;br /&gt;
* Or: use a [[Time Loop Layer]].  The first method seems better and more intuitive in this case, but there are ways of getting the same effect from the Time Loop layer.  Perhaps the Time Loop layer is better if the animation doesn't run from 0s, but from some other time.  Anyway: put a Time Loop layer over the layers you wish to slow down, and:&lt;br /&gt;
** Either: set duration to 0, local time to 0, convert-&amp;gt;linear the link time and set rate to 0.5 - this slows the animation down *to* 50% of its original speed;  use bigger rates to slow it down less&lt;br /&gt;
** Or: set duration to 1h (*), link time to 0, convert-&amp;gt;linear the local time and set rate to 0.5 - this slows the animation down *by* 50%; use bigger rates to slow it down more&lt;br /&gt;
(*) if your animation is longer than 1h then set this parameter to EOT (End Of Time) what is the same as Infinite (INF) for a real number but for a time parameter.&lt;br /&gt;
&lt;br /&gt;
== Draw a rectangle with a given width and height? ==&lt;br /&gt;
&lt;br /&gt;
I was asked on IRC how to specify the width and height of a rectangle, rather than having to specify the position of two opposite corners.  Here's how:&lt;br /&gt;
&lt;br /&gt;
* draw a rectangle&lt;br /&gt;
* go to the [[Params Panel]]&lt;br /&gt;
* right-click the 'point 1' parameter and [[Export]]&lt;br /&gt;
* give it a name, &amp;quot;p1&amp;quot; say&lt;br /&gt;
* right-click the 'point 2' parameter and [[Convert]] to [[Convert#Add|Add]]&lt;br /&gt;
* (that's saying that rather than specifying the absolute position of the other point, you want synfig to calculate it for you)&lt;br /&gt;
* (it will make 2 new sub-parameters for 'point 2', and the value used for point 2 will be their sum so we want to tell it to use 'point 1' and your (width,height))&lt;br /&gt;
* open up the sub-parameters of 'point 2' by clicking the triangle to its left&lt;br /&gt;
* go to the [[Children Panel]], open up the values and select the one you exported earlier (p1)&lt;br /&gt;
* right-click the &amp;quot;LHS&amp;quot; parameter in the parameters dialog and [[Connect]] it&lt;br /&gt;
* then enter the width and height you want in the 'RHS' parameter&lt;br /&gt;
&lt;br /&gt;
== Make linked BLine vertices not affected by Rotate layer? ==&lt;br /&gt;
Look at the http://dooglus.rincevent.net/synfig/logs/2008/%23synfig-2008-02-07.log &lt;br /&gt;
See also: [[Convert]].&lt;br /&gt;
&lt;br /&gt;
== Create dashed outlines? ==&lt;br /&gt;
&lt;br /&gt;
If you want to make simple dashed outlines the faster way is proceed like this:&lt;br /&gt;
&lt;br /&gt;
* Create a Curve Gradient and an Outline over the same [[Bline]] using the [[Bline Tool]] options. Check both Outline and Gradient at the [[Tool Options Panel]].&lt;br /&gt;
* Raise up the gradient layer (it is created below the [[Outline Layer]]).&lt;br /&gt;
* Modify the gradient [[Blend Method]] parameter to be Straight Onto. That would render the gradient onto the outline width. Also it wouldn't render the outline, so transparent portions of the gradient are transparent.&lt;br /&gt;
* Check the 'Perpendicular' parameter of the Curve Gradient Layer.&lt;br /&gt;
* [[Convert]] the Gradient Parameter of the Curve Gradient Layer to be one of those types: Stripes or Repeat Gradient.&lt;br /&gt;
* Modify the properties of the sub parameters to achieve the desired effect.&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	<entry>
		<id>https://wiki.synfig.org/index.php?title=Lock_Keyframes&amp;diff=5790</id>
		<title>Lock Keyframes</title>
		<link rel="alternate" type="text/html" href="https://wiki.synfig.org/index.php?title=Lock_Keyframes&amp;diff=5790"/>
				<updated>2008-02-24T22:58:03Z</updated>
		
		<summary type="html">&lt;p&gt;Rubikcube: link -&amp;gt; Keyframe&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The 'Lock Keyframes' setting is controlled by clicking the button at the far right of the timetrack at the bottom of the canvas window.  The icon has a picture of a padlock on it, with arrows pointing left and right, and will only be visible if your canvas has a non-zero end time.  It will only be active if you're not currently using a tool which disables the timetrack, such as the bline tool or the draw tool. &lt;br /&gt;
&lt;br /&gt;
[[Image: LockKeyframeButton.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Clicking on the icon steps it through its 4 possible values:&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
| All Keyframes Locked (both arrows are lit up) || [[Image: Keyframe_lock_all_64.png]] &lt;br /&gt;
|-&lt;br /&gt;
| Past Keyframes Locked (left arrow is lit up) || [[Image: Keyframe_lock_past_64.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Future Keyframes Locked (right arrow is lit up) || [[Image: Keyframe_lock_future_64.png]]&lt;br /&gt;
|-&lt;br /&gt;
| No Keyframes Locked (neither arrow is lit up) || [[Image: Keyframe_lock_none_64.png]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The setting has no effect unless the canvas is in [[Animate Editing Mode|animate editing mode]].  When the canvas is in animate editing mode, however, and a parameter is changed, [[Waypoints|waypoints]] will be created in whichever of the immediately preceding and immediately following [[Keyframe|keyframes]] are indicated by its value.&lt;br /&gt;
&lt;br /&gt;
For example, if you are currently editing at 2s, and keyframes exist at 0s, 1s, 3s and 4s, then:&lt;br /&gt;
&lt;br /&gt;
*If 'lock keyframes' is set to 'All Keyframes Locked', waypoints will be created at 1s and 3s.&lt;br /&gt;
&lt;br /&gt;
[[Image: WaypointsLockAll.png]]&lt;br /&gt;
*If 'lock keyframes' is set to 'Past Keyframes Locked', a waypoint will be created at 1s.&lt;br /&gt;
&lt;br /&gt;
[[Image: WaypointsLockFuture.png]]&lt;br /&gt;
*If 'lock keyframes' is set to 'Future Keyframes Locked', a waypoint will be created at 3s.&lt;br /&gt;
&lt;br /&gt;
[[Image: WaypointsLockPast.png]]&lt;br /&gt;
*If 'lock keyframes' is set to 'No Keyframes Locked', no extra waypoints will be created.&lt;br /&gt;
&lt;br /&gt;
[[Image: WaypointsLockNone.png]]&lt;br /&gt;
&lt;br /&gt;
In all 4 cases, a waypoint will be created at the current time point, 2s.&lt;/div&gt;</summary>
		<author><name>Rubikcube</name></author>	</entry>

	</feed>