我想将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;
}
答案 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循环中。
希望这会有所帮助。