これは、「ジオメトリ データの出力」チュートリアルの第 2 部です。第 1 部で開発したスクリプトを拡張して、スムージング グループ、マテリアル ID、およびエッジ可視性をサポートします。
関連トピック:
全体の流れ:
第 1 部からスクリプトをロードします。
ジオメトリ オブジェクト用のフィルタ関数を作成します。
ユーザにシーン オブジェクトを選択してもらい、それにフィルタ関数を適用します。
ユーザが有効なオブジェクトを選択した場合は、ファイルを保存するためのダイアログ ボックスを取得して、ターゲット名をユーザに尋ねます。
ファイル名が有効な場合は、頂点を書き出します。
面の書き出し用コード内で、スムージング グループ値、マテリアル ID およびエッジ可視性を収集します。
収集された値を単一行として出力します。
ファイルを閉じます。
確認のためにファイルを開きます。
MAXScript
macroScript ExportMesh category: "HowTo" ( fn GetGeometry o = ( Superclassof o == Geometryclass and classof o != TargetObject ) obj = pickobject filter:GetGeometry if isValidNode obj then ( tmesh =snapshotAsMesh obj out_name = GetSaveFileName() if out_name != undefined then ( out_file = createfile out_name num_verts = tmesh.numverts num_faces = tmesh.numfaces format "%,%\n" num_verts num_faces to:out_file for v = 1 to num_verts do format "%," (getVert tmesh v) to:out_file format "\n" to:out_file for f = 1 to num_faces do ( face = getFace tmesh f sgroup = getFaceSmoothGroup tmesh f matid = getFaceMatId tmesh f edge1 = getEdgeVis tmesh f 1 edge2 = getEdgeVis tmesh f 2 edge3 = getEdgeVis tmesh f 3 format "%,%,%,%,%,%\n" face sgroup matid edge1 edge2 edge3 to:out_file ) close out_file edit out_name )--end if )--end if )--end macroscript
MacroScript ExportMesh category:"HowTo"
(
ExportMesh
という名前の macroScript を定義します。スクリプトを使用する場合は、[カスタマイズ] (Customize)に移動してスクリプトを[HowTo]カテゴリからツールバー、メニュー、またはクアッド メニューにドラッグするか、キーボード ショートカットを割り当てることができます。
fn GetGeometry o = (
Superclassof o == Geometryclass and classof o != TargetObject )
特定のオブジェクト タイプの選択だけを許可するフィルタ関数が必要です。この例では、パラメータとして渡されるオブジェクトのスーパークラスが GeometryClass で、渡されたオブジェクトのクラスが TargetObject でない場合にのみ、関数は true を返します (TargetObject は、メッシュなしの唯一のジオメトリ オブジェクトです)。
obj = pickobject filter:GetGeometry
ここで、ユーザに 2 番目のオブジェクトを選択してもらい、マウス ポインタの下にあるすべてのオブジェクトにフィルタを適用します。マウス ポインタは、シーン オブジェクトのクラスがフィルタ関数内で定義されたクラスに一致する場合にのみ、シーン オブジェクトの選択を許可します。
if isValidNode obj then
(
ユーザが有効なオブジェクトを選択した場合(つまり、右クリックしてキャンセルせず、Escも押さなかった場合)、スクリプトの残りの部分を実行します。 そうでない場合は、以降の行をスキップします。
tmesh = snapshotAsMesh obj
これは、第 1 部のコードと同じです。選択されたオブジェクトからメッシュを取得します。
out_name = GetSaveFileName()
ハードコードされたパスを指定する代わりに、ユーザにファイル名を入力してもらいます。
if out_name != undefined then
(
ユーザが有効な名前を指定した場合、つまり[キャンセル] (Cancel)を押さなかった場合は、実行を続けます。
out_file = createfileout_name
num_verts = tmesh.numverts
num_faces = tmesh.numfaces
format "%,%\n" num_verts num_faces to:out_file
第 1 部と同様に、新しいファイルを作成して頂点と面の数を出力します。
for v = 1 to num_verts do
format "%," (getVert tmesh v) to:out_file
format "\n" to:out_file
次に、第 1 部のコンパクト バージョンと同様に、頂点を書き込みます。
for f = 1 to num_faces do
(
面のループでは、今回の方が多くのデータを書き出します。各面には、スムージング グループの値、マテリアル ID の値、および 3 つのエッジ可視性の値があります。このすべてを単一のパスで書き出します。
face = getFace tmesh f
最初に、面を取得します。
sgroup = getFaceSmoothGroup tmesh f
次に、同じ面からスムージング グループ値を取得します。
matid = getFaceMatId tmesh f
次は、マテリアル ID 値です。
edge1 = getEdgeVis tmesh f 1
edge2 = getEdgeVis tmesh f 2
edge3 = getEdgeVis tmesh f 3
さらに、3 つの面エッジのそれぞれのエッジ可視性です。
Editable_Mesh : GeometryClass および TriMesh : 値
format "%,%,%,%,%,%\n" face sgroup matid edge1 edge2 edge3 to:out_file
これで、すべての値を取得したので、それらの値すべてを単一行で出力します。行の最後に改行文字を追加します。 これで、各面に 1 つの行が対応します。
)
close out_file
面のループの準備ができたら、出力ファイルを閉じます。
edit out_name
そして、新しいファイルを開き、結果をチェックします。
)--end if
)--end if
)--end macroscript
スクリプトをテストするため、MAXScript エディタのメニューから[ツール] (Tools) > [評価] (Evaluate)を選択するか、[Ctrl]+[E]を押します。次にツールバーをカスタマイズし、スクリプトを[HowTo]カテゴリからドラッグします。ボタンを押して、シーンからジオメトリ オブジェクトを選択します。Patch、NURBS、手続き型オブジェクトなど、任意のジオメトリ オブジェクトを選択することができます。
立方体の出力例
8,12 [-50,-50,0],[50,-50,0],[-50,50,0],[50,50,0],[-50,-50,100],[50,-50,100],[-50,50,100],[50,50,100], [1,3,4],2,2,true,true,false [4,2,1],2,2,true,true,false [5,6,8],4,1,true,true,false [8,7,5],4,1,true,true,false [1,2,6],8,5,true,true,false [6,5,1],8,5,true,true,false [2,4,8],16,4,true,true,false [8,6,2],16,4,true,true,false [4,3,7],32,6,true,true,false [7,8,4],32,6,true,true,false [3,1,5],64,3,true,true,false [5,7,3],64,3,true,true,false
ここで拡張された出力を入手したので、対応する入力スクリプトに進んでそれを拡張して、新しいデータ フォーマットを読み戻し、すべての面プロパティを持つ新しいシーン オブジェクトを作成します。
後で、たとえばテクスチャ座標のサポートなどを追加して、自分でこのスクリプトを拡張することができます。
戻る
チュートリアル - ジオメトリ データのテキスト ファイルからの読み取り - 第 1 部
チュートリアル - ジオメトリ データのテキスト ファイルへの出力 - 第 1 部
次へ