splineShape - superclass: Shape; super-superclass:Node - classID: #(10, 0)
編集可能メッシュがジオメトリ オブジェクトの編集可能バージョンであるように、SplineShape はシェイプ オブジェクト全般の編集可能バージョンです。SplineShape は、スプライン編集モディファイヤを適用してシェイプの基本オブジェクトでモディファイヤ スタックを集約したときに、シェイプが変換されてできるオブジェクトです。MAXScript では、個々のカーブ(スプライン)とコントロール ポイント(ノット)を追加しながら SplineShapes をゼロから作成したり、既存のシェイプを SplineShape に変換して、以下に示すメソッドを使って作成したりすることができます。
コンストラクタ:
splineShape...
bezierShape...
convertToSplineShape <shape>
スプライン シェイプの作成および修正の実際の操作例については、以下も参照してください。
このトピックにリストされているメソッドを使用して既存のシェイプを操作するためには、このシェイプを SplineShapes(編集可能スプライン)に変換する必要があります。変換するには、convertToSplineShape()
関数を使用してください。
updateShape()
関数のみが、3ds Max ビューポートの内部キャッシュとイメージを更新できます。これは、更新操作は計算面で負担が大きく、関数呼び出しのたびに更新を実行するのは好ましくないからです。ただし、一連の変更を行った後で、3ds Max でメッシュを操作する前や MAXScript で他の関数を使ってメッシュを操作する前に、必ず updateShape()
関数を呼び出さなければなりません。
ベジェ コントロール ポイントのイン ベクトルとアウト ベクトルは、本当のベクトルではなく、ベクトル ハンドル座標として与えられます。
座標は、MAXScript の作業座標系で与えられます。オブジェクトのローカル座標で常に作用する SDK スプライン関数に慣れている場合は、このことに注意することが重要です。
[修正] (Modify)パネルで選択され、現在開かれているオブジェクトに対して updateShape()
関数を呼び出すと、3ds Max のクラッシュを回避するため現在の選択が解除されます。現時点では、[修正] (Modify)パネルで開いているオブジェクトに対するスクリプトの変更はサポートされていません。
スプライン オブジェクトを作成または修正するとき、スプラインでまだ updateShape()
を実行していない場合、3ds Max ウィンドウを最小化してから最大化すると 3ds Max がクラッシュすることがあります。これは、不完全なスプラインが作成され、内部 3ds Max のスプライン構造が不安定な状態に置かれるためです。
プロパティ
プロパティ:
<SplineShape>.render_renderable BooleanClass default: false -- boolean; renderable
[レンダラーを有効](Enable in Renderer)チェックボックスをオンまたはオフに切り替えます。
3ds Max 8 以降 で使用可能です。
<SplineShape>.render_displayRenderMesh BooleanClass default: false -- boolean; displayRenderMesh
[ビューポートを有効](Enable In Viewport)チェック ボックスのオンとオフを切り替えます。true に設定した場合、メッシュはビューポートに表示されます。
3ds Max 8 以降 で使用可能です。
<SplineShape>.render_useViewportSettings BooleanClass default: false -- boolean; useViewportSettings
[ビューポート設定を使用](Use Viewport Settings)チェックボックスをオンまたはオフに切り替えます。
true に設定した場合、ビューポートに表示されたメッシュはビューポート設定を使用します。
false の場合、ビューポート メッシュにはレンダリング設定が使用されます。
3ds Max 8 以降 で使用可能です。
<SplineShape>.render_mapcoords BooleanClass default: false -- boolean; mapcoords
[マッピング座標の生成](mapping coordinates generation)をオンまたはオフに切り替えます。
U 座標は、スプラインの幅に合わせて一度ラップされます。 V 座標は、スプラインの長さに合わせて一度マッピングされます。
3ds Max 8 以降 で使用可能です。
<SplineShape>.realWorldMapSize BooleanClass default: false -- boolean
[リアル ワールド マップ サイズ](real-world map size)オプションをオンまたはオフに切り替えます。
3ds Max 8 以降 で使用可能です。
<SplineShape>.render_displayRenderSettings BooleanClass default: true -- boolean; displayRenderSettings
[ビューポート/レンダリング]ラジオ ボタンの状態を切り替えます。
true に設定した場合、レンダリング設定がロールアウトに表示されます。
false の場合、代わりにビューポート設定が表示されます。
3ds Max 8 以降 で使用可能です。
<SplineShape>.render_rectangular BooleanClass default: false -- boolean
true に設定した場合、レンダラーで矩形断面モードを使用できるようになります。
false の場合(既定値)、放射状断面モードが有効になります。
レンダリング モードにおける UI の[放射状] (Radial)と[矩形] (Rectangular)ラジオ ボタンに対応しています。
3ds Max 8 以降 で使用可能です。
<SplineShape>.render_viewport_rectangular BooleanClass default: false -- boolean
true に設定した場合、ビューポートで矩形断面モードを使用できるようになります。
false の場合(既定値)、放射状断面モードが有効になります。
ビューポート モードにおける UI の[放射状] (Radial)と[矩形] (Rectangular)ラジオ ボタンに対応しています。
3ds Max 8 以降 で使用可能です。
プロパティ:
<SplineShape>.render_thickness Float default: 1.0 -- animatable; thickness
レンダリング可能な放射状スプライン メッシュの直径を取得/設定します。
3ds Max 8 以降 で使用可能です。
<SplineShape>.render_sides Integer default: 12 -- animatable; sides
レンダラー内のスプライン メッシュの側面の数を取得/設定します。
たとえば、値が 4 の場合、断面は四角になります。
3ds Max 8 以降 で使用可能です。
<SplineShape>.render_angle Float default: 0.0 -- animatable; angle
レンダラー内の放射状断面の回転位置を取得/設定します。
3ds Max 8 以降 で使用可能です。
プロパティ:
<SplineShape>.render_length Float default: 6.0 -- animatable
レンダリング可能な矩形スプライン メッシュの長さを取得/設定します。
3ds Max 8 以降 で使用可能です。
<SplineShape>.render_width Float default: 2.0 -- animatable
レンダリング可能な矩形スプライン メッシュの幅を取得/設定します。
3ds Max 8 以降 で使用可能です。
<SplineShape>.render_angle2 Float default: 0.0 -- animatable
レンダラー内の放射状断面の回転位置を取得/設定します。
3ds Max 8 以降 で使用可能です。
<SplineShape>.render_aspect_locked BooleanClass default: false -- boolean
[アスペクト] (Aspect)のロック チェックボタンの状態を制御します。
true に設定した場合、幅を変更すると、ロックが掛けられた時点でのアスペクトを維持しながら高さが変更されます。 その逆に高さを変更しても同じです。
3ds Max 8 以降 で使用可能です。
プロパティ:
<SplineShape>.render_viewport_thickness Float default: 1.0 -- float; viewport_thickness
ビューポート内のレンダリング可能な放射状スプライン メッシュの直径を取得/設定します。
3ds Max 8 以降 で使用可能です。
<SplineShape>.render_viewport_sides Integer default: 12 -- integer; viewport_sides
ビューポート内の放射状スプライン メッシュの側面の数を取得/設定します。
たとえば、値が 4 の場合、断面は四角になります。
3ds Max 8 以降 で使用可能です。
<SplineShape>.render_viewport_angle Float default: 0.0 -- float; viewport_angle
ビューポート内の断面の回転位置を取得/設定します。
3ds Max 8 以降 で使用可能です。
プロパティ:
<SplineShape>.render_viewport_length Float default: 6.0 -- float
ビューポート内の矩形スプライン メッシュの長さを取得/設定します。
3ds Max 8 以降 で使用可能です。
<SplineShape>.render_viewport_width Float default: 2.0 -- float
ビューポート内の矩形スプライン メッシュの幅を取得/設定します。
3ds Max 8 以降 で使用可能です。
<SplineShape>.render_viewport_angle2 Float default: 0.0 -- float
ビューポート内の矩形断面の回転位置を取得/設定します。
3ds Max 8 以降 で使用可能です。
<SplineShape>.render_viewport_aspect_locked BooleanClass default: false -- boolean
[アスペクト] (Aspect)のロック チェックボタンの状態を制御します。
true に設定した場合、幅を変更すると、ロックが掛けられた時点でのアスペクトを維持しながら高さが変更されます。 その逆に高さを変更しても同じです。
3ds Max 8 以降 で使用可能です。
プロパティ:
<SplineShape>.render_auto_smooth BooleanClass default: true -- boolean
[自動スムーズ](Auto Smooth)チェックボックスの状態をコントロールします。
true に設定した場合、自動スムーズが有効になります。
3ds Max 8 以降 で使用可能です。
<SplineShape>.render_threshold Float default: 40.0 -- animatable;
[自動スムーズ](Auto Smooth)の[しきい値] (Threshold)の値を取得/設定します。3ds Max 8 以降 で使用可能です。
最高 3*N までの頂点および接線座標をプロパティとして使用できます。N は、スプライン シェイプ内の頂点の数を示します。
コントローラが頂点に割り当てられると、頂点とその接線はプロパティとして使用できます。
コントローラは「animateVertex()
頂点およびコントロール ポイントのアニメーションのスクリプト」で説明されている メソッドを使用して頂点に割り当てられます。
たとえば、円オブジェクトが SplineShape に集約され、その頂点のいくつかがアニメートされている場合、頂点と接線のプロパティは次のようになります。
$Circle01.Spline_1___InVec_1 Point3 value: [-75,33,0] -- animatable
$Circle01.Spline_1___Vertex_1 Point3 value: [-75,33,0] -- animatable
$Circle01.Spline_1___OutVec_1 Point3 value: [-50,0,0] -- animatable
$Circle01.Spline_1___InVec_2 Point3 value: [-20,-33,0] -- animatable
$Circle01.Spline_1___Vertex_2 Point3 value: [7,-66,0] -- animatable
$Circle01.Spline_1___OutVec_2 Point3 value: [32,-95,0] -- animatable
プロパティ:
<splineshape>.steps Integer default: 6 -- integer
補間ロールアウトの補間手順を制御します。
<splineshape>.optimize Boolean default: true -- boolean
補間ロールアウトの[最適化] (Optimize)チェックボックスの状態を制御します。
<splineshape>.adaptive Boolean default: false -- boolean
補間ロールアウトの[アダプティブ] (Adaptive)チェックボックスの状態を制御します。
MAXScript に公開されている、関連性のあるプロパティやメソッドはありません。
MAXScript に公開されている、関連性のあるプロパティやメソッドはありません。
メソッド:
splineOps.startCreateLine <editable_spline_or_line_node_or_modifier>
[ラインを作成](Create Line)コマンド モードに入ります。これは、すべてのサブオブジェクト レベルで、サブオブジェクト モード以外のときに有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.startBreak <editable_spline_or_line_node_or_modifier>
[ブレーク] (Break)コマンド モードに入ります。これは、頂点およびセグメント サブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.startAttach <editable_spline_or_line_node_or_modifier>
[アタッチ] (Attach)コマンド モードに入ります。これは、すべてのサブオブジェクト レベルで、サブオブジェクト モード以外のときに有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.attachMultiple <editable_spline_or_line_node_or_modifier>
ユーザが複数のシェイプを選択して添付できる[複数アタッチ](Attach Multiple)ダイアログ ボックスを表示します。これは、すべてのサブオブジェクト レベルで、サブオブジェクト モード以外のときに有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
メソッド:
splineOps.startRefine <editable_spline_or_line_node_or_modifier>
[リファイン] (Refine)コマンド モードに入ります。これは、頂点およびセグメント サブオブジェクト レベルで有効です。これは、頂点サブオブジェクト レベルおよびセグメント サブオブジェクト レベルで有効です。このメソッドは[接続] (Connect)チェックボックスをオフにしないので、事実上 startRefineConnect()
メソッドと同じです。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.startRefineConnect <editable_spline_or_line_node_or_modifier>
[リファイン] (Refine)コマンド モードに入ります。これは、頂点およびセグメント サブオブジェクト レベルで有効です。これは、頂点サブオブジェクト レベルおよびセグメント サブオブジェクト レベルで有効です。このメソッドは[接続] (Connect)チェックボックスをオンにしないので、事実上 startRefine()
メソッドと同じです。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
メソッド:
splineOps.weld <editable_spline_or_line_node_or_modifier>
選択した頂点を連結します。これは、頂点サブオブジェクト レベルで有効です。
「シェイプ メソッド - 連結」にある関連メソッドも参照してください。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.startConnect <editable_spline_or_line_node_or_modifier>
[接続] (Connect)コマンド モードに入ります。これは、頂点サブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.startInsert <editable_spline_or_line_node_or_modifier>
[挿入] (Insert)コマンド モードに入ります。これは、すべてのサブオブジェクト レベルで、サブオブジェクト モード以外のときに有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.makeFirst <editable_spline_or_line_node_or_modifier>
選択した頂点をスプラインの最初の頂点にします。これは、頂点サブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.fuse <editable_spline_or_line_node_or_modifier>
選択した頂点を融合します。これは、頂点サブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.reverse <editable_spline_or_line_node_or_modifier>
選択したスプラインの頂点の順序を逆に並べ替えます。これは、スプライン サブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.cycle <editable_spline_or_line_node_or_modifier>
スプラインの頂点を循環し、各頂点を選択します。このメソッドが呼び出される前に少なくとも 1 つの頂点が選択されている必要があります。
頂点を選択せずに呼び出した場合は、頂点は選択されません。
複数の頂点を選択した状態でこのメソッドを呼び出すと、最初のシェイプの最初の頂点が選択されます。
これは、頂点サブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
メソッド:
splineOps.startCrossInsert <editable_spline_or_line_node_or_modifier>
[交差挿入] (CrossInsert)コマンド モードに入ります。これは、頂点サブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.startFillet <editable_spline_or_line_node_or_modifier>
[フィレット] (Fillet)コマンド モードに入ります。これは、頂点サブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.startChamfer <editable_spline_or_line_node_or_modifier>
[面取り] (Chamfer)コマンド モードに入ります。これは、頂点サブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.startOutline <editable_spline_or_line_node_or_modifier>
[アウトライン] (Outline)コマンド モードに入ります。これは、スプライン サブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
メソッド:
splineOps.startUnion <editable_spline_or_line_node_or_modifier>
[ブール演算ユニオン](Boolean Union)コマンド モードに入ります。これは、スプライン サブオブジェクト レベルで有効です。
このコマンド モードに入るには、閉じたスプラインが 1 つだけ選択されていなければなりません。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.startSubtract <editable_spline_or_line_node_or_modifier>
[ブール演算の差](Boolean Subtract)コマンド モードに入ります。これは、スプライン サブオブジェクト レベルで有効です。
このコマンド モードに入るには、閉じたスプラインが 1 つだけ選択されていなければなりません。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.intersect <editable_spline_or_line_node_or_modifier>
[ブール演算の公差](Boolean Intersect)コマンド モードに入ります。これは、スプライン サブオブジェクト レベルで有効です。
このコマンド モードに入るには、閉じたスプラインが 1 つだけ選択されていなければなりません。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
メソッド:
splineOps.mirrorHoriz <editable_spline_or_line_node_or_modifier>
選択したスプラインを水平にミラーします。これは、スプライン サブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.mirrorVert <editable_spline_or_line_node_or_modifier>
選択したスプラインを垂直にミラーします。これは、スプライン サブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.mirrorBoth <editable_spline_or_line_node_or_modifier>
選択したスプラインを水平および垂直にミラーします。これは、スプライン サブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
メソッド:
splineOps.startTrim <editable_spline_or_line_node_or_modifier>
[トリム] (Trim)コマンド モードに入ります。これは、スプライン サブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.startExtend <editable_spline_or_line_node_or_modifier>
[延長] (Extend)コマンド モードに入ります。これは、スプライン サブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
メソッド:
splineOps.startCopyTangent <editable_spline_or_line_node_or_modifier>
[接線] (Tangent)の[コピー] (Copy)コマンド モードに入ります。これは、頂点サブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.startPasteTangent <editable_spline_or_line_node_or_modifier>
[接線を貼り付け](Paste Tangent)コマンド モードに入ります。これは、頂点サブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
メソッド:
splineOps.hide <editable_spline_or_line_node_or_modifier>
選択したサブオブジェクトを非表示にします。これは、すべてのサブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.unhideAll <editable_spline_or_line_node_or_modifier>
非表示のサブオブジェクトをすべて表示します。これは、すべてのサブオブジェクト レベルで、サブオブジェクト モード以外のときに有効です。
「シェイプ メソッド - 非表示と再表示」にある関連メソッドも参照してください。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.startBind <editable_spline_or_line_node_or_modifier>
[バインド] (Bind)コマンド モードに入ります。これは、頂点サブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.unbind <editable_spline_or_line_node_or_modifier>
選択した頂点のバインドを解除します。これは、頂点サブオブジェクト レベルで有効です。
「シェイプ メソッド - バインドとバインド解除」にある関連メソッドも参照してください。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.delete <editable_spline_or_line_node_or_modifier>
選択したサブオブジェクトを削除します。これは、すべてのサブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.close <editable_spline_or_line_node_or_modifier>
選択したスプラインを閉じます。これは、スプライン サブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.divide <editable_spline_or_line_node_or_modifier>
選択したセグメントを分割します。これは、セグメント サブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.detach <editable_spline_or_line_node_or_modifier>
ユーザがオブジェクト名を指定できる[デタッチ] (Detach)ダイアログ ボックスを表示します。これは、すべてのサブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
splineOps.explode <editable_spline_or_line_node_or_modifier>
選択したスプライン内の各セグメントを個別のスプラインまたはオブジェクトに分割します。これは、スプライン サブオブジェクト レベルで有効です。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
メソッド:
splineOps.selectByID <editable_spline_or_line_node_or_modifier>
[ID を選択](Select ID)ボタンを押します。
「シェイプ メソッド - マテリアル ID」にある関連メソッドも参照してください。
UI に関連するメソッドの完全なリストについては、「編集可能スプラインの修正パネル コマンド モードおよび操作」を参照してください。
メソッド
updateShape <shape>
このキットの他の関数による変更のすべてを反映させるため、シェイプの内部キャッシュとビューポート表示を更新します。この更新は、3ds Max やその他のコードが修正されたシェイプ オブジェクトを操作する前に実行しなければなりません。
updateShape()
関数は、スクリプト化された変更をすべて、存在するモディファイヤ スタックの最下位への基本オブジェクトのスプライン シェイプに加えます。
スタック内の既存のモディファイヤがトポロジ変更のような修正によって無効になる可能性がありますが、それを警告する機能はないので注意してください。
これは、オブジェクトの無効に関する警告を無視して、[修正] (Modify)パネル内で基本オブジェクトを開いて修正することと同じです。
resetShape <shape>
シェイプ内のすべてのスプライン曲線をクリアします。
numSplines <shape>
シェイプ内のスプライン曲線の数を整数で返します。
<shape>.numSplines
と同じです。
setFirstSpline <shape> <spline_index_integer>
シェイプ内のスプラインの順序を変えて、番号で指定されたスプラインをシェイプ内の最初のスプラインにします。
この関数は、ロフタにおける複数のスプラインを含むシェイプや、サーフェス ツールのようにスプラインの順序が重要となるその他のモディファイヤを操作する場合に効果的です。
addAndWeld <to_shape> <from_shape> <weldthreshold_float>
スプライン シェイプ内のスプラインを指定したベジェ シェイプに追加します。
新しいスプラインと既存のスプラインが指定の距離内に存在する場合は、連結しきい値によってこれらの終点が結合されます。
bindKnot <shape> <isEnd_boolean> <splineId_integer> <segIndex_integer> <splineSegId_integer>
スプラインの最初のノットまたは最後のノットを指定したセグメントの中点にバインドします。
バインドはコンストレイントとして機能し、スプラインの最初のノットまたは最後のノットがセグメントの中点に来るよう強制的に配置されます。
<isEnd_boolean>
を true
に設定すると、スプラインの最後のノットがバインドされます。それ以外の場合は、最初のノットがバインドされます。
<splineId_integer>
は、バインドする最初のノットまたは最後のノットが属するスプラインのインデックスを指定します。<segIndex_integer>
は、バインドされるセグメントのインデックスを指定します。<splineSegId_integer>
は、セグメントへのバインドが属するスプラインのインデックスを指定します。
unBindKnot <shape> <spline_index_integer> <isEnd_boolean>
指定されたスプラインの指定された最初のノットまたは最後のノットのバインドを解除します。
updateBindList <shape>
バインド リストを更新するためにトポロジを変更するときに呼び出されます。たとえば、バインドされたスプラインからノットが削除されたり、スプラインにバインドされたりした場合です。
hideselectedsplines <shape>
シェイプ内で指定したスプラインを非表示にします。
hideselectedsegments <shape>
シェイプ内で指定したセグメントを非表示にします。
hideselectedverts <shape>
シェイプ内で指定したノットに添付されるセグメントを非表示にします。
unhidesegments <shape>
シェイプ内のすべてのセグメントを再表示します。
materialID <shape> <spline_index_integer> <segment_index_integer>
指定されたシェイプ オブジェクトのセグメントに対するマテリアル ID を返します。
animateVertex <shape> <vertex_spec>
<vertex_spec>
が次のいずれかである splineshape の指定された頂点と接線にコントローラを適用します。
<integer_index>
<integer_index_array>
#all
コントローラを頂点と接線に割り当てると、頂点と接線はドライバ サブアニメーションに追加され、トラック ビューではアニメート可能として表示されます。このため、これらの頂点と接線をさらにスクリプトで記述できるようになります。
例
animateVertex $Circle01 #all
アニメートされた頂点は、インデックス番号で指定されるか、またはすべての頂点をアニメートするキーワード #all で指定されます。
splineshape の頂点と接線へのアクセスについては、「クラスとオブジェクトの調査関数」 と「頂点およびコントロール ポイントのアニメーションのスクリプト」を参照してください。頂点および接線ハンドラに割り当てられたコントローラ値はオブジェクト スペース内にあります。ワールド スペースからオブジェクト スペースへの変換については、「ノード変換プロパティの使い方」を参照してください。
スプライン シェイプの作成および修正の例については、以下も参照してください。
addNewSpline <shape>
新しいスプライン カーブをスプライン シェイプに追加し、そのスプライン カーブのスプライン インデックスを表す整数を返します。
スプライン カーブは、1 で始まるインデックス番号で指定されます。
addNewSpline()
関数は、シェイプ内のカーブのリストの最後に新しいスプライン カーブを追加します。
getSplineSelection <shape>
シェイプ内で選択したスプラインのインデックスを整数の配列で返します。
setSplineSelection <shape> <spline_index_array> [keep:<boolean> ]
指定されたシェイプ内の <spline_index_array>
によって指定されたスプラインを選択します。
<spline_index_array>
は、スプラインのインデックスを指定する整数の配列です。
keep:true
が指定されている場合を除いて、既に選択されたスプラインは選択解除されます。
deleteSpline <shape> <spline_index_integer>
インデックスで指定されたスプライン曲線をシェイプから削除します。
削除の結果を反映させるため、残りのカーブの番号は更新されます。
numSegments <shape> <spline_index_integer>
インデックスで指定されたスプライン内のライン セグメントの数を返します。
これは、閉じたスプラインのノットの数と同じで、開いたスプラインのスプライン数から 1 を引いた値と同じです。
numKnots <shape> [ <spline_index_integer> ]
インデックスで指定されたスプライン内のノット(頂点またはコントロール ポイント)の数を整数で返します。
スプラインのインデックスが指定されていない場合は、シェイプ全体のノットの数を返します。
isClosed <shape> <spline_index_integer>
インデックス付きのスプラインが閉じている場合は true を、開いている場合は false を返します。
close <shape> <spline_index_integer>
インデックスで指定されたスプラインを閉じます。
open <shape> <spline_index_integer>
インデックスで指定されたスプラインの最後のノットと最初のノットの間を開きます。
reverse <shape> <spline_index_integer>
インデックスで指定されたスプラインでノットの順番を逆にします。
setFirstKnot <shape> <spline_index_integer> <knot_index_integer>
インデックスで指定されたスプラインのノットの順序を変え、指定されたノットをスプライン内の最初のノットにします。
weldSpline <splineShape node> <tolerance>
指定された splineShape の中で、指定された許容度内にある選択されているノットを結合します。
3ds Max 2008 以降 で使用可能です。
従来、Avguard 機能拡張として提供されていた機能です。
例:
( local sp = splineShape() addnewSpline sp addKnot sp 1 #corner #line [20,10,0] addKnot sp 1 #corner #line [-20,11,0] addKnot sp 1 #corner #line [-20,-11,0] addKnot sp 1 #corner #line [20,-10,0] close sp 1 updateShape sp select sp subobjectlevel = 1 setKnotSelection sp 1 #(1,4) keep:false -- Select the right most knots weldSpline sp 21.0 local knotCount = numknots sp if (knotCount != 3) do throw ("Spline should have 3 knots, found "+ (knotCount as string)) )
getSegLengths <splineShape> <spline_index> [cum:<boolean>] \
[byVertex:<boolean>] [numArcSteps:<integer>]
スプラインの小数と長さ、およびスプラインの全長を使って、セグメント長または頂点距離の配列を返します。
倍精度計算は非常に正確です。
cum:true
の場合の結果は累積であり、それ以外の場合は相対です。
byVertex:true
の場合の結果は頂点ごとで、それ以外の場合はセグメントごとです。
既定: cum:false
byVertex:false
numArcSteps:100
subdivideSegment <splineShape> <spline_index> <seg_index> <divisions>
セグメントを、指定した分割数に分割します。
倍精度計算は非常に正確です。
interpCurve3D <splineShape> <spline_index> <param_float> [pathParam:<boolean>]
インデックスが指定されたカーブ上の <point3>
座標を返します。
pathParam:false
の場合、param_float
はスプライン長の小数部で、それ以外の場合はセグメント ベース(パス)の小数部です。
既定値は pathParam:false
です。
tangentCurve3D <splineShape> <spline_index> <param_float> [pathParam:<boolean>]
インデックスが指定されたカーブ上の <point3>
接線を返します。
pathParam:false
の場合、param_float
はスプライン長の小数部で、それ以外の場合はセグメント ベース(パス)の小数部です。
既定値は pathParam:false
です。
findPathSegAndParam <shape> <curve_num> <param>
指定された頂点補間スプライン パラメータのセグメントおよびセグメントの一部が含まれている point2 値を返します。
1 つ目および 2 つ目の引数は、シェイプおよび補完するシェイプ内のスプラインを指定し、3 つ目の引数は補間するパラメータです。
たとえば、10 セグメントのスプラインに 0.5 というパラメータを渡すと、必ず[6,0.0](または 0 に非常に近い値)または[5,1.0]のいずれかを含んだ point2 値が返されます。これは、頂点補間を使用している 10 セグメント スプラインの中央は、必ず 5 番目のセグメントと 6 番目のセグメントとの間にある頂点だからです。
補間方法の詳細は、以下の注を参照してください。
3ds Max 2008 以降 で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。
findLengthSegAndParam <shape> <curve_num> <param>
指定された長さ補間スプライン パラメータのセグメントおよびセグメントの一部が含まれている point2 値を返します。
1 つ目および 2 つ目の引数は、シェイプおよび補完するシェイプ内のスプラインを指定し、3 つ目の引数は補間するパラメータです。
findPathSegAndParam()
とは対象的に、このメソッドはセグメントの実際の長さを考慮し、全体の長さを 0.0 から 1.0 までの間で正規化してから長さに沿って補間します。10 セグメントのスプラインに対してパラメータ 0.5 を指定すると、スプラインの長さの厳密な中央にあるセグメント内にあるセグメントとパラメータが常に返されます。
以下の注を参照してください。
3ds Max 2008 以降 で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。
頂点補間と長さ補間:
スプラインに沿った位置を補完するための方法には、頂点補間と長さ補間の 2 つがあります。
頂点補間(パス補間)を使用する場合は、スプラインは、2 つの頂点間の各セグメントが 0.0 から 1.0 までの領域に正規化されている一連のセグメントとしてとらえられます。セグメントの 2 つの頂点間の距離は補間では無視されます。つまり、セグメントの長さが異なる場合は、スプラインに沿って直線的に補間すると、速度のばらつきが発生します。
[一定速度](Constant Velocity)をオフにして[パス コンストレイント](Path Constraint)を使用すると、2 つの頂点間の長いセグメントをオブジェクトが高速で移動することから、これを視覚的に確認することができます(下のイメージを参照)。
長さ補間を使用する場合はスプラインの長さ全体が正規化され、0.5 というパラメータを使用すると、セグメントの長さにかかわらず、スプラインの厳密な中間点になります。 0.0 から 1.0 までの間で直線的に変化するパラメータを使用してスプラインに沿って補間された点のの速度は、頂点の配置が不規則であっても、スプライン全体を通して一定です。
これは、[パス コンストレイント](Path Constraint)で[一定速度](Constant Velocity)チェックボックスをオンにして長さ補間を有効にすると確認できます。
このイメージの一番上のオブジェクトは、さまざまなセグメント長と 10 個のセグメントを使用した SplineShape です。
中央のオブジェクトは同じシェイプのコピーで、[ポイント ヘルパー](Point Helper)によってパスとして使用されたものです。[パス コンストレイント](Path Constraint)の[一定速度](Constant Velocity)チェックボックスはオフであるため、頂点補間が使用されています。100 フレームの間、シェイプは 10 個のセグメントに分割され、各セグメントに 10 個のサンプルが配置されるため、セグメント長に応じて速度が変化します。
下のオブジェクトは同じシェイプのコピーで、別の[ポイント ヘルパー](Point Helper)によってパスとして使用されていますが、[一定速度](Constant Velocity)がオンであるために長さ補間が使用されています。このサンプルには、セグメントを定義している頂点間の距離を無視して、シェイプの全長方向に均等な間隔があることがはっきりと分かります。
タイム スライダはフレーム 50 に設定されています。下部の長さ補間では、ポイント ヘルパーがパス シェイプの厳密な中央に配置されているのに対し、頂点補間では、ポイント ヘルパーが 5 番目のセグメントと 6 番目 のセグメントとの間の頂点上に配置されています。
例:
( local sp = splineShape() addnewSpline sp for i = 0 to 10 do ( addknot sp 1 #smooth #curve [i*10, i*i, i*10] ) updateShape sp for i = 0.0 to 1.0 by 0.05 do ( local pt1= findPathSegAndParam sp 1 i local pt2= findLengthSegAndParam sp 1 i format "% : % \t %\n"i pt2 pt1 ) )
出力:
0.0 : [1,0] [1,0] 0.05 : [1,0.633532] [1,0.5] 0.1 : [2,0.261918] [1,1] 0.15 : [2,0.883245] [2,0.5] 0.2 : [3,0.486351] [2,1] 0.25 : [4,0.0810387] [3,0.5] 0.3 : [4,0.650404] [3,1] 0.35 : [5,0.206902] [4,0.5] 0.4 : [5,0.74293] [5,2.98023e-007] 0.45 : [6,0.261026] [5,0.5] 0.5 : [6,0.762596] [6,5.96046e-007] 0.55 : [7,0.246405] [6,0.500001] 0.6 : [7,0.714253] [7,5.96046e-007] 0.65 : [8,0.16969] [7,0.500001] 0.7 : [8,0.605653] [8,5.96046e-007] 0.75 : [9,0.0387986] [8,0.500001] 0.8 : [9,0.445251] [9,5.96046e-007] 0.85 : [9,0.851703] [9,0.500001] 0.9 : [10,0.241028] [10,5.96046e-007] 0.95 : [10,0.620515] [10,0.500001] 1.0 : [10,1] [10,0.999999] OK
右側の頂点補間は、おおよそ正確に開始頂点または終了頂点と 10 個のセグメントそれぞれの中央に一致しています。これは、ステップあたり 1/20 の値を使用しており、長さ補間ではすべてのセグメントの実際の長さが考慮され、スプラインに沿ってスムーズに移動されるからからです。
interpBezier3D <splineShape> <spline_index> <segment_index> <param_float> pathParam:<boolean>
インデックス付きカーブのセグメントとセグメントの一部の point3 座標を返します。
pathParam:false
の場合、param_float
はセグメント長の小数部で、それ以外の場合はセグメント ベース(パス)の小数部です。
既定値は pathParam:false
です。
3ds Max 2008 以降 で使用可能です。
従来、Avguard 機能拡張として提供されていた機能です。
tangentBezier3D <splineShape> <spline_index> <segment_index> <param_float> pathParam:<boolean>
インデックス付きカーブのセグメントとセグメントの一部の point3 接線を返します。
pathParam:false
の場合、param_float
はセグメント長の小数部で、それ以外の場合はセグメント ベース(パス)の小数部です。
既定値は pathParam:false
です。
3ds Max 2008 以降 で使用可能です。
従来、Avguard 機能拡張として提供されていた機能です。
例:
( local sp = splineShape() addnewSpline sp for i = 1 to 100 by 10 do ( addknot sp 1 #smooth #curve [i, (i*i / 100.0), i] ) updateShape sp sp.wirecolor = color 255 0 0 local count = numknots sp - 1 for i = 1 to count do ( local pathp = true local pt = interpBezier3D sp 1 i 0.50 pathParam:pathp local tn = tangentBezier3D sp 1 i 0.50 pathParam:pathp local sr = splineShape() addnewSpline sr addknot sr 1 #corner #line pt addknot sr 1 #corner #line (pt + (tn * 30)) updateShape sr sr.wirecolor =blue ) )
結果:
スプライン シェイプの作成および修正の例については、以下も参照してください。
getSegmentType <shape> <spline_index_integer> <seg_index_integer>
インデックスで指定されたスプラインで、インデックスで指定されたセグメントのタイプを取得します。
setSegmentType <shape> <spline_index_integer> <seg_index_integer> (#curve | #line)
インデックスで指定されたスプラインで、インデックスで指定されたセグメントのタイプを設定します。
refineSegment <shape> <spline_index_integer> <seg_index_integer> <seg_interp_param_float>
インデックスで指定されたカーブのインデックスで指定されたセグメントに新しいノットを追加しまノットは、所定のセグメント補間パラメータに対応するインデックスで指定されたセグメントに沿った場所に追加されます。す。
この値は、セグメントに沿った比率を指定する 0.0 ~ 1.0 の浮動小数点です。
セグメントの既存の曲率を維持するため、新しいノットの座標とイン ベクトルおよびアウト ベクトルが自動的に計算されます。
これは、スプライン編集モディファイヤで refine()
関数によって使われるプリミティブです。
カーブのパス補間パラメータがカーブ内のセグメントで均等に分割されている場合は、MAXScript のスプライン パス補間関数を使ってセグメントのパラメータを派生できます。
パス補間パラメータ u が m セグメントのスプライン内にあるとすると、ターゲット セグメントは次のようになります。
n = (m*u) as integer + 1
セグメント パラメータは次のようになります。
f = (u-(n-1)/m)*m
これは次の係数を返し、計算における丸めエラーを減少させます。
f = u*m-n+1
refineSegment()
関数は、新たに挿入したノットのインデックスを返します。
例:
s = splineShape() --create a spline shape addNewSpline s --add a spline to it addKnot s 1 #corner #line [0,0,0] --add a knot at origin addKnot s 1 #smooth #curve [100,0,0] --add a knot @100 units along X addKnot s 1 #corner #line [200,100,0] --add a third knot updateShape s --update the shape s.vertexTicks = true --enable vertex ticks
--We have two segments and three knots now. refineSegment s 1 1 0.3 --divide the first segment at 30/70% ratio updateShape s --update the shape to see the result --Since our first segment was 100 units long, the vertex is exactly --at 30 units from the origin, just as expected:
--now we have 3 segments - the original second segment is not third refineSegment s 1 3 0.5 -- let's divide it in two equal parts updateShape s --update the shape to see the result --Because the segment is curved, the knot is not at equal distances --to the two other knots along a straight line, but the --distances ALONG THE CURVED SEGMENT are equal:
refineSegment s 1 4 0.8 --divide the new last segment at 80/20% ratio updateShape s --and update the shape to see the result:
getSegSelection <shape> <spline_index_integer>
指定されたシェイプ スプライン内で選択したセグメントのインデックスを整数の配列で返します。
setSegSelection <shape> <spline_index_integer> \
<segment_index_array> \
[keep: <boolean> ]
指定されたシェイプ スプライン内の <segment_index_array>
によって指定されたセグメントを選択します。
<segment_index_array>
は、セグメント インデックスを指定する整数の配列です。
keep
:true が指定されている場合を除いて、既に選択されたセグメントは選択解除されます。
setMaterialID <splineShape> <spline_index> <seg_index> <matID>
指定したスプライン セグメントのマテリアル ID を設定します。
getMaterialID <splineShape> <spline_index> <seg_index>
指定したスプライン セグメントのマテリアル ID を取得します。
スプライン シェイプの作成および修正の例については、以下も参照してください。
addKnot <shape> <spline_index_integer> \
(#smooth | #corner | #bezier | #bezierCorner) \
(#curve | #line) <position_point3> \
[invec_point3 outvec_point3] \
[where_integer]
新しいノット(コントロール ポイント)をインデックスで指定されたスプラインに追加し、追加されたノットのインデックスを整数で返します。
3 番目の引数はノットのタイプを指定し、4 番目の引数はノットを除いたセグメントのタイプを指定します。
5 番目の引数は、追加するノットの座標(現在の作業座標系における座標)を指定します。
ノットのタイプが #bezier
または #bezierCorner
の場合は、6 番目と 7 番目の引数にイン ベクトルとアウト ベクトルのハンドル座標を指定しなければなりません。シェイプ内のスプラインがインデックスで識別されるのと同様に、ノットはスプライン内でインデックスによって識別されます。
最後の引数はオプションであり、ノットの挿入位置にあたる既存のノット内での順番を指定します。この引数を省略すると、既定でスプラインの最後にノットが追加されます。
deleteKnot <shape> <spline_index_integer> <knot_index_integer>
インデックスで指定されたノットをインデックスで指定されたスプラインから削除します。
削除結果を反映するため、残りのノットの番号が更新されます。
getKnotType <shape> <spline_index_integer> <knot_index_integer>
インデックスで指定されたスプラインで、インデックスで指定されたノットのタイプを返します。
値は、#smooth
、#corner
、#bezier
、または #bezierCorner
のいずれかの名前になります。
setKnotType <shape> <spline_index_integer> <knot_index_integer> (#smooth | #corner | #bezier | #bezierCorner)
インデックスで指定されたスプラインで、インデックスで指定されたノットのタイプを設定します。
これは、3ds Max でスプライン編集モディファイヤを使用し、マウスの右ボタンでスプラインのコントロール ポイントに変更を加えることと同じです。
getKnotPoint <shape> <spline_index_integer> <knot_index_integer>
インデックスで指定されたノットの座標を現在の作業座標系における Point3 値で返します。
setKnotPoint <shape> <spline_index_integer> <knot_index_integer> <point3>
インデックスで指定されたスプラインで、インデックスで指定されたノットの座標を設定します。
この座標は、現在の作業座標系で指定します。
getInVec <shape> <spline_index_integer> <knot_index_integer>
インデックスで指定されたノットのイン ベクトル ハンドルの座標を現在の作業座標系における Point3 値で返します。
setInVec <shape> <spline_index_integer> <knot_index_integer> <point3>
インデックスで指定されたノットのイン ベクトル ハンドルの座標を設定します。
この座標は、現在の作業座標系で指定します。
getOutVec <shape> <spline_index_integer> <knot_index_integer>
インデックスで指定されたノットのアウト ベクトル ハンドルの座標を現在の作業座標系における Point3 値で返します。
setOutVec <shape> <spline_index_integer> <knot_index_integer> <point3>
インデックスで指定されたノットのアウト ベクトルのハンドル座標を設定します。
この座標は、現在の作業座標系で指定します。
getKnotSelection <shape> <spline_index_integer>
指定されたシェイプ スプライン内で選択したノットのインデックスを整数の配列で返します。
setKnotSelection <shape> <spline_index_integer> <knot_index_array> [keep: <boolean> ]
指定されたシェイプ スプライン内の <knot_index_array>
によって指定されたノットを選択します。<knot_index_array>
は、ノットのインデックスを指定する整数の配列です。
keep:true
が指定されている場合を除いて、既に選択されたノットは選択解除されます。
スプライン シェイプの作成および修正の例については、以下も参照してください。