setKnotSelection メソッドを使用してノットの選択を設定すると、常に基本オブジェクト(スタックの一番下にある EditableSpline)に影響を与えることになります。このメソッドを使用して、特定の Edit_Spline モディファイヤのサブオブジェクトの頂点選択を直接設定することはできません。選択内容が既存のすべての Edit_Spline モディファイヤを通ってスタックまでフローするので、これらすべてのサブオブジェクトの選択を変更してしまうからです。
次のスクリプト例では、SplineShape の終端部で 1 つの頂点を選択し、リンクした X フォーム モディファイヤを使用してこれをオブジェクトにリンクする必要があります。次に、SplineShape のもう一方の終端にある頂点を、2 つ目のリンクした
X フォームを使用して別のオブジェクトにリンクします。この結果、どちらかのオブジェクトを移動すると、2 つのオブジェクト間のスプラインが伸縮します。この動きは「ロープ」に似ています。
両端の頂点選択を設定しようとすると、2 つ目の選択がスタック全体を通ってフローし、最初の選択を上書きしてしまうので失敗します。この結果、両方のリンクした X フォーム モディファイヤが同じ頂点に影響を与えてしまうことになります。
これを回避するには、2 つのことを実行する必要があります。まず、モディファイヤをお互いの最上部に追加するのではなく、上から下まで適用させ、次に、SplineSelect モディファイヤを「選択ブロッカー」として使用して、2 つ目のサブオブジェクト選択が最初の選択を上書きしないようにします。
スクリプト
|
resetMaxFile #noPrompt
theSphere1= sphere()
theSphere1.pos = [-100,0,0]
theSphere2= sphere()
theSphere2.pos = [100,0,0]
theShape = splineShape()
addnewSpline theShape
addKnot theShape 1 #corner #line [-100,0,0]
addKnot theShape 1 #corner #line [100,0,0]
updateShape theShape
max modify mode --[修正]パネルに切り替え
select theShape --スプラインを選択
es1 = edit_spline name:"First ES" --1 つ目の Edit_Spline を作成
addmodifier theShape es1 --スタックの一番上に追加
subobjectLevel = 1 --頂点レベル...
setKnotSelection theShape 1 #(1) --基本オブジェクト内の最初の頂点を選択
LX1 = Linked_XForm name:"First XForm" --リンクした XForm を追加
modPanel.addModToSelection LX1 --サブ選択に追加
LX1.Control = $Sphere01--コントロールを設定
sselect = splineselect name:"Blocker" --SplineSelect を追加してフローを中止
addmodifier theShape sselect before:2 --これを SplineSelect「ブロッカー」の前に追加
--注: モディファイヤは常に一番上から一番下までカウントされるので、
--最上部に 2 つのモディファイヤがあると、
--「before:2」を使用した場合、
es2 = edit_spline name:"Second ES" --2 つ目の Edit_Spline を作成
addmodifier theShape es2 before:3 --これを SlineSelect「ブロッカー」の前に追加
modPanel.setCurrentObject es2 --モディファイヤ スタックを設定
subobjectLevel = 1 --頂点 SO レベル
setKnotSelection theShape 1 #(2) --2 つ目の頂点を選択
--この時点で、選択は、オブジェクト レベルに設定された
--SplineSelect モディファイヤにヒットするまでフローし、
--選択がそのポイントを超えて渡されないようにします。これによって、
--一番上の Edit_Spline の頂点 1 の選択が保持され、
--一番下の選択が頂点 2 に設定されます。
LX2 = Linked_XForm name:"Second XForm" --リンクした X フォームを新規作成
modPanel.addModToSelection LX2 --現在の選択の一番上に設定
LX2.Control = $Sphere02 --2 番目のコントロールを設定
|