FORUMS: list search recent posts

# export absolute scale and rotation after parenting

FAQ   •   VIEW ALL
 export absolute scale and rotation after parenting on Sep 4, 2013 at 2:37:18 pm

Hey cow,

I want to export data from one layer, which has been parented to multiple nulls for every shot. I need all the absolute data in one layer so I can export to .txt and copy the coordinates for an html project.

for the absolute position I already found this on the forum:
L = thisComp.layer("layer");
L.toWorld(L.anchorPoint);

This works great, but I was wondering if it is also possible to get absolute rotation and scale.

marcel

 Re: export absolute scale and rotation after parentingon Sep 5, 2013 at 1:57:54 pm

I found what is weird about this: scale is in percentage, so it is a relative value. So what I'm asking is a absolute percentage....

I'm starting to doubt if this is possible, although it seems like a pretty common thing to ask.

Maybe a giant expression of 100*(percentage null1)*(percentage null2).... etc is a solution? Or will I get weird values when taking percentages from percentages?

 Re: export absolute scale and rotation after parentingon Sep 5, 2013 at 5:40:22 pm

This should give you the world scale of a parented layer:

s = scale[0];
L = thisLayer;
while (L.hasParent){
s = s*L.parent.scale[0]/100;
L = L.parent;
}
s

And this should give you the rotation (unless the layers are 3D, which is a trickier problem):

r = rotation;
L = thisLayer;
while (L.hasParent){
r += L.parent.rotation;
L = L.parent;
}
r

Dan

 Re: export absolute scale and rotation after parentingon Sep 6, 2013 at 4:48:08 pm

I do not completely understand it, but it works! so thank a mega lot :)

 Re: export absolute scale and rotation after parentingon May 15, 2014 at 12:05:47 pm

Dan, I just love your amazing smart programming skills.
these 7 lines are beautyfull, even for a bad coder like me..

 Re: export absolute scale and rotation after parentingon Sep 9, 2015 at 9:28:48 pmLast Edited By miha zaletel on Sep 9, 2015 at 9:39:33 pm

Thank Dan, rely great code!

How it counts the parents in while sentence?

I just don't understand how it jumps to next layer in chain and checks if has parent.
For my case it works for 3layers long chain and then when it comes to fourth it breaks.
The fourth parent layer is not in the line(index stack) with the first three.

here is a sketch of layer stacking with index:

lay1/index5 < lay2/inde6 < lay3/index7 < lay4/index15 < lay4/index1

any idea?

mz

 Re: export absolute scale and rotation after parentingon Sep 9, 2015 at 9:48:13 pm

It works for me with many layers, in any order. What are you doing with the result of the expression?

Dan

 Re: export absolute scale and rotation after parentingon Sep 10, 2015 at 2:59:36 pm

It is complicated a bit.

my purpose is to create 'smart' matte for HAND of a rigged character. Matte will allow to have hand behind the body and in front of the head. I have rigged character in main comp. In comp 'hand matte' I have solid, that fill area where both HANDS moves(solid cover hands in any position). On top of that solid I have HEAD with which I will control the shoving of hand in main comp(if hand is in front of head or not).

So I'm trying to copy animation of the head in main comp to the 'hand matte' comp. I realize that your code works just fine, the breaker is the code for head position(I'll paste it below). The code is beyond my
knowledge. I changed if to while, but the problem stays the same(I thought that if sentence depends on layer index stack..).

It is interesting that it breaks in 4ourth parent and not before.

I know it's wery confusing. If u have will I'll be hapy to send you project. my mail is miha_zaletel@yahoo.com

thank U,

mz

```//from Felt Tips ctrl = comp("LOYZI_").layer("loy_GLAVA_newSCALE"); // head layer in main comp offsetP = thisLayer.toWorld(thisLayer.anchorPoint, 0) - ctrl.toWorld(ctrl.anchorPoint,0); //calculate absolute offset ? PWrld = ctrl.toWorld(ctrl.anchorPoint) + offsetP; // if(thisLayer.hasParent) thisLayer.parent.fromWorld(PWrld); // ctrl is parented not this layer, so how can expression work for first three parents chain? else PWrld;```

 Re: export absolute scale and rotation after parentingon Sep 10, 2015 at 4:13:42 pm

I don't completely understand what you're trying to do, but if you want to follow the parenting hierarchy of the ctrl layer, you could do it like this:

L = ctrl;
while(L.hasParent){
// do stuff
L = L.parent;
}

 Re: export absolute scale and rotation after parentingon Sep 14, 2015 at 2:16:02 pm

Dan, your method tracks parents perfect! And help me a lot, thank U.

I use this method to track and than link position and rotation to a precomp. I just have problem that
I have in main comp this layer linked to one of a parents in my chain. So I got double result.

I calculate offset to eliminate double transformation when it is position change. But I cant set the proper offset for position of a layer when the animation is done by rotation(it works till it hits the parent layer in main comp 'pants_ctrl').

Is it clear? I can recreate my comps setup.

regards,

mz

on rotation I have:
(I think that offset works fine, but not sure)

mattP=comp("COMP").layer("pants_ctrl").transform.rotation;
all= comp("COMP").layer("position_ALL").transform.rotation;

r = ctrl.transform.rotation;
L =ctrl;
while (L.hasParent){
r += L.parent.rotation ;
L = L.parent;
}
r - mattP - all

on position I have:

mattP=comp("COMP").layer("pants_ctrl").transform.rotation;
all= comp("COMP").layer("position_ALL").transform.rotation;

off= ctrl.transform.position.valueAtTime(0) - ctrl.transform.position.value; // pure offset from sors position of my head layer
offM= mattP.transform.position.valueAtTime(0) - mattP.transform.position.value; // offset wen parent 01 transforms position;
offA= all.transform.position.valueAtTime(0) - all.transform.position.value; // offset wen parent 02 transforms position;

P= ctrl.transform.position;
L= ctrl;

while(L.hasParent){
if (L.parent == mattP && mattP.rotation !=0 )
{

P= ctrl.toWorld(ctrl.anchorPoint) - off; // if we deal with parent layer subtract offset ?
L=L.parent;
}
else;

P = ctrl.toWorld(ctrl.anchorPoint);
L = L.parent;
}

P + offM + offA ;