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

3d 如何在MEL中选定对象的拉伸节点内设置属性,3d,maya,mel,3d,Maya,Mel,我想将subCurveExtrMax属性设置为x和y之间的随机数,但我在选择属性时遇到问题: string $sel[] = `ls -sl`; string $obj; for ($obj in $sel) { float $ran = rand(0.972, 0.984); setAttr ($obj+".polyExtrudeFace.subCurveExtrMax") $ran; } polyExtrudeFace不是选定对象的属性。它将是一个连接到对象的节点 您必须

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

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

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

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

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

string $extrudeNode = "polyExtrudeFace1";
setAttr ($extrudeNode + ".subCurveExtrMax") $ran;
如果要动态查找挤出节点,可以在类型为“polyExtrudeFace”的选定对象上使用listConnections来获取连接的挤出节点列表

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

在您的情况下,类似的操作可能会起作用(修改代码):

这将在对象的所有挤出节点上应用rand。如果这不是您想要的,那么您可以应用您的逻辑,在最内部的for循环中,仅选择要应用rand的挤出节点


希望这有帮助。

您也可以在第一次调用挤出时提供随机挤出深度:

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