仮想タイプライターを考える(その2)
仮想タイプライターを考える(その2)
まずはタイプ用紙(原型版)
前記事で書いた
【タイプ用紙は普通の長方形の紙】
・上下左右にマージン(印字できないスペース)があり、
・フィードしないで打てば、重ね打ちが可能で、
・スペースは単なるフィード(印字を消せる訳が無い)、
・文字を消すには、専用の消しゴムで手動消去
・タイプ中は用紙支えにもたれたように【たわみ】、
・取り出すと折り曲げ出来る柔らかい平面だけど、
・曲がった表面にはちゃんと印字がされている。
・上下左右にマージン(印字できないスペース)があり、
・フィードしないで打てば、重ね打ちが可能で、
・スペースは単なるフィード(印字を消せる訳が無い)、
・文字を消すには、専用の消しゴムで手動消去
・タイプ中は用紙支えにもたれたように【たわみ】、
・取り出すと折り曲げ出来る柔らかい平面だけど、
・曲がった表面にはちゃんと印字がされている。
のうち、とりあえず最初の3行からモデルを考える。
(上のガラクタ置き場のアプレットは、タイプされた文字をその場所に転写する。Enter/Returnでリボンチェンジ、ドラッグで用紙移動・・・・アプレットウィンドウをクリックしてP5を起こしてやってから試す事)
用紙の上にあるハンマーヘッドによる一つの転写像(文字)は
class TypedImage { char ch; //タイプされたときのキーの文字を、 PFont font; //タイプされたフォントフェースで、 color ink; //タイプされたときのリボンの色で、 Loc at; //タイプされた(紙との間の相対位置が変わらない)位置に、 //じっとしている。 //転写像を作るには、文字、フェース、色、用紙との相対位置を指定する TypedImage(char c, PFont f, Loc p, color c) //文字、フォント、色、用紙との相対位置を覚える //転写像に対する操作は、 void draw() //描けと言われれば、覚えた位置に覚えた形と覚えた色で転写像(文字)を描く }
タイプライター用紙を上下左右に動かすと、定着された一つ以上の文字は用紙の動きにあわせて動く。(なので、紙の上に印刷されているように見える??)
class TypingPaper{ float width,height; //長方形で color col; //淡いセピア色(の予定。ムラが出れば良いけど、まだ)で、 TypedList tlist = new TypedList(); //複数の転写像の入れ物(コンテナ)を持つ //ただし、入れ物は、 private class TypedList extends LinkedList { //汎用の入れ物なんだけど、 void add(TypedChar ch) //転写像の実体だけを覚えられる TypedChar get(int idx) //転写像の実体を思い出せる } //用紙を作るには、用紙色、高さ、幅を指定する TypingPaper(color pc, float ph, float pw) //用紙に対する操作は、 void erase() //全ての転写像を消す(きれいな用紙にする) void typeIn(char c, Loc at, PFont font, float fsize, color ribbon) //新しい転写像を記憶に加える void draw() { //描けと言われれば rect(x,y,width,height); //用紙を描いて for (int i=0;i<tlist.size();i++) { //覚えている転写像をありったけ tlist.get(i).draw(); //復元する } } }