如何在MEL中选定对象的拉伸节点中设置属性

时间:2014-11-03 11:16:36

标签: 3d maya mel

我想将subCurveExtrMax属性设置为xy之间的随机数,但我在选择属性时遇到问题:

string $sel[] = `ls -sl`;
string $obj;

for ($obj in $sel) {
    float $ran = rand(0.972, 0.984);
    setAttr ($obj+".polyExtrudeFace.subCurveExtrMax") $ran;
}

2 个答案:

答案 0 :(得分:1)

第一次调用拉伸时,您还可以提供随机拉伸深度:

 polyExtrudeFacet -lt $ranx $rany $ranz; // to specify all 3 offsets
 polyExtrudeFacet -ltz $ranz; // to specify just the extrusion depth

答案 1 :(得分:0)

polyExtrudeFace不是所选对象的属性。它将是一个连接到对象的节点。

您必须将其视为节点并使用setAttr设置其属性。我们假设节点的名称是polyExtrudeFace1。你会这样做:

string $extrudeNode = "polyExtrudeFace1";
setAttr ($extrudeNode + ".subCurveExtrMax") $ran;

如果要动态查找拉伸节点,可以在所选对象上使用listConnections,类型为" polyExtrudeFace"获取已连接的拉伸节点列表。

另请注意,拉伸节点连接到形状节点而不是变换节点。所以我们必须确保在形状节点上执行listConnections。

在你的情况下,这样的事情可能会起作用(修改你的代码):

string $selObj[] = `ls -sl`;

for ($obj in $selObj) {
    string $selShape[] = `listRelatives -shapes -path`;
    string $conn[] = `listConnections -type "polyExtrudeFace" -source 0 -destination 1 $selShape[0]`;

    for ($extrudeNode in $conn) {
        setAttr ($extrudeNode + ".subCurveExtrMax") $ran;
    }
}

这将在对象的所有squeedeNodes上应用rand。如果这不是你想要的,那么你可以应用你的逻辑来选择你想要应用rand的拉伸节点,在最里面的for循环中。

希望这会有所帮助。