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

问题描述 投票:1回答:2

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

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

for ($obj in $sel) {
    float $ran = rand(0.972, 0.984);
    setAttr ($obj+".polyExtrudeFace.subCurveExtrMax") $ran;
}
3d maya mel
2个回答
1
投票

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

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

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;
    }
}

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

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.