Blob Blame Raw
THE PROBLEM OF THE TANGENT OF THE BLINES UNDER BONE INFLUENCE
=============================================================
Tangents are relative to vertices in any of its definitions (radius, angle)
or (x,y). As the transformation performed by bones is prepaed to work on
global coordinates vertices, the tangent transformation can not be directly
transformed by bones in that way.

There are some solutions to solve that:
1) 	The solution that Anime Studio gives to the tangents: It doesn't
	have real tangents but calculated ones based on the neighbour vertices
	position and a parameter called 'curvature'.

2) 	As well the tangents are relative to the vertex it belongs to, we
	need to convert the tangent to global coordinates, transform it by the
	bone(s) influence and then convert it to local coordinates again.



1) PROPOSAL FOR TANGENTS 'CALCULATED' BASED ON NEIGHBOR VERTICES
================================================================

	param						convert type					value type
	-----						------------					----------
	Tangent                     AverageTangent					Vector
		Current					BoneInfluence					Vector
		Next					BoneInfluence					Vector
		Previous				BoneInfluence					Vector
		Link					Vector							Vector

'Current' is the current vertex in the bline (where the tangent lies) it is not a parameter
'Next' is the next vertex in the bline relative to Current
'Previous' it is the previous vertex in the bline relative to Current.

Resulting Tangent (radius, angle) is defined by:

Let's call: V=Current-(Next+Previous)*0.5
Let's call: V0=Current.Link-(Next.Link+Previous.Link)*0.5


Radius:
radius = Link.radius

Angle:
angle=atan2(V.x,V.y) - (atan2(V0.x,V0.y)-Link.angle)

When the user manipulates the tangent duck it modifies Link as an offset.

Problems:
-Insert a vertex
-Vertex "on", "off"

2) PROPOSAL FOR TANGENTS IN GLOBAL COORDINATES
==============================================

Given a vertex V and a tangent T and a transformed position of the vertex
after bone influence V', calculate the transformed position of the tangent.

global position of the tangent:
TG=V+T
TG'=V'+T'

T'=TG'-V' = (V+T)' -V' where ' means transformed by bones.

	param						convert type					value type
	-----						------------					----------
	Tangent						BoneTangent						Vector
		Bone Weight List		List							Static List
		Link (T)												Vector
		Vertex (V)												Vector

It is reasonable that the Bone Weight List is the same for both parameters.

When user manipulates the tangent duck it modifies the parameter T.