本記事は、株式会社 函館ラボラトリが運営する「Bラボ」における、大人向け「看板アプリ(デジタルサイネージ)を作るコース」用教材テキストです。
- 【Bラボデジタルサイネージ1】Processing+ラズパイでデジタルサイネージを作る!
- 【Bラボデジタルサイネージ2】ラズパイ初期設定
- 【Bラボデジタルサイネージ3】準備プログラム作成&機能実現の方針決定
- 【Bラボデジタルサイネージ4】レイアウトの基準になるグリッドを表示する「GridModule」
- 【Bラボデジタルサイネージ5】レイアウトの基準になる枠を表示する「PlaceholderModule」(本記事)
- 【Bラボデジタルサイネージ6】画像を全画面表示する「FullImageModule」
- 【Bラボデジタルサイネージ7】ページの自動切り替え
- 【Bラボデジタルサイネージ8】設置されている場所の名前を表示する「LocationModule」
- 【Bラボデジタルサイネージ9】現在の時間を表示する「DateModule」
- 【Bラボデジタルサイネージ10】ページ切り替えの時間が分かる「ProgressBarModule」
- 【Bラボデジタルサイネージ11】現在の表示中のページが分かる「PageControlModule」
- 【Bラボデジタルサイネージ12】現在の天気を表示する「WeatherRModule」
- 【Bラボデジタルサイネージ13】直近2件のバス時刻表を表示する「BusRModule」
- 【Bラボデジタルサイネージ14】ごみ出しカレンダーを表示する「GomiRModule」
- 【Bラボデジタルサイネージ15】(発展編)ツイートを表示する「TwitterRModule」
- 【Bラボデジタルサイネージ16】開店/閉店を表示する「OpenCloseRModule」
- 【Bラボデジタルサイネージ17】部屋の温度を表示する「TemperatureRModule」
- 【Bラボデジタルサイネージ18】部屋の明るさを表示する「BrightnessRModule」
- 【Bラボデジタルサイネージ19】起動画面を表示する「LaunchingScreenModule」
- 【Bラボデジタルサイネージ20】RModuleの影を実装
作るもの
モジュールを配置する場所の「枠」を表示できるようにします。
完成後は下図のような枠が表示されます。
モジュールの高さと幅を定める
モジュール(RM)の大きさは「S」「M」「L」の三段階に定義します。
下図の「角丸四角」1個を大きさの単位として説明します。
完成時のスクリーンショットを例にします。
- Sにあたるのが「室温」「明るさ」の部分で、「角丸四角」1個分
- Mにあたるのが「現在の天気」の部分で、「角丸四角」2個分
- Lにあたるのが「函館バス」の部分で、「角丸四角」4個分
以降、「S」「M」「L」は、角丸四角がそれぞれ1、2、4個分と覚えておいてください。
このサイズをあらわすプログラムを書きます。
enum(列挙型)を使い、3つのサイズを列挙します。
enum Size {
S,
M,
L
}
定義したサイズを使い、モジュールの幅や高さをあらわす関数を定義します。
まずはモジュールの幅から定義します。
/* 略 */
int moduleWidth(Size size) {
if (size == Size.S) return 405;
if (size == Size.M || size == Size.L) return 850;
return 0;
}
同様に高さも定義します。
/* 略 */
int moduleHeight(Size size) {
if (size == Size.S || size == Size.M) return 400;
if (size == Size.L) return 830;
return 0;
}
定義した関数moduleWidth
とmoduleHeight
を使い、枠を作ります。
「GridModule」のときと同様に、「PGraphics」を使います。
枠の生成と表示
枠をあらわす変数を宣言します。
PGraphics grid;
PGraphics placeholder; /* 追加 */
/* 略 */
角丸の四角を描画するため、角の丸さを定義します。
PGraphics grid;
PGraphics placeholder;
final int MODULE_RECT_ROUND = 30; /* 追加 */
/* 略 */
MODULE_RECT_ROUND
は、角丸の四角を描画するときに、関数rect
の第5引数で使います。
rect(0, 0, 100, 100, MODULE_RECT_ROUND);
Initialize.pde
内に、枠作成用の新しい関数を作ります。
/* 略 */
void initializePlaceholder() {
}
この関数をinitialize()
内で呼び出すようにします。
void initialize() {
initializeGrid();
initializePlaceholder(); /* 追加 */
}
/* 略 */
これで、枠を生成する処理はinitializePlaceholder()
内に追記すれば良い状態になりました。
再掲しますが、initializePlaceholder()
で生成したい画像は下図です。
この画像を生成する処理を書きます。
/* 略 */
void initializePlaceholder() {
placeholder = createGraphics(width, height);
placeholder.beginDraw();
placeholder.colorMode(HSB, 360, 100, 100, 100);
for (Area area: Area.values()) {
// モジュール配置エリアに角丸四角の枠を描く
placeholder.noFill();
placeholder.stroke(0, 0, 50);
placeholder.strokeWeight(5);
placeholder.rect(layoutGuideX(area), layoutGuideY(area),
moduleWidth(Size.S), moduleHeight(Size.S),
MODULE_RECT_ROUND);
}
placeholder.endDraw();
}
for文(拡張for文と呼ぶ)を使うことでエリアの個数回(8回)処理を繰り返され、グレーの枠が8つ描画されています。
枠は「S」サイズを基準に描画されています。
続いて、枠を表示する処理を作ります。
PlaceholderModule用の新しいファイルM_Placeholder.pde
を作ってください。
その中に関数drawPlaceholderModule()
を作ります。
void drawPlaceholderModule() {
image(placeholder, 0, 0);
}
関数image
を使い、すでに生成してあるplaceholder
を描画する関数です。
あとはこのdrawPlaceholderModule()
を呼び出すようにすれば、枠が表示されるようになります。
/* 略 */
void draw() {
background(0, 0, 100);
drawGridModule();
drawPlaceholderModule(); /* 追加 */
}
/* 略 */
ここまで記述したら、一度実行してみましょう。
下図のように出力されれば成功です。
最後に
これでグリッドと枠まで表示できるようになりました。
次は、**画像を全画面表示する「FullImageModule」**を作ってみましょう。