Difference between revisions of "Linking"
m (Text replace - ']]' to '}}')
|Line 1:||Line 1:|
== Introduction ==
== Introduction ==
Revision as of 11:39, 17 June 2010
It's possible to link two ducks together so that when one moves, the other moves with it. This is done automatically when you create an outline and region at the same time in the bline tool; a single bline is created, and is linked to the vertices parameter of both the outline and the region. This allows you to move the outline around and have the region it surrounds automatically move with it.
To link some ducks together, select them by selecting their layer(s) and dragging a box around them, or by holding the control key and toggling individual ducks on, then right-click on one of the selected ducks and select 'link' from the context menu.
All of the selected ducks must be of the same basic type. You can't link a real value to a vector value. You can usually link a vertex to a tangent if you like, because they are both vector values. I'm not sure it makes much sense to do so, however.
Which Duck Moves and Which Stays Still?
So you've selected a bunch of ducks, right clicked to bring up the menu and clicked 'link'. Which of the ducks' positions is used as the new shared position?
It works like this: a tiered decision process:
Tier 0 is applied only for ducks which are simple values (ie. none of them correspond to a ValueNode). There could be two cases:
- If each duck is from a different layer, then the 'first' one is the one from the topmost layer as of svn r1564. Before that the one from the lowest layer was used.
- If the ducks are from the same layer, it seems to be the duck listed last in the parameter dialog that has its value used.
This case won't happen if any of the ducks are animated, converted, or already linked to anything else, including being part of a bline.
If any of the ducks are an exported value:
- If all the ducks which are an exported value are the same exported value, then that value is used.
- Otherwise it's an error; linking isn't allowed to change an exported value.
So none of the ducks are an exported value.
If any of the ducks are referenced more than the others, then one of those is used.
What does 'referenced' mean? It's a count of how many times the value is used. If 2 ducks are linked together, that value will be referenced twice.
Notice that if you draw an outline and region at once using the bline tool, the points in the created layers will each have a reference count of one, since the points themselves aren't linked to each other. Rather, it is the blines (the lists of blinepoints) that are linked. On the other hand, if you draw an outline and a region separately and link their vertices individually, then each vertex will have a reference count of 2.
If it's still not decided which one to use, and some of the ducks are animated and others are constant values, then one of the animated ones will be used.
After that, if two or more ducks are animated, the one with the most waypoints gets priority.
If it's still not decided, then the one that was least recently modified will get priority.
So if all other things are equal, you can decide which duck gets moved by nudging the one you want to move a little just before linking.
Note that until svn r1563 the modification time wasn't being initialised when layers were first created. This had the effect of giving the modification time a random value, which usually came out around zero, and so newly created layers would appear to be older than old-but-edited layers.
If even the modification date of the ValueNodes is the same, there's nothing to base the decision on and so the 'first' duck's value is used.