我正在尝试为 Maya (MEL/Python) 编写的对象属性更改工具遇到几个问题

问题描述

以下代码不断抛出以下错误

// 错误:第 42 行:setAttr:读取数据元素编号 1 时出错: x

这应该是获取每个选定的对象,只要它们都共享所需的属性($attr),此代码可以一次更改它们,而无需一一挖掘每个对象的属性。想要这个,所以我可以对许多相同的对象进行相同的更改。代码如下:

//creates empty variables

string $attr;
string $value;

//open dialog
string $result = `promptDialog
    -title "Mass Attribute Change"
    -message "Attribute Name:"
    -button "OK" -button "Cancel"
    -defaultButton "OK" -cancelButton "Cancel"
    -dismissstring "Cancel"`;

//if confirmed    
if ($result == "OK") {
    $attr = "." + `promptDialog -query -text`;
    
string $result = `promptDialog
    -title "Value Adjustment"
    -message "Enter Value"
    -button "OK" -button "Cancel"
    -defaultButton "OK"
    -dismissstring "Cancel"`;
        
if ($result == "OK") {
    $value = `promptDialog -query -text`;
    print ("I have " + $attr + " and " + $value);
}

//if cancelled
else {
    confirmDialog
    -message "Giverupper";
    print ($attr + "\n");
    print $value;
    exit();
    }
}

string $sel[] = `ls -sl`;
for ($obj in $sel)
{
    setAttr ($item + $attr) $value;
}

我期望这样做的是,当用户输入分别分配给 $attr 和 $value 的值时,它应该毫不费力地将它们插入并有效地编写一些效果

setAttr "pCube3.scaleX" 5;

进行此类调整时,Maya 脚本编辑器中返回的内容是什么。

我尝试将其分解为最简单的形式,预先定义 $attr 代表什么,并在最后手动插入 5,效果很好:

string $attr = ".scaleX";
string $value = 5;

string $array[] = `ls -sl`;
for ($item in $array)
{
    setAttr ($item + $attr) 5;
}

更进一步,从一开始就预先定义了两个变量,它会抛出错误

string $attr = ".scaleX";
string $value = 5;

string $array[] = `ls -sl`;
for ($item in $array)

{
    setAttr ($item + $attr) $value;
}

因此出于某种原因,我无法插入变量来表示用户的输入。最后可以直接输入值,但是不能预定义变量。

知道发生了什么吗?我已经考虑更换

string $value;

int $value

只是想看看它是否被它获得的输入类型混淆了,但这只会引发以下错误之一:

变量“$array”的重新声明会影响之前的声明 第 39 行。先前的值将被显式初始化程序覆盖。

将变量“$value”重新声明为不同类型无效。

完全不同的错误也让我完全困惑。

我完全被难住了。我想,因为我可以手动插入数字,而且由于代码只是从一个地方获取信息并在其他地方动态使用它的一种方式,所以它只需要 5 并在底部弹出它就可以了。

我确定我忽略了一些东西,或者它真的很简单,但非常感谢任何帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)