忍者ブログ

首都圏鉄道案内所

首都圏鉄道案内所のブログです。防災無線の収録記や、鉄道関連の小ネタなどを掲載します。日比谷が適当に書くことも。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

トレインビジョンメーカー(9)

こんにちは、日比谷です。

今回は乗り換え案内等を作成しました。内容は動画を観ていただくとしてここでは誰でもトレインビジョン内部のプログラムのお話を概要だけしてみます。


乗り換え案内の表示で行っている事は乗り換え路線名を設定順に左詰めで表示する事です。これを行っているプログラムは赤字の箇所です。(以下、プログラムコードに関する参照箇所は単に「赤字」等とする)ただし、この方法では路線名が長い場合に表示が画面外まで及ぶ事があります(図①参照)そこで、表示が画面外に及ぶかどうかを判定して(青字)別々の処理を行います。
表示が画面外に及ぶ場合は、画面外となってしまうサイズを計算します。そしてそのサイズ等分して各乗り換え路線の表示を縮小します。(図②参照)(緑字)
しかし、この方法にも問題があります。一つだけ極端に長い路線名と短い路線名が混在する場合に縮小幅が短い路線名のサイズよりも大きくなるのです。(図③、図④参照)
これを防ぐために、路線名の縮小サイズに制限を設けました。具体的には日本語2文字分を最小サイズとしてそれ以下の縮小を行わないようにしました。ただ、これでは制限により縮小サイズに余りが生じます。そこで、余った縮小サイズを等分して残りの路線名の縮小サイズに追加させます。(図⑤参照)(橙字)
これで問題なく乗り換え路線名が表示できます。

ざっくりとでしたがこんな感じでプログラムを作っています。起こりうる全パターンを考えて作らなければならない事が面倒くさいですね。それでも読み込むデータはXMLである程度固定しているのでまだ楽ですが・・・


  public void transfer() {
    int sumWidth = rate(190);
    int count = 0;
    int x = rate(190);
    //乗り換え路線数の取得
    for (int i=0; i<5; i++) {
      if (transferExist(i)) {
        count++;
      }
      else {
        break;
      }
    }
    //乗り換え表示の幅が画面サイズを越える場合は縮小、超えない場合はそのまま並べる
    for (int i=0; i<count; i++) {
      sumWidth += transNameWidth(i);
    }
    if (sumWidth > xmlData.getSize()) {
      int[] sub = new int[5];
      int notOverCount = count;
      int tmpSize = 0;
      boolean over = true; 
      for (int i=0; i<count; i++) {
        sub[i] = transNameWidth(i) - ((sumWidth - xmlData.getSize()) / count ) - rate(81);
      }
      while (over) {
        for (int i=0; i<count; i++) {
          if (sub[i] != rate(88)) {
            sub[i] -= tmpSize / notOverCount;
          }
        }
        over = false;
        for (int i=0; i<count; i++) {
          if (sub[i] < rate(88) && notOverCount > 1) {
            tmpSize = rate(88) - sub[i];
            sub[i] = rate(88);
            notOverCount--;
            over = true;
            break;
          }
        }
      }
      for (int i=0; i<count; i++) {
        transferView(i, x, 590, sub[i], transNameHeight(i));
        x += sub[i] + rate(81);
      }
    }
    else {
      for (int i=0; i<count; i++) {
        transferView(i, x, 590, transNameWidth(i) - rate(81), transNameHeight(i));
        x += transNameWidth(i);
      }
    }
  }






拍手[0回]

PR

トレインビジョンメーカー(8)

こんにちは、日比谷です。

今回はホームの停車位置の案内を作成しました。
デザインはメトロ15000系と東急5050系のものを足して2で割ったものになっています。
次回はホーム上の階段の位置や出口名等の案内を実装したいのですが、どのようにそれらをXMLで表現しようか悩んでいます。ややこしい事になりそうです(´・ω・`)

これまでに描いたコードの行数が7000行に達しました。
設計書があるわけでもないので作った自分自身でも「この部分は何をしているんだろう」と迷う箇所がぽつぽつでてきて困っています。(コメントを書かない自業自得)

ソフトを公開するにあたりwiki的な説明書をweb上にあげる必要があると思うのですがそれを作るだけで一ヶ月くらい時間を取られそうです・・・

拍手[2回]

トレインビジョンメーカー(7)

一日で二回これを書くのも変な感じですね。
トレインビジョンメーカーの定期報告です。

今回は以前指摘いただいた種別表示の修正を行いました。
行き先表示と同様に次駅が終着駅の場合は種別が表示されなくなりました。
他にはホームの案内で入線してくる電車のCGを書き直し内部のプログラムを少し書いただけです。

ごめんなさい。今回はホームページのメンテナンス(スマホの件)に時間を割り振っていたのでほとんど作業できてないです。

拍手[2回]

トレインビジョンメーカー(6)

こんにちは、日比谷です。

今回は
 種別の表示
 路線図の方向の左右対応
 乗り換え案内のマーク追加
 ナンバリングロゴ有無の選択
 直通先路線名の表示
 ソフト自体の軽量化・バグの修正
とたくさん更新できました。

ひとまずトレインビジョンのメイン機能は完成ました。(一部本日の更新に間に合わず未実装)
次回からはホームの案内から追加していこうかなと思います。



拍手[3回]

トレインビジョンメーカー(5)

こんにちは、日比谷です。

今回は路線図における乗り換え案内の表示を追加しました。
詳細は以下の通りです。

・XMLに乗り換え路線の情報を設定する項目を追加した。設定できる項目は下記の通り。
  1.路線のアイコン(ナンバリングロゴか鉄道マーク)
  2.路線のラインカラーと路線記号(アイコンが鉄道マークの場合は反映されない)
  3.路線の名前(日本語表記、英語表記)
  4.異名乗換駅の場合の駅名(赤坂見附⇔永田町駅のような場合)
・路線図の上部に乗り換え路線の案内を表示させる。(1駅につき最大5つ)
・乗り換えの表示は下段から詰めて表示される。
・終着駅の先の路線図を薄くする。
・画面右下に「運転状況により多少時間は異なります」の文言。


ようやくトレインビジョンっぽくなってきましたね。次回は内部の処理の修正をいくつか加える予定です。内部処理の微調整なので表示される結果としては今回と何ら変わりないです。
後、忘れていた種別の表示は実装しますよ!

拍手[0回]

カレンダー

03 2024/04 05
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

最新CM

[01/16 NONAME]
[09/12 横浜特快]
[09/12 横浜特快]
[08/18 Miz]
[07/18 こな]

ブログ内検索

P R

カウンター