0

私が書いているいくつかの max スクリプトでイライラする問題に遭遇しました。誰かが私のコードが機能しない理由を知っていることを望んでいました。

同じスクリプトで他のジオメトリとアタッチを使用して成功しました:

fn base = (
     base_geo = convertToPoly(Plane length:10 width:10 pos:[0,0,5] isSelected:on lengthsegs:1 widthsegs:1)
     base_geo.pivot = [0,0,0]
     return base_geo
)

corner_geo = base()
plane1 = base()
--irrelevant rotation + transformation scripts
corner_geo.attach plane1 corner_geo

これはうまくいきます

ただし、後で同じことを試すと:

fn place_trim x y z trim_type = (
maxOps.cloneNodes trim_type cloneType:#copy newNodes:&cur_group
--convertToPoly(cur_group)
cur_group.pos = [x,y,z]

    --not sure how to properly access this name
--print "cur_group name = " + cur_group[1].name
return cur_group
)


fn walls trim_type = (
wall_geo = base()
rotate wall_geo (angleaxis -90 [1,0,0])
plane1 = base()
wall_geo.attach plane1 wall_geo

if trim_type == "inner" do (
    trim_type = final_inner_trim
)
if trim_type == "outer" do (
    trim_type = final_trim
)

if trim_type != undefined do (
    trim = place_trim 0 0 0 trim_type

wall_geo.attach トリム wall_geo

)

return wall_geo
)


final_trim = $trim_final
final_inner_trim = $inner_trim_final
walls("outer")

コードの太字のセクションに到達すると、次のエラーが表示されます。

私が間違っていることについての提案にとても感謝しています!

4

2 に答える 2

2

すでにcgtalkで返信していますが、ここのコメントは少し別のトピックに変わります。このような状況で、名前で $Plane000 の新しいコピーを取得するために考えられる唯一の方法 (他のプレフィックスを指定していないため、このデフォルトのプレフィックスを想定) は、最高の $Plane* ノードの n を検索することです。 number - 絶対にしないでください。

この特定のケースでは、ノードを直接返す簡単な解決策があることは問題ではありません。場合によっては (detach コマンドなど)、そうしません。繰り返しますが、デタッチされたオブジェクトはデフォルトの Object プレフィックスを取得しますが、実際にはそれを取得する最も簡単な方法は

obj = objects[objects.count]

新しく作成されたオブジェクトの束にも同じことが当てはまります。前にオブジェクトの数を取得してから、ほとんどまたはまったく制御できないプロセス (サードパーティのプラグインを考えてください) を通じてシーン内のいくつかの新しいノードを取得するときに、ノードを最初から収集するだけです。前のカウントから 1 つ上げればそこにたどり着きます。

于 2013-09-30T20:14:09.117 に答える
1

そんなに複雑かどうかはわかりません。簡単に言うと、place_trim 関数は配列を返します。サイズが 1 の配列であっても、Max は暗黙的にそれをノード ポインタに変換しません。アタッチするには、アイテムを配列から取り出す必要があります。

あなたがしたいことは

some_trom in trim do ( wall_geo.attach some_trim wall_geo )

パフォーマンスが問題になる場合は、この操作の実行中に ref msgs / undo を無効にすることができます。

于 2013-10-01T15:45:30.697 に答える