contents
- mdlb サンプル - コアのみの場合
- angle 要素
- modulobe 要素
- world 要素
- view 要素
- camera 要素
- focus 要素
- model 要素
- guid 要素
- info 要素
- core 要素
- body 要素
- module 要素
- シャフトモジュールの場合
- リンクモジュールの場合
- tie要素のdir属性について
- モジュールの循環について
- Change log
mdlb specification version 1.3
mdlbファイルの仕様を解説します。XML形式になっています。
mdlb サンプル - コアのみの場合
まず、以下のサンプルを見てください。最も単純なmdlbファイルで、コアのみの初期状態で保存した状態のものです。
<?xml version="1.0" encoding="utf-8"?>
<modulobe version="1.0" generator="modulobe ver 0.0.3">
<world>
<speed>0</speed>
</world>
<view>
<camera>
<angle><x>15</x><y>0</y><z>0</z></angle>
<distance>18.000000</distance>
</camera>
<focus ref="m0"/>
</view>
<model>
<guid>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</guid>
<info>
<name></name>
<author></author>
<comment></comment>
</info>
<core ref="m0">
<angle><x>0</x><y>0</y><z>0</z></angle>
</core>
<body>
<module id="m0">
<tie dir="0"><angle><x>0</x><y>0</y><z>180</z></angle></tie>
<tie dir="1"><angle><x>0</x><y>0</y><z>0</z></angle></tie>
<tie dir="2"><angle><x>0</x><y>0</y><z>-90</z></angle></tie>
<tie dir="3"><angle><x>0</x><y>0</y><z>90</z></angle></tie>
</module>
</body>
</model>
</modulobe>
以下で、詳細を説明していきます。
angle 要素
x、y、zの3つの子要素を持つ、3次元の値を記述するための要素です。それぞれの子要素は整数値を持ちます。
<angle><x>0</x><y>0</y><z>-90</z></angle>
modulobe 要素
root要素です。 子要素の出現順序は自由です。
| 属性 | 値 | 説明 |
| version | 1.0 | 必須。mdlb形式のバージョンを示します。互換性がなくなった場合にこの値は変更されます。現在は1.0です。 |
| generator | 文字列 | オプション。このmdlbデータを生成したプログラムについての情報を記述できます。 |
| 要素 | 説明 |
| world | 必須。物理シュミレーションのパラメータを記述します。 |
| view | オプション。モデルをどの様に表示するかを指定します。 |
| model | 必須。モデルのデータを記述します。 |
world 要素
物理シュミレーションのパラメータを記述します。 子要素の出現順序は自由です。
| 要素 | 説明 |
| speed | 必須。物理シミュレーションの速度です。-4〜4までの整数値をとります。 |
<world> <speed>0</speed> </world>
view 要素
モデルをどの様に表示するかを指定します。 子要素の出現順序は自由です。
| 要素 | 説明 |
| camera | オプション。ロード直後の初期状態での視点についての情報を記述します。 |
| focus | オプション。ロード直後の初期状態でどのモジュールが選択されているかを記述します。 |
<view>
<camera>
<angle><x>15</x><y>0</y><z>0</z></angle>
<distance>18.000000</distance>
</camera>
<focus ref="m0"/>
</view>
camera 要素
ロード直後の初期状態での視点についての情報を記述します。 子要素の出現順序は自由です。
| 要素 | 説明 |
| angle | オプション。視点の角度を記述します。 |
| distance | オプション。選択されているモジュールからの視点の距離を記述します。小数を値にもちます。 |
focus 要素
ロード直後の初期状態でどのモジュールが選択されているかを記述します。
| 属性 | 値 | 説明 |
| ref | 文字列 | 必須。初期状態で選択されているモジュールを表すmodule要素のid属性と同じ値を示す。 |
model 要素
モデルのデータを記述します。 子要素の出現順序は自由です。
| 要素 | 説明 |
| guid | 必須。モデルのGlobal Unique Identifierを記述します。 |
| info | オプション。モデル名、作者名、コメントなどモデルに関する情報を記述します。 |
| core | 必須。コアに関する情報を記述します。 |
| body | 必須。モデル本体に関するデータを記述します。 |
guid 要素
モデルのGlobal Unique Identifierを記述します。 RFC 4122で定められる、UUIDのURN形式で記述します。
<guid>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</guid>
info 要素
モデル名、作者名、コメントなどモデルに関する情報を記述します。 info要素が存在しない場合は、全ての情報がデフォルトの値になります。 子要素の出現順序は自由です。
| 要素 | 説明 |
| name | オプション。モデル名を記述します。存在しない場合は空文字列です。 |
| author | オプション。モデルの製作者を記述します。存在しない場合は空文字列です。 |
| comment | オプション。コメントを記述します。存在しない場合は空文字列です。 |
<info> <name>Crawling Creature</name> <author>Modulobe Project</author> <comment>This is a sample model by Modulobe Project. http://www.modulobe.com/</comment> </info>
core 要素
コアに関する情報を記述します。
| 属性 | 値 | 説明 |
| ref | 文字列 | 必須。コアを持つモジュールを表すmodule要素のid属性と同じ値を示す。現在のmodulobe.exeが出力したデータでは必ず"m0"となるが、他の値でもよい。 |
| 要素 | 説明 |
| angle | 必須。モデル全体の向きを記述する。 |
body 要素
モデル本体に関するデータを記述します。
| 要素 | 説明 |
| module | 必須。各モジュールに関するデータを記述します。モジュールの数だけmodule子要素を持ちます。module要素の順序に意味はありません。つまり、コアを持つモジュールが先頭に来る必要はありません。 |
module 要素
各モジュールに関する情報を記述します。最も複雑なところです。 現在はシャフトとリンク2種類のモジュールがあり、その違いは子要素の内容によって区別されます。 今後さらにモジュールの種類が増える可能性があります。
| 属性 | 値 | 説明 |
| id | 文字列 | 必須。このモジュールのidを示す。現在のmodulobe.exeが出力したデータでは必ず"m"+数字となるが、他の文字列でもよい。XMLの仕様的には、数字で始まるべきではない(が、数字ではじまっても動作する)。 |
シャフトモジュールの場合
4つのtie子要素を持ちます。出現順序は自由です。
tie要素は必ずdir属性を持ち、その値はそれぞれ0,1,2,3です。tie要素はangle子要素をもち、モジュールの接続方向を記述できます。
tie要素はその方向にモジュールが接続されている場合、ref属性を持ち、その値は接続先のモジュールを表すmodule要素のid属性を示します。
<module id="m1"> <tie ref="m0" dir="0"><angle><x>0</x><y>0</y><z>180</z></angle></tie> <tie ref="m3" dir="1"><angle><x>0</x><y>0</y><z>0</z></angle></tie> <tie dir="2"><angle><x>0</x><y>0</y><z>-90</z></angle></tie> <tie dir="3"><angle><x>0</x><y>0</y><z>90</z></angle></tie> </module>
リンクモジュールの場合
2つのtie子要素と、1つのlink子要素を持ちます。出現順序は自由です。
tie要素に関してはシャフトモジュールの場合と同様です。dir属性の値は0,1となります。
link要素はtype属性とcycle属性を持ち、cycle子要素を0個から12個持つことが出来ます。 type属性はをリンクモジュールの種類を表し、その値は±90度モードのときは8、360度モードのときは264です。 cycle属性は周期を表し、その値は1から12です。
cycle要素はangle属性とpower属性を持ちます。出現順序に意味があり、cycle要素の数が12個に満たない場合はデフォルト値が用いられます。 angle属性は角度変化を表し、±90度モードのときは-90〜90、360度モードのときは-180〜180となります。デフォルト値は0です。 power属性の値は0または1で、0の場合はリンクの角度を変化させる力が加わらなくなります(つまり、他の部分の動きにつられて動く)。デフォルト値は1です。
<module id="m6">
<tie ref="m5" dir="0"><angle><x>0</x><y>0</y><z>180</z></angle></tie>
<tie ref="m8" dir="1"><angle><x>0</x><y>0</y><z>0</z></angle></tie>
<link type="8" cycle="1">
<cycle angle="0" power="1"/>
<cycle angle="30" power="1"/>
<cycle angle="60" power="1"/>
<cycle angle="90" power="1"/>
<cycle angle="60" power="1"/>
<cycle angle="30" power="1"/>
<cycle angle="0" power="1"/>
<cycle angle="-30" power="1"/>
<cycle angle="-60" power="1"/>
<cycle angle="-90" power="1"/>
<cycle angle="-60" power="1"/>
<cycle angle="-30" power="1"/>
</link>
</module>
tie要素のdir属性について
コア以外のモジュールの場合、dir属性が0となる方向の接続は必ず存在し、その方向に接続されているモジュールは、よりコアに近いモジュールとなるように指定しなければなりません。 つまり、dir属性が0となる方向にmodule要素をたどっていくと、コアとなるmodule要素にたどり着きます。
モジュールの循環について
上で説明したように、tie要素のref属性で各モジュール間の接続を表現します。 その際、各モジュールが循環してはいけません。 つまり、m0, m1, m2という3つのモジュールがあったとして、m0とm1、m0とm2、m1とm2が接続するようなデータは許されません。
Change log
- 2006/03/28 Version 1.3 guid 要素を追加。
- 2005/12/20 Version 1.2 物理シミュレーションエンジンの変更に伴いバージョンアップ。
- 2005/09/08 Version 1.1 link要素のtypeの属性の値の変更。バタフライリンクとスクリューリンクの場合を追加。(未反映)
- 2005/07/21 module要素の追加。view, camera, focus要素、generator属性についての説明の追加。
- 2005/07/12 Version 1.0 初期バージョン作成。