snapMode 構造体

snapMode 構造体は、MAXScript からスナップ オプションにアクセスし、コントロールするためのシステム グローバルと関数を提供します。

システム グローバル:

snapMode.active 

スナップがアクティブであるかどうかを取得および設定する 3ds Max システム グローバル。

ブール値です。

snapMode.type 

現在のスナップ タイプを名前で取得/設定します。有効な名前は、#2D#2_5D、および #3Dです。

3ds Max 7 では、snapMode 構造は、すべてのスナップ設定とスナップ結果にアクセスできるように拡張されています。3ds Max 7 以前のリリースでは、これらのプロパティはサード パーティの Avguard 拡張機能で使用できました。

snapMode.snapPreviewRadius 

[スナップ プレビュー 半径]の値を取得および設定するシステム グローバル。

既定値は 30 です。

3ds Max 7 以降で使用可能です。

snapMode.snapRadius 

[スナップ半径]の値を取得および設定するシステム グローバル。

既定値は 20 です。

3ds Max 7 以降で使用可能です。

snapMode.hilite 

スナップ マーカーのカラー値を取得および設定するシステム グローバル。

3ds Max 7 以降で使用可能です。

snapMode.markSize 

スナップ マーカーのサイズを取得および設定するシステム グローバル。

整数値です。

3ds Max 7 以降で使用可能です。

snapMode.toFrozen 

フリーズされたオブジェクトにスナップするかどうかを取得および設定するシステム グローバル。

ブール値です。

3ds Max 7 以降で使用可能です。

snapMode.axisConstraint 

スナップで軸コンストレイントを使用するかどうかをブール値として取得および設定するシステム グローバル。

[グリッド/スナップ設定])ダイアログ ボックスの[オプション]タブにあるチェックボックスに対応します。

3ds Max 7 以降で使用可能です。

snapMode.displayRubberBand 

ラバー バンドを表示するかどうかをブール値として取得および設定するシステム グローバル。

[グリッド/スナップ設定])ダイアログ ボックスの[オプション]タブにあるチェックボックスに対応します。

3ds Max 7 以降で使用可能です。

snapMode.useAxisCenterAsStartSnapPoint 

[軸中心をスナップ ポイント始点として使用]オプションの状態をブール値として取得および設定するシステム グローバル。

[グリッド/スナップ設定])ダイアログ ボックスの[オプション]タブにあるチェックボックスに対応します。

3ds Max 7 以降 3ds Max 2010 まで使用可能です。

3ds Max 2011で廃止されました。

このプロパティへのアクセスを試行すると次の結果になります。

-- ランタイム エラー: このスナップ オプションを設定できません。これは、3ds Max 2011では廃止されています。

snapMode.display 

スナップ マーカーを表示するか取得および設定するシステム グローバル。

ブール値です。

3ds Max 7 以降で使用可能です。

snapMode.strength 

スナップ強度を整数値で取得および設定するシステム グローバル。

3ds Max 7 以降で使用可能です。

snapMode.hit 

マーカーが現在何かにスナップされている場合は true、スナップされていない場合は false を含むシステム グローバル。

スナップがアクティブでない場合は undefined が含まれます。

読み込み専用。

3ds Max 7 以降で使用可能です。

snapMode.node 

現在スナップされている対象のノードを含むシステム グローバル。

ノードにスナップされていない場合、またはスナップがアクティブでない場合は undefined が含まれます。

読み込み専用。

3ds Max 7 以降で使用可能です。

snapMode.flags 

スナップ システム フラグを整数として含むシステム グローバル。

スナップがアクティブでない場合は undefined が含まれます。

読み込み専用。

3ds Max 7 以降で使用可能です。

snapMode.hitPoint 

最後のスナップ ポイントを Point3 座標としてスナップ対象のノードのローカル座標内に含むシステム グローバル。

スナップがアクティブでない場合は undefined が含まれます。

読み込み専用。

3ds Max 7 以降で使用可能です。

snapMode.worldHitpoint 

最後のスナップ ポイントを Point3 ワールド座標として含むシステム グローバル。

スナップがアクティブでない場合は undefined が含まれます。

読み込み専用。

3ds Max 7 以降で使用可能です。

snapMode.screenHitPoint 

最後のスナップ ポイントを Point3 画面座標として含むシステム グローバル。

スナップがアクティブでない場合は undefined が含まれます。

読み込み専用。

3ds Max 7 以降で使用可能です。

snapMode.screenHitPointUnscaled 

3ds Max 2017 以降で使用可能: 前回のスナップ ポイントをスケールされていない Point3 画面座標として含むシステム グローバルです。

スナップがアクティブでない場合は undefined が含まれます。

読み込み専用です。

スナップがアクティブでない場合は undefined が含まれます。

snapMode.OKForRelativeSnap 

少なくとも 1 つのスナップ ポイントが記録されている場合に true を含むシステム グローバル。

スナップがアクティブでない場合は undefined が含まれます。

読み込み専用。

3ds Max 7 以降で使用可能です。

snapMode.refPoint 

最後のスナップ ポイントを Point3 ワールド座標として含むシステム グローバル。

スナップがアクティブでない場合は undefined が含まれます。

読み込み専用。

3ds Max 7 以降で使用可能です。

snapMode.topRefPoint 

最初のスナップ ポイントを Point3 ワールド座標として含むシステム グローバル。

スナップがアクティブでない場合は undefined が含まれます。

読み込み専用。

3ds Max 7 以降で使用可能です。

snapMode.numOSnaps 

OSnaps の数を整数として含むシステム グローバル。

読み込み専用です。

現在、6 セットの OSnap があります(詳細については以下を参照)。

3ds Max 7 以降で使用可能です。

メソッド:

snapMode.getOSnapName <int osnap_index> 

インデックスで指定された OSnap の名前を文字列で返します。

現在の結果は次のとおりです。

1 - "Body" - 3ds Max 2011 以降で使用可能です。

2 - "NURBS"

3 - "Point Cloud Objects" - 3ds Max 2015 以降で使用可能です。

4 - "Standard"

5 - "Standard"

6 - "Standard"

7 - "Standard"

3ds Max 7 以降で使用可能なその他すべての結果。

注:

標準のスナップは、4 から 7 のインデックスによる 4 つのグループで公開されています。

スナップ項目とグループとの対応の詳細については、以下の表を確認してください。

また、このページの後半にある出力例も参照してください。

snapMode.getOSnapNumItems <int osnap_index> 

インデックスで指定された OSnap の OSnap 項目の数を として返します。

3ds Max 7 以降で使用可能です。

有効な osnap_index 値は次のとおりです。

インデックス スナップ 名
1 Body 5 頂点、エッジの終点、エッジ、エッジ中点、面
2 NURBS 10 CV、ポイント、カーブの中心、カーブの法線、カーブの接線、カーブのエッジ、カーブの終点、サーフェス中心、サーフェス法線、サーフェス エッジ
3 Point Cloud 1 ポイント クラウド頂点
4 Standard 2 グリッド ポイント、グリッド ライン
5 Standard 2 基点、バウンディング ボックス
6 Standard 2 垂直、接線
7 Standard 6 頂点、終点、エッジ/セグメント、中点、面、面の中心
snapMode.getOSnapItemName <int osnap_index> <int osnap_item_index> 

インデックスで指定された OSnap のインデックスで指定された OSnap 項目の名前を文字列で返します。

現在実装されている名前については上のテーブルを参照してください。

3ds Max 7 以降で使用可能です。

snapMode.getOSnapItemToolTip <int osnap_index> <int osnap_item_index> 

インデックスで指定された OSnap のインデックスで指定された OSnap 項目のツールチップを文字列で返します。

3ds Max 7 以降で使用可能です。

snapMode.getOSnapItemActive <int osnap_index> <int osnap_item_index> 

インデックスで指定された OSnap のインデックスで指定された OSnap 項目がアクティブの場合は true を返し、それ以外の場合は false を返します。

3ds Max 7 以降で使用可能です。

snapMode.setOSnapItemActive <int osnap_index> <int osnap_item_index> <boolean> 

インデックスで指定された OSnap のインデックスで指定された OSnap 項目がアクティブかどうかを設定します。

3ds Max 7 以降で使用可能です。

スナップ オプションについて

スクリプト:

   --The following example prints information about the state of
   --all Snap options to the Listener:
   for i = 1 to snapmode.numOSnaps do
   (
   format "%: name: \"%\"\n" i (snapmode.getOSnapName i)
   for j = 1 to (snapmode.getOSnapNumItems i) do
   format " %: name: \"%\"; tooltip: \"%\"; state: %\n" j \
   (snapmode.getOSnapItemName i j) \
   (snapmode.getOSnapItemToolTip i j) \
   (snapmode.getOSnapItemActive i j)
   )

出力:

   1: name: "Body Snaps"
    1: name: "Vertex"; tooltip: ""; state: false
    2: name: "End Edge"; tooltip: ""; state: false
    3: name: "Edge"; tooltip: ""; state: false
    4: name: "Edge Midpoint"; tooltip: ""; state: false
    5: name: "Face"; tooltip: ""; state: false
   2: name: "NURBS"
    1: name: "CV"; tooltip: ""; state: false
    2: name: "Point"; tooltip: ""; state: false
    3: name: "Curve Center"; tooltip: ""; state: false
    4: name: "Curve Normal"; tooltip: ""; state: false
    5: name: "Curve Tangent"; tooltip: ""; state: false
    6: name: "Curve Edge"; tooltip: ""; state: false
    7: name: "Curve End"; tooltip: ""; state: false
    8: name: "Surf Center"; tooltip: ""; state: false
    9: name: "Surf Normal"; tooltip: ""; state: false
    10: name: "Surf Edge"; tooltip: ""; state: false
   3: name: "Point Cloud Objects"
    1: name: "Point Cloud Vertex"; tooltip: ""; state: false
   4: name: "Standard"
    1: name: "Grid Points"; tooltip: ""; state: true
    2: name: "Grid Lines"; tooltip: ""; state: false
   5: name: "Standard"
    1: name: "Pivot"; tooltip: ""; state: true
    2: name: "Bounding Box"; tooltip: ""; state: false
   6: name: "Standard"
    1: name: "Perpendicular"; tooltip: ""; state: false
    2: name: "Tangent"; tooltip: ""; state: false
   7: name: "Standard"
    1: name: "Vertex"; tooltip: ""; state: false
    2: name: "Endpoint"; tooltip: ""; state: false
    3: name: "Edge/Segment"; tooltip: ""; state: false
    4: name: "Midpoint"; tooltip: ""; state: false
    5: name: "Face"; tooltip: ""; state: false
    6: name: "Center Face"; tooltip: ""; state: false
   OK

スナップ オプションの変更

次の例では、スナップ オプションへのアクセスおよび変更方法を示します。

   --The Snaps dialog must not necessarily be open,
   --but in this example we will toggle it on to be able to see
   --what is happening to the checkboxes:
   max drawingaids --toggle on the Snaps dialog
   -->OK --if it was closed, it should be open now
   snapmode.getOSnapItemActive 7 1 --print the state of the Object>Vertex snap
   -->false --it is off
   --now toggle the vertex snap:
   snapmode.setOSnapItemActive 7 1 (not(snapmode.getOSnapItemActive 5 1))
   -->OK
   max drawingaids; max drawingaids --toggle the Snaps dialog twice to refresh
   -->OK
   -->OK --the Vertex checkbox should be checked now
   snapmode.getOSnapItemActive 7 1 --get the current Vertex snap state
   -->true --it is now on

スナップ マーカー設定について

次の例では、スナップ マーカー設定に関する情報を出力します。

   format "type: %; hilite: %; marksize: %; toFrozen: %\n" snapmode.type snapmode.hilite \
   snapmode.markSize snapmode.toFrozen
   format "axisConstraint: %; active: %; strength: %\n" snapmode.axisConstraint snapmode.active \
   snapmode.strength

スナップ結果について

次の例では、ビューポート内のスナップ操作の結果にダイナミックにアクセスして出力する方法を示します。

   --This function can be registered as a RedrawViews Callback
   --It will print information about the current snap state to the Listener
   fn snapinfo =
   (
   local snapinfo
   if snapmode.active do
   (
   struct snapinfo (hit, flags, hitpoint, worldhitpoint, screenHitPoint, OKForRelativeSnap, topRefPoint, refPoint, node)
   local out = snapinfo snapmode.hit (bit.intAsHex snapmode.flags) snapmode.hitPoint \
   snapmode.worldHitpoint snapmode.screenHitPoint snapmode.OKForRelativeSnap \
   snapmode.refPoint snapmode.topRefPoint snapmode.node
   print out
   )
   ok
   )
   unregisterRedrawViewsCallback snapinfo
   registerRedrawViewsCallback snapinfo