これは、「ジオメトリの読み込み」チュートリアルの第 2 部です。チュートリアル - ジオメトリ データのテキスト ファイルへの出力 - 第 2 部 で開発した出力スクリプトによって書かれた拡張データを、このスクリプトで読み込むことができます。
全体の流れ:
ユーザがツールバー、クアッド メニュー、キーボード ショートカットまたはメニューとしてスクリプトを配置できるように、macroScript をパッケージ化します。
スムージング グループ、マテリアル ID、およびエッジの可視性を格納するための 3 つの配列を作成します。
開くファイルをユーザに選択してもらいます。
ユーザが有効なファイル名を選択した場合は、スクリプトの実行を続けます。
第 1 部と同様に頂点と面を読み取った後に、スムージング グループ、マテリアル ID、およびエッジの可視性も読み取ります。
ファイルを閉じます。
収集された頂点と面から、新しいメッシュを作成します。
スムージング グループ、マテリアル ID、およびエッジの可視性の値をすべての面に適用します。
この変更を反映させるためにメッシュを更新します。
MAXScript
macroScript ImportMesh category: "HowTo" ( vert_array = #() face_array = #() sgroup_array = #() matid_array = #() edge_array = #() in_name = getOpenFileName() if in_name != undefined then ( in_file = openFile in_name if in_file != undefined then ( num_verts = readValue in_file num_faces = readValue in_file for v = 1 to num_verts do append vert_array (readValue in_file) for f = 1 to num_faces do ( append face_array (readValue in_file) append sgroup_array (readValue in_file) append matid_array (readValue in_file) edge1 = readValue in_file edge2 = readValue in_file edge3 = readValue in_file append edge_array #(edge1, edge2, edge3) ) close in_file new_mesh = mesh vertices:vert_array faces:face_array for f = 1 to num_faces do ( setFaceSmoothGroup new_mesh f sgroup_array[f] setFaceMatID new_mesh f matid_array[f] setEdgeVis new_mesh f 1 edge_array[f][1] setEdgeVis new_mesh f 2 edge_array[f][2] setEdgeVis new_mesh f 3 edge_array[f][3] ) update new_mesh )--end if )--end if )--end macroscript
macroScript ImportMesh category: "HowTo"
(
ImportMesh
という名前の macroScript を定義します。スクリプトを使用する場合は、[カスタマイズ] (Customize)に移動してスクリプトを[HowTo]カテゴリからツールバー、メニュー、またはクアッド メニューにドラッグするか、キーボード ショートカットを割り当てることができます。
vert_array = #()
face_array = #()
第 1 部の場合と同様に、頂点と面を保持する配列を定義します。
sgroup_array = #()
matid_array = #()
edge_array = #()
ただし、スムージング グループ、マテリアル ID、およびエッジの可視性を格納するための 3 つの配列も定義します。
in_name = getOpenFileName()
固定された名前を読む代わりに、ユーザがファイル名を選択できるようにします。
if in_name != undefined then
(
選択されたファイル名が undefined でないかぎり、つまりユーザが[キャンセル] (Cancel)を押さないかぎり、続行できます。
in_file = openFile in_name
if in_file != undefined then
(
num_verts = readValue in_file
num_faces = readValue in_file
for v = 1 to num_verts do
append vert_array (readValue in_file)
for f = 1 to num_faces do
(
append face_array (readValue in_file)
読み取り用のコードのこの部分は第 1 部と同じですが、追加のデータを読む必要があります。
append sgroup_array (readValue in_file)
append matid_array (readValue in_file)
ファイルからスムージング グループの値とマテリアル ID の値を読み、配列に付加します。
edge1 = readValue in_file
edge2 = readValue in_file
edge3 = readValue in_file
さらに、3 つのエッジ可視性の値を読みます。
Editable_Mesh : GeometryClass および TriMesh : 値
append edge_array #(edge1, edge2, edge3)
後のアプリケーション用にエッジ可視性の値を格納するために、新しい配列を作成して値を付加します。
)
close in_file
new_mesh = mesh vertices:vert_array faces:face_array
この時点で、第 1 部と同様のメッシュを取得しました。ここで、結果のメッシュに追加データを適用する必要があります。
for f = 1 to num_faces do
(
これを行うために、新しいループを開始します。
setFaceSmoothGroup new_mesh f sgroup_array[f]
次に、new_mesh オブジェクトの f 番目のスムージング グループを、sgroup_array 内の f 番目の位置に格納された値に設定します。
setFaceMatID new_mesh f matid_array[f]
new_mesh オブジェクトの f 番目の面のマテリアル IDを、matid_array 内の f 番目の位置に格納された値に設定します。
setEdgeVis new_mesh f 1 edge_array[f][1]
setEdgeVis new_mesh f 2 edge_array[f][2]
setEdgeVis new_mesh f 3 edge_array[f][3]
さらに、new_mesh オブジェクトの f 番目の 3 つのエッジのそれぞれのエッジ可視性を、edge_array 内の f 番目の位置にある下位の配列に格納された値に設定します。
)
update new_mesh
最後に、内部のメッシュ キャッシュを更新して、シーン内に変更が反映されるようにします。これは、非常に重要なステップです。
)
)
)
スクリプトをテストするために、Output スクリプトを使用して最初にファイルを作成します。次に、MAXScript エディタのメニューからこのスクリプトを開き、[ツール] (Tools) > [評価] (Evaluate)を選択するか、[Ctrl]+[E]を押します。他のスクリプトでファイルにエクスポートされたオブジェクトがシーンに表示されます。ローカル座標とオブジェクト変換を書き出さなかったため、そのオブジェクトの位置を訂正する必要がありますが、基点はワールド座標にあることに注意してください。
第 2 部のチュートリアルで提案されたとおりにジオメトリ出力のスクリプト内でテクスチャ座標の書き込みを実装した場合は、さらにこのスクリプトを変更して、追加のデータを読むことができます。
戻る
チュートリアル - ジオメトリ データのテキスト ファイルへの出力 - 第 2 部