我如何将 1-120 帧之间的 transformY 的值放入一个表达式数组中?

How would I put the values of transformY between frames 1-120 into an array for an expression?

我有 pCube1,其中 transformY 从帧 1-120 开始动画。我创建了一个属性 lowTy 和 highTy,我想显示 transformY 动画的最低值和最高值。

这是我目前的情况:

最低值:

float $array = {THE MISSING PIECE};
$sortedarray = sort($array);
lowTy = $sortedarray[0]

最高值:

float $array = {THE MISSING PIECE};
int $arraysize = size($array);
$sortedarray = sort($array);
highTy = $sortedarray[$arraysize-1]

缺少的部分是能够将第 1-120 帧的 transformY 值放入一个数组中。请注意,我不仅需要关键帧值,还需要所有 120 帧的关键帧值或非关键帧值。 pCube1.transformY 的最低值来自切线控制柄。

附加问题:如何 return 给定值在数组中的位置?

示例:

$array = {55, 23, 45, 9, 3, 12, 23)

如何return9的位置? (应该是 3) 如果我尝试 return 23 的位置,我将如何选择第一个(位置 1)或第二个(位置 6)?

在我的 pCube1 场景的上下文中,我想快速找到最高值和最低值所在的帧。

编辑:添加了一张照片以进一步说明。

Graph editor screenshot

如果我要修改 translateY,则应遵循指示 lowTy 和 highTy 的行。

您可以使用getAttr命令查询特定时间的属性:

float $array[200];
for(int $i=0; $i<200; $i++)
{
   $array[$i] = `getAttr "pCube1.ty" -t $i`;
} 

对于这些类型的工作,我建议使用 python,您可以这样做:

import pymel.core as pm

node = pm.PyNode("pCube1")
v = []
for i in range(200):
  v.append(node.ty.get(t=i))
v.sort()
minValue = v[0]
maxValue = v[-1]

对于您的其他问题,您可以尝试 floatArrayFind()intArrayFind() 命令。

是的!我找到了一种方法来制定一个表达式来执行此操作,使用循环和 getAttr 按时间顺序用属性的所有值填充一个数组,然后使用排序找到最低值:

float $arr[];
int $i;
float $data = 0;
int $maxLoop = `playbackOptions -query -aet`;
for($i=1;$i<$maxLoop;$i++)
    {
        $data = `getAttr -t $i pCube1.translateY`;
        $arr[$i] = $data;
    }
$arrsort = sort($arr);
pCube1.test7 = $arrsort[0]