次の方法で共有


テンプレート (X ファイル形式、テキスト エンコード)

テンプレートは、データ ストリームの解釈方法を定義します。データはテンプレート定義によって調整されます。 このセクションでは、テンプレートの次の側面について説明し、テンプレートの例を示します。

1 つの特殊なテンプレート (ヘッダー テンプレート) があります。 各アプリケーションでヘッダー テンプレートを定義し、それを使用してバージョン情報などのアプリケーション固有の情報を定義することをお勧めします。 存在する場合、このヘッダーは .x ファイル形式 API によって読み取られます。 flags メンバーが使用可能な場合は、次のデータの解釈方法を決定するために使用されます。 定義されている場合、flags メンバーは DWORD である必要があります。 現在、1 つのビットが定義されています - ビット 0。 このビットが明確な場合、ファイル内の次のデータはバイナリです。 設定されている場合、次のデータはテキストです。 複数のヘッダー データ オブジェクトを使用して、ファイル内のバイナリとテキストを切り替えることができます。

テンプレート フォーム、名前、UUID

テンプレートの形式は次のとおりです。

template <template-name> {
<UUID>
    <member 1>;
...
    <member n>;
[restrictions]
}

テンプレート名は、アンダースコア文字 (_) を含めることができる英数字の名前です。 数字で始めてはいけません。 UUID は、Open Software Foundation の Distributed Computing Environment 標準に書式設定され、山かっこ (<>) で囲まれた汎用一意識別子です。 例: <3D82AB43-62DA-11cf-AB39-0020AF71E433>。

テンプレート メンバー

テンプレート メンバーは、名前付きデータ型の後に省略可能な名前または名前付きデータ型の配列で構成されます。 有効なプリミティブ データ型は、次の表で定義されています。

Type サイズ
WORD 16 ビット
DWORD 32 ビット
FLOAT IEEE float
DOUBLE 64 ビット
CHAR 8 ビット
UCHAR 8 ビット
BYTE 8 ビット
STRING NULL で終わる文字列
Cstring 書式設定された C 文字列 (サポートされていません)
UNICODE Unicode 文字列 (サポートされていません)

 

データ ストリームで前に検出されたテンプレートによって定義された追加のデータ型は、テンプレート定義内で参照することもできます。 前方参照は許可されません。

任意の有効なデータ型は、テンプレート定義で配列として表すことができます。 基本的な構文を次の例に示します。

array <data-type> <name>[<dimension-size>];

<dimension-size> には、値が置換された別のテンプレート メンバーへの整数または名前付き参照を指定できます。 配列には n 次元を指定できます。n は、次の例のように、ステートメントの末尾にあるペアの角かっこの数によって決まります。

array DWORD FixedHerd[24];
array DWORD Herd[nCows];
array FLOAT Matrix4x4[4][4];

テンプレートの制限

テンプレートは、開く、閉じる、または制限できます。 これらの制限により、テンプレートで定義されたデータ オブジェクトの即時階層に表示できるデータ型が決まります。 開いているテンプレートには制限がなく、閉じたテンプレートはすべてのデータ型を拒否し、制限付きテンプレートではデータ型の名前付きリストが許可されます。

開いているテンプレートを示す構文は、角かっこで囲まれた 3 つのピリオドです。

[ ... ]

名前付きデータ型のコンマ区切りの一覧 (オプションで角かっこで囲まれた UUID) は、制限付きテンプレートを示します。

[ { data-type [ UUID ] , } ... ]

上記のいずれかが存在しない場合は、閉じたテンプレートを示します。

テンプレートの例

テンプレートの例を次に示します。

template Mesh {
<3D82AB44-62DA-11cf-AB39-0020AF71E433>
DWORD nVertices;
array Vector vertices[nVertices];
DWORD nFaces;
array MeshFace faces[nFaces];
 [ ... ]                // An open template
}
template Vector {
<3D82AB5E-62DA-11cf-AB39-0020AF71E433>
FLOAT x;
FLOAT y;
FLOAT z;
}                        // A closed template
template FileSystem {
<UUID>
STRING name;
[ Directory <UUID>, File <UUID> ]    // A restricted template
}

テキスト エンコード