contents
  1. mdlb サンプル - コアのみの場合
  2. angle 要素
  3. modulobe 要素
  4. world 要素
  5. view 要素
  6. camera 要素
  7. focus 要素
  8. model 要素
  9. guid 要素
  10. info 要素
  11. core 要素
  12. body 要素
  13. module 要素
    1. シャフトモジュールの場合
    2. リンクモジュールの場合
    3. tie要素のdir属性について
    4. モジュールの循環について
  14. 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要素です。 子要素の出現順序は自由です。

属性 説明
version1.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 初期バージョン作成。