Если мы используем pick whip tool, для создания экспрешенов, то он часто привязывается к конкретному слою в конкретной композиции по его имени, то же самое и на счет самих параметров, к которым мы привязываемся.
Когда мы хотим продублировать такой слой, переместить элемент, к которому привязываемся в другое место или желаем привязать все параметры к другому объекту - у нас выскакивает куча ошибок, которые приходится решать.
Использовать разные методы по универсализации ссылок в экспрешенах:
Привязываясь к эффектам, нам нужно знать следующее. Многие эффекты для разных версий языка называются по разному. Например для слайдера:
effect("XYZ")("Slider") //English
effect("XYZ")("Schieberegler") //German
Для решения этого - есть универсальные коды эффектов:
effect("XYZ")(1) //Universal
Есть и другая форма записи универсального экспрешена, натыкаясь на которую раньше, я не совсем понимал, что это за крокозябры:
Источник информации: https://forums.adobe.com/thread/1851692
Для шейповых слоев и их эксрпешенов используется система переходов на разные группы параметров. Будет дописано позже...
thisProperty.propertyGroup(1).propertyIndex
propertyGroup(1) moves up one level from the propety the expression lives in, propertyGroup(2) moves up two levels, and so on. Hope that helps.
radius = 300;
angle = time * 200;
x = radius*Math.cos(degreesToRadians(angle));
y = radius*Math.sin(degreesToRadians(angle));
z = 0;
center = [400,300,0]; //or wherever you want it to be
add(center, [x,y,z]);
thisLayer.name.split("/")[0]
Position — Linking | Положение слоя, независимо от привязки
n="Name your layer";
linkPosition=thisComp.layer(n).toWorld(thisComp.layer(n).anchorPoint);
lp=linkPosition;
Getting World Absolute 2d Rotation — Linking | Получение абсолютного вращение слоя, с учетом всех родительских слоев
r = rotation;
L = thisLayer;
while (L.hasParent){
r += L.parent.rotation;
L = L.parent;
}
r
Usability — Project — Sort | Символы для проброса пунктов в конец:
ꞈ
Ξ
3d — Scale — Compensation from Camera | Scale компенсация в 3D для паралакса:
c = thisComp.layer("Camera 1");
point1 = position;
point2 = c.position;
d = length(point1, point2);
s = (d/c.zoom) * value[0];
[s, s, 100]
3d — Camera — Focus Distance — Layer | Linking camera's focus distance to layer
target = thisComp.layer("CAM INTEREST")
v1 = target.toWorld(target.anchorPoint) - toWorld([0,0,0]);
v2 = toWorldVec([0,0,1]);
dot(v1,v2)
Перевести текстовую строку в число:
n=parseInt(n);
Перевести число в текст:
n=n.toString();
Независимо от скейла и параметров привязки к другим объектам сохранить толщину строука вам поможет следующий экспрешн.
Закидываем в параметр строка шейпа Stroke Width:
L = thisLayer;
s = L.transform.scale;
while (L.hasParent){
sp = L.parent.transform.scale;
s = [s[0]*sp[0],s[1]*sp[1]]/100;
L = L.parent;
}
value*100/s[0];
Экспрешен для обратной привязки к нулям паса, по имени слоя этого паса
var origPath = thisProperty;
var origPoints = origPath.points();
var origInTang = origPath.inTangents();
var origOutTang = origPath.outTangents();
var getNullLayers = [];
var getNullLayersIn = [];
var getNullLayersOut = [];
for (var i = 0; i < nullLayerNames.length; i++){
try{
getNullLayers.push(thisComp.layer(nullLayerNames[i]));
getNullLayersIn.push(thisComp.layer(nullLayerNamesIn[i]));
getNullLayersOut.push(thisComp.layer(nullLayerNamesOut[i]));
} catch(err) {
getNullLayers.push(null);
}}