Skip navigation
JurajMolcak
Currently Being Moderated

script to access animated mask vertices XY position data

Jul 25, 2011 2:45 AM

hello,

 

I believe there is a way to extract XY positions of vertices on animated maskShape. I would love to use this extracted data to drive XY positions on several Null objects in another layers. So every Null object is related to different vertex on maskShape. I found an older Rotoscopy script that work in sort of opposite way I need. Is there anything like that out there? Is it even possible to create?


Thanks for your help.
Jr.

 
Replies
  • Currently Being Moderated
    Jul 25, 2011 1:43 PM   in reply to JurajMolcak

    Here's a simple example that creates a null for each mask vertex. It assumes:

     

    • The layer with the mask is the first layer in the active comp
    • The number of mask vertices doesn't change
    • The layer isn't parented, rotated, or 3D

     

    {
        var myComp = app.project.activeItem;
        var myLayer = myComp.layer(1);
        var myPath = myLayer.property("Masks").property("Mask 1").property("Mask Path");
        var numVerts = myPath.valueAtTime(myLayer.inPoint,false).vertices.length;
        var myNulls = [];
        var myNull;
        var myVerts = [];
        // create nulls
        for (var i = 0; i < numVerts; i++){
            myNull = myComp.layers.addNull(myComp.duration);
            myNull.name = "Vertex " + (i+1);
                myNulls[i] = myNull;
        }
        var t = myLayer.inPoint;
        var p;
        while (t <= myLayer.outPoint){
            myVerts = myPath.valueAtTime(t,false).vertices;
            p = myLayer.property("Position").valueAtTime(t,false) -
                myLayer.property("Anchor Point").valueAtTime(t,false);
            for (var i = 0; i < numVerts; i++){
                myNulls[i].property("Position").setValueAtTime(t,p + myVerts[i]);
            }
            t += myComp.frameDuration;
        }
    }

     

    It gets a bit more complicated if you're dealing with parenting, rotation and/or 3D. You may need to temporarily add a Point Control with a layer space transform expression to do the space conversion and harvest the result.

     

    Dan

     
    |
    Mark as:
  • Currently Being Moderated
    Dec 18, 2012 2:45 AM   in reply to Dan Ebberts

    Having done this, what's the best way to then make a shape with those nulls via a bezier path between them and then be animating the nodes to "draw" the changes to the shape?  Is this possible?  And this manner are we then able to "draw by numbers" in that the nulls have full coordinate controllability?

     
    |
    Mark as:

More Like This

  • Retrieving data ...

Bookmarked By (1)

Answers + Points = Status

  • 10 points awarded for Correct Answers
  • 5 points awarded for Helpful Answers
  • 10,000+ points
  • 1,001-10,000 points
  • 501-1,000 points
  • 5-500 points