« 半円っぽい並べ方 | トップページ | 電池の悩み »

2013年10月18日 (金)

レイアウトプランの表現と伝達

ネット上には、多くのレイアウトプランが紹介されている。
その形式は、
 ・写真(ラスタデータ)
 ・図面(ラスタデータ)
 ・動画
 ・3D CADデータ(バイナリ)
など。

ここで、純粋にレール等の“並べ方”をデータ化すれば、レイアウトプランの表現や伝達、共有、二次利用が容易になるのではないかと思う。
そのほうがクロスプラットフォームに展開しやすいから。
それも、テキスト表記が望ましい。

そのために、やらなければならない事は、
■データフォーマットの規定
■ビューワアプリやスクリプトの開発
  機能としては、
 ・データ読み込み
 ・表示(平面、階層別、アイソメトリック、3Dなど)
 ・使用レールの種類別個数集計
 ・レイアウトサイズ(必要な広さ)算出
 ・印刷、画像データ出力(JPEG、PNG、PDFなど)
 ・誤りチェック(つなぎ目の誤差、干渉など)
 ・代替レールとの置換処理
 ・所有しているレールの不足分算出(追加しなければならないレールの種類と数を提示)
 ・オンラインショップへのリンク(個人的にはうっとおしいので無いほうがいい)
 ・レイアウトプランの共有・交換サイト(データベース)内の検索
  検索方法
   - レイアウトプランに必要な広さ
   - 所有しているレールで作れるか
   - レイアウトプランの特性(数多く車両が同時に走る or 少ない車両が長い距離走る)
   - 同時に走らせられる車両の本数
   - セット品だけに入っている大型駅(「○○○○ステーション」などのセット品)※駅を選ぶと、それを中心としたレイアウトを提示
   - レイアウトプランの作成者

■エディタアプリやスクリプトの開発
 機能としては、
 ・ビューワアプリの全機能
 ・レールの定義データ編集
 ・レイアウトのプラン編集
 ・複数プラン間の結合(マージ)
 ・データの全保存と部分保存
 ・3D CADなど、他のデータフォーマットとのコンバート(インポート/エクスポート)
 ・レールや部品の干渉検査や建築限界の検査

■更なる展開
 ・3Dシミュレータ機能(「A列車で行こう」のような)
 ・リモポイントなどのレールコントロールシステムの制御盤機能
 ・モバイルアプリ化して、カメラで部屋を撮り目印の寸法を入力すると、部屋の形と広さを自動計算して、適したプランを検索できる機能

…と、道のりは険しい。

…けれど、とりあえず始めてみる。

試しに、「レールセットB」を題材にしてみる。
・角度(方向)は、時計の3時方向(東向き)を0度、12時方向(北向き)を90度
・レールの表裏は、公式ホームページの商品ラインナップページの見え方を「表」
とすると、下記のように表現できる。

■レールセットB
・直線レール、X:0、Y:0、0度、表
・曲線レール、X:216、Y:0、0度、表
・曲線レール、X:368.735064736294、Y:-368.735064736294、225度、表
・曲線レール、X:0、Y:-432、180度、表
・曲線レール、X:-152.735064736294、Y:-368.735064736294、135度、表
・曲線レール、X:-216、Y:-216、90度、表
・曲線レール、X:-152.735064736294、Y:-63.264935263706、45度、表
・曲線レール、X:495.264935263706、Y:-63.264935263706、45度、表
・曲線レール、X:648、Y:0、0度、表
・曲線レール、X:800.735064736294、Y:-63.264935263706、315度、表
・曲線レール、X:864、Y:-216、270度、表
・曲線レール、X:800.735064736294、Y:-368.735064736294、225度、表
・曲線レール、X:648、Y:-432、180度、表
・8の字ポイントレール(L)、X:432、Y:-216、90度、表
・8の字ポイントレール(R)、X:432、Y:-216、270度、表
・ニュー踏切、X:216、Y:-432、180度

これを、CSVや、JSON形式にするのも考えられるが、XMLっぽくデータ化してみると、こうなる。
要素にすべきか、属性にすべきかは、もっと深く考えなければ。

<Layout_plan>

<head> <!-- レイアウト全体を説明するブロック -->
<title>レールセットB</title> <!-- レイアウトの名前 -->
<Plan_no>4904810152118</Plan_no> <!-- 省略可:レイアウトの番号 -->
<Plan_code_JAN>4904810152118</Plan_code_JAN> <!-- 省略可:JANコードつまりバーコード -->
<Plan_code_ASIN>ASIN: B0002U3IDE</Plan_code_ASIN> <!-- 省略可:Amazonの商品コード -->
<Edited_date>1995年03月20日</Edited_date> <!-- 省略可:プランの編集日 -->
<Edited_by>株式会社タカラトミー</Edited_by> <!-- 省略可:プランの編集者 -->
<Unit_distance>millimeter</Unit_distance> <!-- 省略可:長さの単位 -->
<Unit_angle>degrees</Unit_angle> <!-- 省略可:角度の単位 -->
<Tolerance></Tolerance> <!-- 省略可:レイアウトで許容する誤差 -->
<img src="http://www.takaratomy.co.jp/products/plarail/lineup/rail/images/railB.jpg" alt="レールセットB"> <!-- 省略可:レイアウトの写真や図 -->
<Offset_x>0</Offset_x> <!-- 省略可:表示用のパラメータ -->
<Offset_y>0</Offset_y> <!-- 省略可:表示用のパラメータ -->
<Rotation>0</Rotation> <!-- 省略可:表示用のパラメータ -->
<Scale>1</Scale> <!-- 省略可:表示用のパラメータ -->
</head>

<Layout_elements> <!-- レイアウトで使用する要素部品を定義するブロック -->

<Rail_types> <!-- レールとレール付き情景部品の種類を定義するブロック -->
<!-- レールは、販売終了になるなど流動的である事から、情報不足を防ぐために、レールの定義も含めておく。
まがレールは、プラン毎に形が異なるのでレールの定義は必須。
また、自作・改造レールも定義すれば扱えるようになる。
ただし、複数のプランを合わせる(マージ)する際に、同じレールの情報に不整合(不一致)があると、トラブルの原因となるのが課題。
ライブラリデータを流し込めるような工夫も考えなければならない。 -->

<Rail num="01" reversible="yes"> <!-- 直線レールの定義 表裏使用可-->
<Rail_name>直線レール</Rail_name>
<Rail_code_JAN>4904810108009</Rail_code_JAN>
<Rail_material_JISK6899>PP</Rail_material_JISJISK6899>
<Rail_material_name>ポリプロピレン</Rail_material_name>
<Joints>
<Joint num="00" dovetail="-1"> <!-- 基準点となるつなぎ目 凹-->
<Joint_x>0</Joint_x>
<Joint_y>0</Joint_y>
<Joint_height>0</Joint_height>
<Joint_theta>0</Joint_theta>
</Joint>
<Joint num="01" dovetail="1"> <!-- もう一方のつなぎ目 凸-->
<Joint_x>216</Joint_x>
<Joint_y>0</Joint_y>
<Joint_height>0</Joint_height>
<Joint_theta>0</Joint_theta>
</Joint>
</Joints>
<img src="" alt="直線レール"> <!-- レールの表示用画像 -->
<Offset_x>0</Offset_x> <!-- 表示用のパラメータ レールの基準点が表示用画像のどこなのか -->
<Offset_y>19</Offset_y> <!-- 表示用のパラメータ レールの基準点が表示用画像のどこなのか -->
</Rail>

<Rail num="02" reversible="yes"> <!-- 曲線レールの定義 表裏使用可 -->
<Rail_name>曲線レール</Rail_name>
<Rail_code_JAN>4904810108108</Rail_code_JAN>
<Rail_material_JISK6899>PP</Rail_material_JISJISK6899>
<Rail_material_name>ポリプロピレン</Rail_material_name>
<Joints>
<Joint num="00" dovetail="-1"> <!-- 基準点となるつなぎ目 凹-->
<Joint_x>0</Joint_x>
<Joint_y>0</Joint_y>
<Joint_height>0</Joint_height>
<Joint_theta>0</Joint_theta>
</Joint>
<Joint num="01" dovetail="1"> <!-- もう一方のつなぎ目 凸-->
<Joint_x>152.735064736294</Joint_x>
<Joint_y>-63.264935263706</Joint_y>
<Joint_height>0</Joint_height>
<Joint_theta>315</Joint_theta>
</Joint>
</Joints>
<img src="" alt="曲線レール"> <!-- レールの表示用画像 -->
<Offset_x>0</Offset_x> <!-- 表示用のパラメータ レールの基準点が表示用画像のどこなのか -->
<Offset_y>19</Offset_y> <!-- 表示用のパラメータ レールの基準点が表示用画像のどこなのか -->
</Rail>

<Rail num="03" reversible="yes"> <!-- 8の字ポイントレール(L)の定義 表裏使用可 -->
<Rail_name>8の字ポイントレール(L)</Rail_name>
<Rail_code>4904810111207L</Rail_code>
<Rail_code_JAN>4904810111207</Rail_code_JAN>
<Rail_material_JISK6899>PE</Rail_material_JISJISK6899>
<Rail_material_name>ポリエチレン</Rail_material_name>
<Joints>
<Joint num="00" dovetail="1"> <!-- 基準点となるつなぎ目 凸-->
<Joint_x>0</Joint_x>
<Joint_y>0</Joint_y>
<Joint_height>0</Joint_height>
<Joint_theta>0</Joint_theta>
</Joint>
<Joint num="01" dovetail="1"> <!-- 右曲がりのつなぎ目 凸-->
<Joint_x>152.735064736294</Joint_x>
<Joint_y>-63.264935263706</Joint_y>
<Joint_height>0</Joint_height>
<Joint_theta>315</Joint_theta>
</Joint>
<Joint num="02" dovetail="-1"> <!-- 左曲がりのつなぎ目 凹-->
<Joint_x>152.735064736294</Joint_x>
<Joint_y>63.264935263706</Joint_y>
<Joint_height>0</Joint_height>
<Joint_theta>45</Joint_theta>
</Joint>
</Joints>
<img src="" alt="8の字ポイントレール(L)"> <!-- レールの表示用画像 -->
<Offset_x></Offset_x> <!-- 表示用のパラメータ レールの基準点が表示用画像のどこなのか -->
<Offset_y></Offset_y> <!-- 表示用のパラメータ レールの基準点が表示用画像のどこなのか -->
</Rail>

<Rail num="04" reversible="yes"> <!-- 8の字ポイントレール(R)の定義 表裏使用可 -->
<Rail_name>8の字ポイントレール(R)</Rail_name>
<Rail_code>4904810111207R</Rail_code>
<Rail_code_JAN>4904810111207</Rail_code_JAN>
<Rail_material_JISK6899>PE</Rail_material_JISJISK6899>
<Rail_material_name>ポリエチレン</Rail_material_name>
<Joints>
<Joint num="00" dovetail="-1"> <!-- 基準点となるつなぎ目 凹-->
<Joint_x>0</Joint_x>
<Joint_y>0</Joint_y>
<Joint_height>0</Joint_height>
<Joint_theta>0</Joint_theta>
</Joint>
<Joint num="01" dovetail="1"> <!-- 右曲がりのつなぎ目 凸-->
<Joint_x>152.735064736294</Joint_x>
<Joint_y>-63.264935263706</Joint_y>
<Joint_height>0</Joint_height>
<Joint_theta>315</Joint_theta>
</Joint>
<Joint num="02" dovetail="-1"> <!-- 左曲がりのつなぎ目 凹-->
<Joint_x>152.735064736294</Joint_x>
<Joint_y>63.264935263706</Joint_y>
<Joint_height>0</Joint_height>
<Joint_theta>45</Joint_theta>
</Joint>
</Joints>
<img src="" alt="8の字ポイントレール(R)"> <!-- レールの表示用画像 -->
<Offset_x></Offset_x> <!-- 表示用のパラメータ レールの基準点が表示用画像のどこなのか -->
<Offset_y></Offset_y> <!-- 表示用のパラメータ レールの基準点が表示用画像のどこなのか -->
</Rail>

<Rail num="05" reversible="no"> <!-- ニュー踏切の定義 表裏使用不可-->
<Rail_name>ニュー踏切</Rail_name>
<Rail_code_JAN>4904810150862</Rail_code_JAN>
<Rail_material_JISK6899>PS,PP</Rail_material_JISJISK6899>
<Rail_material_name>ポリスチレン、ポリプロピレン</Rail_material_name>
<Joints>
<Joint num="00" dovetail="-1"> <!-- 基準点となるつなぎ目 凹-->
<Joint_x>0</Joint_x>
<Joint_y>0</Joint_y>
<Joint_height>0</Joint_height>
<Joint_theta>0</Joint_theta>
</Joint>
<Joint num="01" dovetail="1"> <!-- もう一方のつなぎ目 凸-->
<Joint_x>216</Joint_x>
<Joint_y>0</Joint_y>
<Joint_height>0</Joint_height>
<Joint_theta>0</Joint_theta>
</Joint>
</Joints>
<img src="" alt="ニュー踏切"> <!-- レールの表示用画像 -->
<Offset_x></Offset_x> <!-- 表示用のパラメータ レールの基準点が表示用画像のどこなのか -->
<Offset_y></Offset_y> <!-- 表示用のパラメータ レールの基準点が表示用画像のどこなのか -->
</Rail>

</Rail_types>

<Pier_types> <!-- 橋脚を定義するブロック -->
</Pier_types>

<Sceneries> <!-- その他の情景部品を定義するブロック -->
<Scene_parts num="01"><Name>信号機</Name></Scene_parts>
<Scene_parts num="02"><Name>立木</Name></Scene_parts>
</Sceneries>

</Layout_elements>

<Location> <!-- 配置を定義するブロック -->

<Location_rails> <!-- レールとレール付き情景部品の配置を定義するブロック -->

<!-- 直線レール、X:0、Y:0、0度、表 -->
<Rail_location reverse="no">
<Type_no>01</Type_no>
<Nodes>
<Node num="00">
<Node_x>0</Node_x>
<Node_y>0</Node_y>
<Node_theta>0</Node_theta>
<Node_height>0</Node_height>
</Node>
<Node num="01">
<Node_height>0</Node_height>
</Node>
</Nodes>
</Rail_location>

<!-- 曲線レール、X:216、Y:0、0度、表 -->
<Rail_location reverse="no">
<Type_no>02</Type_no>
<Nodes>
<Node num="00">
<Node_x>216</Node_x>
<Node_y>0</Node_y>
<Node_theta>0</Node_theta>
<Node_height>0</Node_height>
</Node>
<Node num="01">
<Node_height>0</Node_height>
</Node>
</Nodes>
</Rail_location>

<!-- 曲線レール、X:368.735064736294、Y:-368.735064736294、225度、表 -->
<Rail_location reverse="no">
<Type_no>02</Type_no>
<Nodes>
<Node num="00">
<Node_x>368.735064736294</Node_x>
<Node_y>-368.735064736294</Node_y>
<Node_theta>225</Node_theta>
<Node_height>0</Node_height>
</Node>
<Node num="01">
<Node_height>0</Node_height>
</Node>
</Nodes>
</Rail_location>

<!-- 曲線レール、X:0、Y:-432、180度、表 -->
<Rail_location reverse="no">
<Type_no>02</Type_no>
<Nodes>
<Node num="00">
<Node_x>0</Node_x>
<Node_y>-432</Node_y>
<Node_theta>180</Node_theta>
<Node_height>0</Node_height>
</Node>
<Node num="01">
<Node_height>0</Node_height>
</Node>
</Nodes>
</Rail_location>

<!-- 曲線レール、X:-152.735064736294、Y:-368.735064736294、135度、表 -->
<Rail_location reverse="no">
<Type_no>02</Type_no>
<Nodes>
<Node num="00">
<Node_x>-152.735064736294</Node_x>
<Node_y>-368.735064736294</Node_y>
<Node_theta>135</Node_theta>
<Node_height>0</Node_height>
</Node>
<Node num="01">
<Node_height>0</Node_height>
</Node>
</Nodes>
</Rail_location>

<!-- 曲線レール、X:-216、Y:-216、90度、表 -->
<Rail_location reverse="no">
<Type_no>02</Type_no>
<Nodes>
<Node num="00">
<Node_x>-216</Node_x>
<Node_y>-216</Node_y>
<Node_theta>90</Node_theta>
<Node_height>0</Node_height>
</Node>
<Node num="01">
<Node_height>0</Node_height>
</Node>
</Nodes>
</Rail_location>

<!-- 曲線レール、X:-152.735064736294、Y:-63.264935263706、45度、表 -->
<Rail_location reverse="no">
<Type_no>02</Type_no>
<Nodes>
<Node num="00">
<Node_x>-152.735064736294</Node_x>
<Node_y>-63.264935263706</Node_y>
<Node_theta>45</Node_theta>
<Node_height>0</Node_height>
</Node>
<Node num="01">
<Node_height>0</Node_height>
</Node>
</Nodes>
</Rail_location>

<!-- 曲線レール、X:495.264935263706、Y:-63.264935263706、45度、表 -->
<Rail_location reverse="no">
<Type_no>02</Type_no>
<Nodes>
<Node num="00">
<Node_x>495.264935263706</Node_x>
<Node_y>-63.264935263706</Node_y>
<Node_theta>45</Node_theta>
<Node_height>0</Node_height>
</Node>
<Node num="01">
<Node_height>0</Node_height>
</Node>
</Nodes>
</Rail_location>

<!-- 曲線レール、X:648、Y:0、0度、表 -->
<Rail_location reverse="no">
<Type_no>02</Type_no>
<Nodes>
<Node num="00">
<Node_x>648</Node_x>
<Node_y>0</Node_y>
<Node_theta>0</Node_theta>
<Node_height>0</Node_height>
</Node>
<Node num="01">
<Node_height>0</Node_height>
</Node>
</Nodes>
</Rail_location>

<!-- 曲線レール、X:800.735064736294、Y:-63.264935263706、315度、表 -->
<Rail_location reverse="no">
<Type_no>02</Type_no>
<Nodes>
<Node num="00">
<Node_x>800.735064736294</Node_x>
<Node_y>-63.264935263706</Node_y>
<Node_theta>315</Node_theta>
<Node_height>0</Node_height>
</Node>
<Node num="01">
<Node_height>0</Node_height>
</Node>
</Nodes>
</Rail_location>

<!-- 曲線レール、X:864、Y:-216、270度、表 -->
<Rail_location reverse="no">
<Type_no>02</Type_no>
<Nodes>
<Node num="00">
<Node_x>864</Node_x>
<Node_y>-216</Node_y>
<Node_theta>270</Node_theta>
<Node_height>0</Node_height>
</Node>
<Node num="01">
<Node_height>0</Node_height>
</Node>
</Nodes>
</Rail_location>

<!-- 曲線レール、X:800.735064736294、Y:-368.735064736294、225度、表 -->
<Rail_location reverse="no">
<Type_no>02</Type_no>
<Nodes>
<Node num="00">
<Node_x>800.735064736294</Node_x>
<Node_y>-368.735064736294</Node_y>
<Node_theta>225</Node_theta>
<Node_height>0</Node_height>
</Node>
<Node num="01">
<Node_height>0</Node_height>
</Node>
</Nodes>
</Rail_location>

<!-- 曲線レール、X:648、Y:-432、180度、表 -->
<Rail_location reverse="no">
<Type_no>02</Type_no>
<Nodes>
<Node num="00">
<Node_x>648</Node_x>
<Node_y>-432</Node_y>
<Node_theta>180</Node_theta>
<Node_height>0</Node_height>
</Node>
<Node num="01">
<Node_height>0</Node_height>
</Node>
</Nodes>
</Rail_location>

<!-- 8の字ポイントレール(L)、X:432、Y:-216、90度、表 -->
<Rail_location reverse="no">
<Type_no>03</Type_no>
<Nodes>
<Node num="00">
<Node_x>432</Node_x>
<Node_y>-216</Node_y>
<Node_theta>90</Node_theta>
<Node_height>0</Node_height>
</Node>
<Node num="01">
<Node_height>0</Node_height>
</Node>
<Node num="02">
<Node_height>0</Node_height>
</Node>
</Nodes>
</Rail_location>

<!-- 8の字ポイントレール(R)、X:432、Y:-216、270度、表 -->
<Rail_location reverse="no">
<Type_no>04</Type_no>
<Nodes>
<Node num="00">
<Node_x>432</Node_x>
<Node_y>-216</Node_y>
<Node_theta>270</Node_theta>
<Node_height>0</Node_height>
</Node>
<Node num="01">
<Node_height>0</Node_height>
</Node>
<Node num="02">
<Node_height>0</Node_height>
</Node>
</Nodes>
</Rail_location>

<!-- ニュー踏切、X:216、Y:-432、180度 -->
<Rail_location>
<Type_no>05</Type_no>
<Nodes>
<Node num="00">
<Node_x>216</Node_x>
<Node_y>-432</Node_y>
<Node_theta>180</Node_theta>
<Node_height>0</Node_height>
</Node>
<Node num="01">
<Node_height>0</Node_height>
</Node>
</Nodes>
</Rail_location>

</Location_rails>

<Location_piers> <!-- 橋脚の配置を定義するブロック -->
</Location_piers>

<Location_sceneries> <!-- その他の情景部品の配置を定義するブロック -->
</Location_sceneries>

</Location>

</Layout_plan>

« 半円っぽい並べ方 | トップページ | 電池の悩み »

プラレールの憂鬱」カテゴリの記事

トラックバック


この記事へのトラックバック一覧です: レイアウトプランの表現と伝達:

« 半円っぽい並べ方 | トップページ | 電池の悩み »