チュートリアル > ジオメトリ データのテキスト ファイルからの読み取り > ジオメトリ データのテキスト ファイルからの読み取り - 第 1 部 |
これは、「ジオメトリ データの出力 - 第 1 部」チュートリアルで作成された外部テキスト ファイルからメッシュ ジオメトリ データを読み込む基本的な例です。ファイルには、頂点と面のリストのみが含まれています。
Editable_Mesh : GeometryClass および TriMesh : 値
最初に、頂点と面のデータを収集する 2 つの空の配列を定義します。
次に、「ジオメトリの出力 - 第 1 部」チュートリアルで行ったように、入力ファイルの名前を定義します。これは現在、出力および入力の両方のスクリプト内にハードコードされた名前です。このチュートリアルの第 2 部では、ファイルを開くダイアログ ボックスからユーザがファイルを選択できるようにします。
ファイル名を使用して入力用にファイルを開きます。指定されたパスが存在する場合は、fileStream 値が in_file 変数に格納されます。パスが存在しない場合は、代わりに undefined 値が格納されます。
上記の点から、ファイルが有効かどうかをチェックします。値が undefined でない場合、ファイルは正常に開かれています。値が undefined である場合は、ブラケットで囲まれた以降のすべての行が無視されます。
ファイルの最初の行には、コンマで区切られた頂点と面の数が含まれています。readValue メソッドを使用して、ファイルから最初の値を読み取ります。その値は、num_verts 変数に格納されます。
readValue メソッドを使用して、ファイルから次の値を読み取ります。その値は、num_faces 変数に格納されます。
ここで、ファイル内に格納されていた頂点と面の数が判明したので、頂点と面のための配列を初期化します。これで、両方の配列のために十分なメモリが確保されます。
次に、頂点の位置を読み取ります。変数 v が 1 から始まりファイルに格納されていた頂点の数まで変化する、新しいループを開始します。
readValue メソッドを使用して、ファイルから Point3 の値を読み取ります。それらの値をユーザ変数 vert に格納します。
そして、vert_array 配列の v 番目の位置に値を代入します。
この時点で、すべての頂点の位置が読み込まれ、配列内に配置されました。
num_faces 変数を使用して、面の定義も読み取ることができます。変数 f が 1 から始まりファイルに格納されていた面の数まで変化する、別のループを開始します。
readValue メソッドを使用して、面を定義する頂点のインデックスを指定する Point3 の値をファイルから読み取ります。それらの値をユーザ変数 face に格納します。
そして、face_array 配列の f 番目の位置に値を代入します。
この時点で、すべての面の定義が読み込まれ、配列内に配置されました。
スクリプトをテストするために、Output スクリプトを使用して最初にファイルを作成します。次に、MAXScript エディタのメニューからこのスクリプトを開き、[ツール](Tools) > [評価](Evaluate)を選択するか、Ctrl+Eを押します。他のスクリプトでファイルにエクスポートされたオブジェクトがシーンに表示されます。ローカル座標とオブジェクト変換を書き出さなかったため、そのオブジェクトの位置を訂正する必要がありますが、基点はワールド座標にあることに注意してください。
前に説明したように、これはジオメトリを入力する基本コードです。このコードは、さらにコンパクトにすることができます。以下は、同じコードの短縮バージョンです。2 つのスクリプトを比較して、多少異なる表現があっても同じことを実行している理由を考えてください。
「ジオメトリの入力」チュートリアルの第 2 部では、「ジオメトリの出力 第 2 部」チュートリアルで行われた変更を反映させるために、より堅牢なコードを作成し、いくつかの機能も追加します。
チュートリアル - ジオメトリ データのテキスト ファイルへの出力 - 第 1 部