Creative Communities of the World Forums

The peer to peer support community for media production professionals.

Activity Forums Adobe After Effects How to properly get the center of a shape? Advanced Doubt

  • How to properly get the center of a shape? Advanced Doubt

    Posted by Albert Navarro on March 28, 2019 at 3:32 pm

    This may be hard to explain, but basically I have 3 shape layers with a circle. I’d like to connect them all with a line using “Beam”. To do so, I pickwhip the starting point of the beam to the position of one of the circles, but it doesn’t go to the center. The anchor point is centered and there is no offset anywhere, why doesn’t it get the center of the circle?

    Here are some screenshots so you can see what I mean:

    This is what I’m trying to get:

    This is what I have and what happens:

    As you can see here there’s no offset and the anchor point is centered:

    I don’t know if you can see it, put the beam’s length is at a 100%, and the starting point is pickedwhiped to the small circle on the left, and the end point to the small circle on the bottom left. It moves correctly following the circles’ keyframes, but there’s like an offset that for some reason deviates the point from the center of the shape layer.

    Is there anyway to get the circle’s center?

    Thanks in advance.

    Albert Navarro replied 7 years, 1 month ago 3 Members · 3 Replies
  • 3 Replies
  • Steve Bentley

    March 28, 2019 at 8:45 pm

    After just a quick look: you have your circles as 3D layers. You have your beam as a 2D layer. Are they all at the same z depth? (which would have to be 0 since the beam is 2D.)
    If you can’t make your beam a 3D layer (and there’s lots of reasons why that might be bad), you can use localToGlobal expressions to get the value of the circle’s anchor point as it relates to 2D space.

  • Oleg Pirogov

    March 28, 2019 at 9:25 pm

    Shape Layer position is not the same as your circle center position.

    Your circle center position is layer(“Circle8”).content(“Ellipse 1”).content(“Ellipse Path 1”).position
    Which is [0,0].

    Those coordinates are given in “Ellipse 1” group’s own coordinate space. It’s origin can be found as thisComp.layer(“Circle8”).content(“Ellipse 1”).transform.position – thisComp.layer(“Circle8”).content(“Ellipse 1”).transform.anchorPoint
    Those are position and anchor point of “Ellipse 1” group, both =[0,0] in your case.

    Those coordinates are given in Circle8’s own coordinate space. And Circle8 position is thisComp.layer(“Circle8”).transform.position
    Which is [426.2, 365.1, -45.0].

    But it is a 3D layer shifted along Z-axis (by -45.0) and beam layer is in 2D, so simply taking first 2 coordinates won’t correspond to visible shape layer’s origin position i.e. beam will still be misplaced.
    —————————-

    So you have to take all of this into account (expression for starting/ending point to move it to Circle8’s center):
    posPath=thisComp.layer("Circle8").content("Ellipse 1").content("Ellipse Path 1").position;
    ancGr=thisComp.layer("Circle8").content("Ellipse 1").transform.anchorPoint;
    posGr=thisComp.layer("Circle8").content("Ellipse 1").transform.position;
    p=thisComp.layer("Circle8").toComp(posPath+posGr-ancGr);
    [p[0], p[1]];

    BTW, since you have only changed layer’s position leaving all other values a =[0,0], in your particular case you can just write:
    p=thisComp.layer("Circle8").toComp([0,0,0]);
    [p[0], p[1]];

    BTW, that “toComp” thing is the one that accounts for Z-axis shift of the shape layer.

  • Albert Navarro

    March 28, 2019 at 9:42 pm

    Hey! Thank you very much. Yeah that was basically the problem, I didn’t think of that. I actually solved it by myself before my post was even approved, so I couldn’t delete it. Sometimes you focus on the hardest things and it’s the most basic stuff that you’re doing wrong 🙂

We use anonymous cookies to give you the best experience we can.
Our Privacy policy | GDPR Policy