空間アイディアパッド 設計初期段階におけるデジタルツールの研究

Page 1

§ 0 はじめに モニターの前に座り、マウスをクリックして、メニューを選択して建 築を考える。 最後にレンダリングを行えば、本物よりも本物らしい画像が出来上が るレンダリング。 日々機能が増える CAD。 3Dであったりオブジェクト指向であったりと、 様々なことができるよ うになっていく反面、使いこなすまでに時間がかかり、思い通りに建 物を作れずなかなか考えが発展しない。 そのようなCADソフトを使う内、 もっと機能は少なくてもいいから簡 単で手軽にどこでも使える建築を考えるソフトが欲しい、と感じたこ とが本論文のきっかけとなった。

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

1


目次 § 0 はじめに ........................................................................ 1 § 1 序論 ........................................................................ 3   § 1.1 研究背景 ............................................................... 4   § 1.2 研究目的 ............................................................... 7 § 2 ソフトの設計と制作....................................................... 8   § 2.1 機能の抽出 ........................................................... 9   § 2.2 プラットフォームの選定 .................................... 14   § 2.3 操作方法の設計とソフトの制作 ........................ 16 § 3 ソフトのマニュアル ...................................................... 19   § 3.1 コンセプト ........................................................... 20   § 3.2 操作方法 ............................................................... 22 § 4 考察 ........................................................................ 31   § 4.1 ソフトの理念 ....................................................... 32 § 4.2 メリット ............................................................... 36   § 4.3 未実装機能 ........................................................... 38   § 4.4 PDA の未来像とソフトの可能性 ....................... 40 § 5 おわりに ........................................................................ 41 § 6 参考文献 ........................................................................ 42 § 7 付録 ........................................................................ 43   § 7.1 プラットフォームの説明 .................................... 44   § 7.2 スケッチの調査を行った建築家一覧................. 46 § 7.3 付属 CD-ROM の使い方 ..................................... 47   § 7.4 GPS の付け方 ...................................................... 50 § 7.5 ソースコードの説明 ............................................ 52

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

2


§ 1 序論

1.1 研究背景

1.2 研究目的

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

3


§ 1.1 研究背景 設計は創造的作業と言われるが、その全ての行為が創造的であるわけ ではない。定規で線を引いたり、コンパスで円を描いたり、ある部分 を消したり、又は既に他のところに描かれてある図形を単にコピーす ることも設計作業には含まれる。重量や容積の計算、応力値の決定な どを行うこともあろうが、これらの行為は、想像に関する機械的行為 である。設計には創造的な行為と、機械的な行為とが交錯して現れる。

また設計においては、図形を扱うことが非常に多い。設計者は紙上に 簡単なスケッチを書くことにより自分の考えを確かめる。繰り返し図 形を描いたり、消したりして考えをまとめ、図形は最終的なものに固 まってゆき、最後には三面図の形式で正作図が作られて設計は完成す る。すなわち、設計は図形とともに始まり、図形とともに進展し、図 形の完成により設計も完了する。設計において図形の果たす役割はじ つに大きい。人は、特に二次元的な図形に慣れ親しんでいる。容易に 図を描いてアイディアを確認できる。相互の関係も図に描いて表現す ると分かりやすい。図によって全体のバランスを調べ、総合的な判断 をおこなっている。設計に付随するこれらの特有な行為を、コン ピュータの力によってどのように強化出来るのであろうか。

それが 1950 年代後半に MIT の学生 Sutherland が考案し、現在の CAD や 3D ソフトの原形ともなる「スケッチパッドシステム」理念であっ た。Sutherland の「スケッチパッドシステム」以来、CAD システムは 着実に発展し、大衆へと普及していった。

パーソナルコンピュータの性能の向上は、設計初期段階におけるエス キースを手軽に仮想三次元空間内で自由に立体を編集しながら行うと いうことを可能にした。CAD は、今まで相当の時間をかけて行ってい

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

4


た模型製作の代用としても用いられるようになり、製図作成段階だけ にとどまらず設計のあらゆる段階、場面に導入されるようになって いった。

以前までは、そういったシステム化のほとんどが局所的な効率化を目 指したもので、導入されたそれぞれの部門の成果品を効率良く作成す ることには役立ちながらも、大半が「紙」にプリントされたものを介 した無駄の多い業務プロセスを築くのみであった。しかし現在、その 無駄の多いプロセスを、全産業の共通のデータを共有することにより 産業ごとのクローズドなやり取りではなく、全産業におけるグローバ ルなデータ交換を可能にし、業務プロセス全体の短縮が行われつつあ る。

そのような状況の中で、現地に赴きその場の空気を肌で感じながら思 い付いたことを書き留め、アイディアを発展させ設計プロセスの一部 となるデジタル設計支援ツールは未だ存在しない。 その理由として考えられることは今までの携帯用のコンピュータの計 算能力が低かったり、それらが想定する主な仕様方法がスケジュール 管理などで、開発用の提供されているグラフィック関連のライブラリ が非常に貧弱であることや、 カラーが扱えないことにあると思われる。 現在は現場での設計活動はスケッチを描く、若しくは写真を撮り現像 したものを元にCADに入力→発展させていく形がほとんどで、 前述の 「無駄の多いプロセス」となっている。

近年PDAと呼ばれる携帯性に優れたデジタルツールの発展がめざまし い。PDA とは Personal Digital Assistant の略で、個人の知的活動を支援 する手のひらに乗るような大きさの情報機器の事である。1992 年,米

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

5


アップル・コンピュータの当時のCEOであったジョン・スカリー が提唱した概念である。 レストランでナプキンにメモを書いてい る人をみたスカリーが PDA のコンセプトを思い付いたのは有名 な話である。 そのエピソードからもわかるように何処にいてもす ぐに取りだし、すぐに使えることが重要なコンセプトである。 現在,PDA は一般的な名称になり,日本では「携帯情報端末」と 訳されている。日本における代表的な PDA には,シャープのザ ウルスがある。一般的な PDA のイメージは,タッチパネル・タ イプの大型液晶を持ち,PIM 機能や通信機能を備え,ペンにより データ入力や操作が行なえる手帳型の小型コンピュータ, という ものである。しかし,最近では,大型のキーボードを搭載したも のや,携帯電話・PHS と一体化したものなども PDA と呼ばれる ようになった。名刺サイズの電子手帳や,ミニノート型と呼ばれ るパソコンを指して PDA ということもあり、種類も豊富になっ てきている。 それと同時に演算装置の高速化と記憶容量の増大が 図られ、数年前までは考えられなかったような処理が可能とな り、様々な用途、場合に使用される可能性が高まりつつあり、同 時に将来の発展も多いに期待される。 現場で歩きながら使うためのデジタル設計支援ツールは、 携帯型 コンピュータの存在自体が一般的でなかったり存在を認知されて いたとしてもその計算処理能力の低さから、 今まで作られること は無かった。しかし、技術の発展は実用的なツールの可能性を高 めた。

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

6


§ 1.2 研究目的 現地調査に赴き、写真等だけでは行うことが難しい、感じたことや周 囲の環境の特性を考慮しながらのボリュームスタディを行うための次 世代型 CAD ツールを開発し、その可能性を明らかにする。

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

7


§ 2 ソフトの設計と制作 ソフトのインターフェイス決定のために、 「設計予定地に赴き、その周 辺環境を考慮しながら設計を行う。 」という使用場面を想定し、その場 面では何が必要かを選定する作業を行った。 選定作業後、それをもとにソフトの制作を行った。

2.1- 機能の抽出 2.1.1 スケッチ / ドローイング調査 2.1.2 その他の事象から機能を抽出

2.2- プラットフォームの選定

2.3 操作方法の設計と制作 2.3.1 基本機能 2.3.2 インターフェース 2.3.3 画面のレイアウト 2.3.4 ソフトの制作

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

8


§ 2.1 機能の抽出 2 . 1 . 1 スケッチ / ドローイング調査 設計初期段階におけるスケッチ / ドローイングの重要性 建築家は、無数のドローイングを他人に見せるためにではなく、自分 の為に描いていると言われている。図面とは、他人に構想を伝えるた めに描かれるものだと、一般的には考えられているかもしれない。し かし、そういった目的の為に描かれる図面は、建築家の作る数多いド ローイングの一部にすぎない。依頼主に構想を示すための「プレゼン テーション・ドローイング」や、施工者に指示を与えるための「実施 設計図面」は、確かに建築家の構想を他の人に伝えるためのものとい えるが、これらのドローイングですら建築家は、次のスタディの素材 として用いるのが普通であって、その意味からは、これらのドローイ ングもまた常に自分の為のものでもある。

建築家は考えたものを 「かたち」 に示していると言うよりは、 「かたち」 によって考えているのである。レオナルド・ダ・ヴィンチが「私は手 と目によって思考する」と言ったのは、まさにそのことである。建築 家のドローイングに描かれている形は、思考の結果と言うよりは、む しろ思考の道具である。

建築を設計することは、 どういう行為なのであろうか。 通常それは、 与 えられた条件、すなわち敷地や、面積規模の条件、使用上の様々な要 求に対する解答として、形を作ることだと考えられているかもしれな い。これは必ずしも間違ってはいないが、十分正しいとは言いがたい。 というのは、ここにおいても、形は、最終的な解答であるだけでなく、 条件を理解し、構成し、組み立て直すための道具でもあるからである。

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

9


描くことによって与えられた設計条件をひとまず理解した建築家は、 その描かれた形の中に、与えられた条件以上の様々な可能性を見いだ す。そして、それを具体化する形を更に求めて、設計条件を組み立て 直し、新たな形を描く。ルイス・カーンは、様々な言葉で「与えられ たプログラム(設計条件)を、そのまま絶対化して奉っている建築家 は、建築家とは言えない。真の建築家は、それを組み建て直し、依頼 主が未だ明らかに知ることが出来ないでいることを、明らかにとらえ ていなければいけない。 」といっている。

建築家が鉛筆を取り上げて紙に向かうとき、その頭の中に、ある形の イメージが存在している。しかし、それは、丁度浮き上がってくる雲 のように、輪郭は定かではない。それは動き、変化し、かつ重なり合っ ている。建築家は、それに一つの、はっきりと定まった輪郭を与えよ うとする。それがスケッチである。

描くことは、つらい作業でもある。想像力の中に、平和に憩っている イメージを、切り刻み、あるものを捨てることによって、あるものを 取りださねばなら無いことでもあるからである。それは、決断と勇気 を必要とする残酷な作業でもある。想像力の甘い花園の中に、何時ま でも遊んでいることが出来たら、と望んでも、創る人間にはそれが許 されないのである。

必要視点の決定 インターフェイスを決定する際に、ボリュームの入力、編集と評価を 行うために必要な視点や機能を抽出するため既存の建築家のスケッチ の調査・分類を行った。 (調査を行った建築家については§7.2「スケッ チの調査を行った建築家一覧」参照)

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

10


調査方法 建築家のスケッチが掲載されている本から、そのスケッチを ・ 「上面からのパース・アクソメ」 ・ 「立面、視線からのパース・アクソメ」 ・ 「平面図」 ・ 「その他」 の 4 種類に分類し、その割合を出した。 その際、以下の条件を定めた。

「スケッチはすべてフリーハンドを対象とし、 定規を使って描かれたも のはカウントしない」 「同じ建物の平面図で、 階高が違う複数のスケッチは一つとカウントす る。 」 「同じ建物の立面図で、 方角が違う複数のスケッチは一つとカウントす る。 」 「同じ建物のスケッチで、新 たなアイディアのものは それぞれカウントする。 」

調査結果 172人の建築家の1674点のス ケッチを調査し、 その分類は (図 2-1)の様になった。

建築家のスケッチ分類(図 2-1)

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

11


調査結果考察 グラフから、建築家は上面から見た図と立面、立面パースから描く事 が多いと分かった。 また、描いた位置と日時を記載してあるものも数多く見受けられた。 スケッチ中に風の流れや光の注ぎ具合等形以外の要素を書き込んでい る例も多く見られた。 (場所・日時・記載の割合は、調査した本に全てのスケッチが完全に掲 載されずに紙の端を省略している場合が多く、省略された場所に記載 されている場合も考慮し、あえてださなかった。 )

2 . 1 . 2 その他の事象から機能を抽出 設計者の意見によると、現場では分かりにくい事を計算してくれる機 械は有効なツールとなる。 その例として、以下に挙げる。 ・法的規制の自動計算。 ・実際の視点で、建物の大きさがどのくらいならば、背景にどういっ た影響が与えられるか、等の検証。 ・スケッチや写真をとった正確な位置の記録。

従来のCADシステムの基本的な操作から基本的な機能を本ソフトの製 作時に参考とした。その例を以下にあげる。 ・CAD ではある一つの塊がひとつのオブジェクトとして認識される。 ・オブジェクトを何個も作ることにより建築を形成する。 ・オブジェクト作成は、オブジェクトの端点となるべき場所をクリッ クすることにより行う。 ・高さはマウスをドラッグするソフトや数値入力によるものなど様々 である。

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

12


・また一旦作成したオブジェクトを編集するにはオブジェクトを選択 した後に行う。 ・オブジェクトに穴(窓等)をあける際は、選択してから穴の大きさ を指定するか、空洞(窓)を配置するという操作を行う。 (ソフトに よって著しく異なる) ・オブジェクトの選択はオブジェクトの端点、線分、面(ソフトによっ て異なる)をクリックすることにより行う。 ・パースを見る場合は、カメラを視点として配置し、位置、高さを入 力することにより行う。

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

13


§ 2.2 プラットフォームの選定 現場に赴いた際に、スケッチを補完しながらデジタルツールの利点を 生かしたソフトを実現させるためには携帯性に優れメモのようなス ムーズな操作が必要とされる。その様な用途のソフトを製作するに際 し、背景にも記した PDA に注目した。理由はデスクトップパソコンで はもちろん、ノートブックパソコンを使用しても現場を歩き回りなが ら設計を行うのは難しいからである。軽量化の進むノートブックに高 機能CADをインストールして設計を行う場合、 それらは確かに軽量で 持ち運びもそれ程苦労なく行える。しかし搭載される高機能 O S (Windows、MacOS、Linux 等)はキーボードとマウスの同時使用によ る入力を前提としている。立ちながら、移動しながらの操作では、片 手がコンピュータを持つことでで塞がれるため、入力のデバイスは一 つであることが望ましく、そうであれば使い勝手は格段に向上する。 PDAはペンデバイスのみの入力が主流で、そういった意味において歩 きながら使うCADのプラットフォームとして適していると判断した。

開発のための具体的にプラットフォームには 3COM 社の PalmOS を選 定した。 選定理由を以下に挙げる。 ・OS が持ち歩きながらペンとハードウェアボタン操作による入力を 想定した設計で、 数あるペンデバイスコンピュータの中でも使い勝 手が群を抜いており、 本論文でのソフトの想定する使用状況にもっ とも適していると判断した。 ・PDAの中でもっとも売れているプラットフォームでもあり、 電話が 内蔵されたモデルがリリースにより手間を省いてインターネットに 繋ぐことが出来るようになるなど日々発展を続け、 本論文のソフト が持つ可能性を広げることができると判断した。

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

14


・画面がカラーの PDA、WindowsCE(Ver. 2.0 以上)機器もいくつか リリースされているが、 それらはキーボードの使用が前提であった り電池の持続時間が短い、 と言った持ち歩きながらという用途には 適していないと判断し、選定条件から外した。

PalmOSは手のひらサイズのスクリーン一体型のコンピュータ上で動作 し、白黒 2 階調の画面(OS3.0 以降は白黒 4 階調)にペンを用いてデー タを入力する。主にスケジュール管理や住所録などに使われ、それら のためのソフトは始めからインストールされ出荷されている。また、 この OS むけの開発用キットも提供されており、数多くのソフトが 日々リリースされている。

機器の詳細については、§ 7.1「プラットフォームの説明」参照

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

15


§ 2.3 操作方法の設計とソフトの制作 前節の調査で得た初期設計を支援する機能で、PalmOS 上で満足に動 作、活用可能なものを選定し、以下に操作方法を決定した。 また、PalmOSに標準でサポートされていないが、GPSと連動させたシ ステムを作る。

2. 3 . 1 基 本 機能 本機 GPS を用い、現在の自分の位置と、周辺環境を自動的にシステムが判 断する。 (実際の本論文付属ソフトには搭載用のプログラムは無い) 描いたスケッチとその場所が自動的に記録され、その場所から見える 周辺状況と自分の考えている建築を同じ画面に収めることが出来る。

2 . 3 . 2 インターフェース 操作画面は前節の調査結果により 1. ボリューム全体を作成、編集、確認する場面にアクソメ視点。 2. ボリュームのある地点からの見え方の確認、編集、作成する場合に 立面パース視点。 の二つの視点を用いてボリュームステディを行う。

1. アクソメ視点 平行投影では投影面に平行な辺や面の長さや面積が実寸となり、 か つ三次元空間を意識しながら「かたち」を考えることができる。 投影図に直接手を加えることによりボリューム全体のバランスを考 えながら作成と編集を行う。 入力はペンで行い、 ボリュームは端点を指定することにより作成す る。

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

16


2. 立面、パース視点 作成されたオブジェクトが自分のいる視点からどのように見えるか を検証するために、立面パースを表示させる。設計の際には景観も 重視されるため、背景にはGPSで得たランドマークの画像をBitMap で表示させる。 この視点では実際の風景と近付けるため、透視変換を行うのが望ま しい。 このモードでは、敷地内外の任意の場所で、ボリュームのもっとも よい形に編集を行ったり、感じられたことを自由に記入する機能が 必要である。

2 . 3 . 3 画面のレイアウト 画面の上から15ポイントまでにツールバーを作成し、頻繁に行う操作 はバーの中にボタンを配置した。 PalmOSではメニューへのアクセスが 面倒なため、煩わしい作業が多くなると設計活動にも支障をきたすと 判断した。

ツールバーに配置した操作は 視点モードの変更、 (右に回転する) 、 (左に回転する) 、オブジェクトの削除、 ペンの形変更、ペンの色変更

[括弧内はGPS 搭載時には不要機能、ツールバーの詳細については「§ 3.2.4 ツールバーの説明」参照のこと

その他の頻繁に行わない操作はメニューへのアクセスによって行う。 また、画面の上から縦に 15 ∼ 160 ポイント、横に 0 ∼ 160 ポイントは オブジェクトの描画、編集、閲覧を行う領域とした。

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

17


2.3.4  ソフトの制作 4  本論文では C 言語でソフトの開発を行った。 3COM 社[http://www.palm.com/] (日本では MetroWerks 社[http:// www2.metrowerks.com/jp/])から販売されている「CodeWarrior」 「Constructor for Palm OS 1.1.3」を開発に使用した。 本論文では、想定機能を作成する上で必要なライブラリが足りない場 合、そのライブラリを一から作るか、または機能実装を見送った。 (た だし、sin,cos 等の数学的な操作は Freeware としてリリースされている MathLib を用いた) また、動作の確認は「Palm OS Emulator21b92」と「IBM WorkPadJ」で 行った。

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

18


§ 3 ソフトのマニュアル

3.1 コンセプト

3.2 操作方法 3.2.1 用語 3.2.2 使う前に 3.2.3 メニューの説明 3.2.4 ツールバーの説明 3.2.5 使い方の流れ 3.2.6 モードの説明

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

19


§ 3.1 コンセプト 「空間アイディアパッド」は PalmOS(Ver.2.0 もしくはそれ以上)環境で 動作する。 (確認は IBM-WorkPad 上でしか行っていない) 入力はペンで行い、直感的なボリュームの入力と編集により設計を 行ってゆく。

GPS の 活 用 また、このソフトはPalmPilotに将来搭載される可能性のあるGPSの存 在を前提に設計されている。 (現時点では未搭載)

GPS とシステムを連動させることは、単体で扱うよりも現場での設計 活動を高度な形で支援し、次にあげる三つのメリットをもたらす。 1. 建物を含めた周辺の正確な状況を入手することが出来る。 2. システムの視点と実際の視点が同じになる。あらゆる場所でもっと もよい形を模索し、建物を様々な角度から検討できる。 3. 現場では分かりにくい法的な制限を自動的に計算し、法的規制を越 える建物を表示しない。例えば、高さを編集する際に、法的規制の モードをオンにすると、法的に規制された高さよりも高くならなく なる。 GPS については、既に搭載を実現しソフトと連動している例もある。 (§ 7 付録参照、PalmPilot への取り付け方は付録の方に記載する。 )

GPS が本ソフト上で活用されるのは「周辺情報の取得」と「視点の自 動計算」の場合においてである。 ・ 「周辺情報の取得」では自動的に目的の敷地、周辺建物、ランドマー クを PDA のメモリ内に登録。その後 GPS から得たデータを元に周 辺環境を入力し、敷地で設計活動を開始する。

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

20


・ 「視点の自動計算」では、モデリングの視点が自分の位置と同期しな がら変化し現実に即した作成が行える。 GPS を使用した状況のイメージモデルを以下にのせる(図 3-1)

図 3-1 GPS イメージ図 画面上ではユーザーが作成したオブジェクトの近い点は太い線で、遠 い点は普通の線で表示されるようになっている。GPS から得た情報は 全て淡い線で表示されるようになっている(図 3-2)

図 3-2 表示画面 早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

21


§ 3.2 操作方法 3.2.1- 用 語 このソフトを扱うための基本操作の用語を以下に定義する。 タップ プ:画面中の操作を行いたい部分にペンを押し付け、すぐ離す 操作。 (図 3-3) ダブルタップ プ:タップを間を置かずに2回行う操作。 (図 3-4)

図 3-3 タップ

図 3-4 ダブルタップ

ド ラ ッ グ:ペンを画面に押し付け、そのまま離さないでペ ンを移動させる操作。 (図 3-5)

メ ニ ュ ー:スクリーンの下のメニュー をタップするとスクリーン上 部にメニューバーが現れる。 3.2.3「メニューの説明」参照

ツ ー ル バ ー:常にスクリーン上部15ポ イントに位置するボタンが並 んでいる場所のことをさす。

図 3-5 ドラッグ

3.2.4「ツールバーの説明」参照

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

22


3.2.2- 使 う 前 に HotSync を用いて CD-ROM 内の「MemoPad.prc」と「MathLib.prc」を PalmOS にインストールする。 (図 3-6) スクリーンの下のホームボタンを押し、アプレット一覧を表示させ、 その中から「MemoPad」を選択し起動させる。設定でハードウェアボ タンにMemoPadを割り当てている場合は、 割り当てているボタンを押 す(図 3-7)

(図 3-6)インストール

(図 3-7)ソフトを起動する

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

23


3 . 2 . 3 メニューの説明 ( 図 3-8 ) 明( 3-8) 「 O p t i o n ss」 」 -clear screen... 画面全体を一旦初期状態にもどす。描いたオブジェクト のデータは消えない。 -redraw screen... 描いたオブジェクトの点の位置を計算し直し、再描画 する。 -set GPS info...GPSから情報を得、その情報を元に周辺状況の画像を描 画する。 「Mode 」 e」 -draw mode... モードを描画モードに変更する。 -edit mode... モードを編集モードに変更する。 -view mode... モードを閲覧モードに変更する。 ----------Separator----------Law Mode On... 法的規制モードを ON にする。 -Law Mode Off... 法的規制モードを OFF にする。

「 E d i tt」 」 -delete figure... 選択されたオブジェクトを削除する。 -edit Height... 選択されたオブジェクトの高さを 20 高くする。 -test menu... 開発用のテスト用メニュー。

エディット

オプション

モード

(図 3-8)メニューバー画像

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

24


3 . 2 . 4 ツールバーの説明 ( 図 3-9 ) 明( 3-9) 「モード」ボ タ ン モードを変更する。初期設定では DrawingMode に設定されてい て、ボタンを押すたびに DrawingMode->EditMode->View&SketchMode->DrawingMode...

と変更される。 「右に回転」ボ タ ン 自分が右に 5 度回転する 「左に回転」ボ タ ン 自分が左に 5 度回転する 「削除」ボ タ ン 選択されたオブジェクトを削除する。 「ペンの形」ボ タ ン ペンの形を変更する。初期設定では「/」と表示されており、自 由に線を描く。ボタンを押すと「#」となり、四角を描く。もう 一度押すと「/」に戻る。 「ペンの色」ボ タ ン ペンの色を変更する。初期設定では「b」と表示されており、黒 い線を描く。ボタンを押すと「w」となり、白い線(黒い部分を 消す)を描く。もう一度押すと「b」に戻る。

モードボタン

左回転ボタン

右回転ボタン

削除ボタン

ペンモードボタン

色モードボタン

(図 3-9)ツールバー画像

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

25


3.2.5 使い方の流れ メニューの「set GPS info」を選択すると、GPS から得た情報が画面に 表示される。 (現在は GPS と連動していないため、敷地情報の例が表示される) このソフトの操作はDrawingMode, EditMode, View&SketchMode三つの モードを使用しながら、設計を行う。 モードの変更はツールバーのモードボタンを押すことで行う。

DrawingMode でボリュームを作り、EditMode で編集。任意の地点で ViewMode に設定し、その地点における見え方に従ってボリュームス タディを行う。終われば移動し、またある地点における見え方でスタ ディを行うといった作業のくり返しでエスキースを行う。途中、また は最後にアクソメ画面で全体のバランスを確認、編集する。 (図 3-10)

現場の周辺環境を登録 (GPS、Internet等)

移動

スケッチ 現場に赴く ボリューム編集 ボリューム製作 位置自動計算 ボリューム全体の編集

編集視点決定 図 3-10 ソフト使用の流れ

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

26


3.2.6- モードの説明 モードを変更しながらオブジェクトを作成編集してゆく。 作成の際に変化するモードの流れ図を図 3-11 に示す。

全体的な編集 オブジェクトを描く

オブジェクトの編集

DrawingMode

EditMode

景観評価 View&SketchMode 移動 View&SketchMode 景観を考慮した編集 View&SketchMode

局地的な編集 (図 3-11)モードの流れ図

DrawingMode 画面のアクソメ図に直接タップしながらオブジェクト作成を行う。 このモードでは画面にグリッドが表示される。 タップしたスクリーン上の XY 座標は Z 軸上の高さ 0 地点とし、三次 元上の点を計算する。 (図 3-D-1) (図 3-D-1)オブジェクトの作成

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

27


点をプロットしていきながら、最初の点を再びタップするか、もしく はダブルタップを行えば閉じられた面(ポリゴン)が出来る。ポリゴ ンが出来たとき、自動的に設定された高さで立体として表示される。 (高さの編集は EditMode で行う) 点を閉じることなく視点を変更したり、モードを変更するとそれまで の点は登録されず自動的に消去される。また現段階 ではソリッドモデルを採用していないため、 3次元と してあり得ない形を登録してもそれらしく表示して しまう。

(図 3-E-1)

EditMode EditModeでは DrawingMode で描かれた図形を編集す る。 オブジェクトの点の編集、オブジェクトの高さ編集、 オブジェクトの削除、という三つの基本的な機能を

(図 3-E-2)

備える。

オブジェクトの編集を行うためには、オブジェクトを選択してからの 作業となる。画面をタップした場合、タップした点の近くにオブジェ クトの端点があればその点とオブジェクトを選択する(図 3-E-1)

(図 3-E-3)

(図 3-E-4)

(図 3-E-5)

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

28


オブジェクトの上面の一点にペンを落としそのまま離すことなく上下 させればその点のみの高さを編集する。 (図 3-E-2) オブジェクトとは関係のないところで上下にドラッグを行えば選択さ れたオブジェクトの高さ編集。 (図 3-E-3) 選択したオブジェクトの端点をドラッグし、それが底面であった場合 底辺の位置編集。 (図 3-E-4) オブジェクトの高さは「法的モード」が ON になっているとその敷地 で法的に規制された以上の高さにはならない。 「法的モード」をOFFに すれば、自由に高さを設定することができる。 (図 3-E-6) デリートボタンを押せば選択されたオブジェクトは削除される。

View&SketchMode View&SketchModeでは今までに作成したモデルを視点に近い立面で表 示する。 まず初めにスクリーンの 3/4 の場所に GL が引かれ、その線を基準にオ ブジェクトを表示する。周囲には周辺の建物のモデルと背景には BitMap でランドマークの画像が表示される。 (図 3-V-1) オブジェクトを選択し、オブジェクト内で四角を描くとその部分が空 洞化され、オブジェクトの端点を選択しペンを引っぱってゆくと高さ の編集も出来る。

(図 3-V-1)

(図 3-V-2)

(図 3-V-3)

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

29


オブジェクトを選択して編集したものは、視点を変更しても編集した 箇所はモデルに反映されたものとして残る。 また、オブジェクトを選択せずにスクリーン上にペンを走らせると自 由な線か四角を描くことが出来る。 (図 3-V-2,4) ペンか四角を描くかはツールバーのペンの形ボタンで変更する。 自由に描くペンには黒く塗りつぶす黒色モードと白く塗りつぶす白色 モードがある。 (図 3-V-3)ペンの色はツールバーのペンの色ボタンで 変更する。 自由にペンを走らせたスケッチはモデルの形には反映されないので、 スクリーンショットを保存し、後の検討の材料とする。ペンによるス ケッチは、形よりも、むしろ形とは関係のない匂い等の要素を書き込 む為のものである。 また自分が移動すると、画面に写る方向もそれに従って変化する。 (図 3-V-5)

(図 3-V-4)

(図 3-V-5)

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

30


§ 4 考察

4.1 ソフトの理念 4.2 メリット 4.3 未実装機能 4.4 PDA の未来像とソフトの可能性

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

31


§ 4.1 ソフトの理念 4 . 1 . 1 スケッチパッドシステムの出現 1950 年代の後半に、MIT の学者達は次のように構想していた。設計者 は、 コンピュータに接続されたオシロスコープの上に 「ライトペン」 で 自分の意図する装置の図を描く。設計者は思いのままに、 「ライトペ ン」で変更を行い、コンピュータすなわち「奴隷」に命じて、正確な 図形に直ちに書き直させる。更にコンピュータには、高度解析、隣接 部分とのクリヤランスのチェック、その他の解析に関連する数値計算 を行わせる。設計者はコンピュータとやり取りしながら自分の考えを 試し、思考を繰り返しながら設計を進めてゆく。 当時 MIT は、世界の工学技術の最先端にあり、コンピュータの分野で も最高の装置が設備され、最新のプロジェクトが進行中であった。そ の頃から、 MACといわれるタイムシェアリングのプロジェクトが進行 中であった。タイムシェアリングは、多数のユーザーがあたかも自分 が大型コンピュータを占有しているような感じで使用できることを可 能とする利用形式である。設計には多量の考える時間が必要となる。 したがって、必要となったときに、すぐにその場でコンピュータが使 えるタイムシェアリング方式は、 CADの可能性を高めるものでもあっ た。 丁度そのような時期に、Ivan Sutherland という学生が MIT の博士課程 に入学し、博士論文のテーマを模索していたのである。Sutherland は MIT の付属機関であるリンカーン研究所のコンピュータを用いて、コ ンピュータにより図形を発生させる問題を修士論文のテーマとして選 んだ。 研究は1961年秋から開始され、 何度かの試行錯誤を繰り返して、 1962 年秋の初めにほぼ完了した。Suterland の作り上げたシステムは、 「スケッチパッド(SketchPad) 」という名前が付けられ、翌年の春の SJCCの大会に、これと関連する一連の、MITの人達による論文ととも に発表され、まさに世界を驚かす画期的なイベントとなった。これに

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

32


よって、コンピュータの新しい応用分野であるコンピュータグラ フィックスという分野が誕生することになった。スケッチパッドシス テムは、人とコンピュータとが対話的に、ライトペンを使ってディス プレイ上で、非常に一般的な図形処理を行うことを可能にするシステ ムであった。 (図 4-1)

図 4-1-Suterland とスケッチパッド 手に持っているのがライトペン

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

33


4 . 1 . 2 スケッチパッドシステムの意味 コンピュータは当時バッチ形式で使われていた。人は手紙を書いてコ ンピュータと通信しているようなもので、コンピュータと対話をして いるとは言えなかった。機会部分の形状とか、電気回路の結線関係を 伝達するような場合、文を書いて通信するのは非常に面倒なことであ る。スケッチパッドは、人が直接図形を描き、人とコンピュータとの 図形による対話的な通信を可能としたコンピュータ利用の新しい分野 (コンピュータグラフィックス)を切り開いたのである。 コンピュータグラフィックスは、特に設計に関する応用、すなわち CAD に対する応用が期待された。設計には創造的な行為と非創造的、 機械的な行為が交錯して発生する。Sutherland は、設計において、コン ピュータの持つ論理的演算の力を、如何に人にとって自然な形で、人 の創造行為に利用するかという方法を、具体的なシステムを作って実 証した。 スケッチパッドシステムに使われている技術は、当時の技術レベルを 遥に越える高度なものであり、今日のコンピュータグラフィックスに おける二次元の技術の中核をなすものが多数含まれている。 スケッチパッドシステムは、 およそ二次元の図形処理に関するかぎり、 極めて一般的な、完成度の高いシステムだったのである。

4 . 1 . 3 スケッチパッドからアイディアパッドへ スケッチパッドが創られた 1966 年から比べれば、コンピュータグラ フィックスは大きく発展し、Suterland が目指した、スケッチパッドの 理想像はほぼ完成した感がある。彼がスケッチパッド提唱後に出した 10 の問題、例えばグラフィックス機器のローコスト化と性能の向上、 図形操作の各種技術の開発、 ハーフトーン図の作製、 隠れ戦の消去、 動

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

34


的図形表現問題、図形の構造表現 ... 等はほぼ解決された。 しかし、設計に付随する機械的な事務的作業を軽減し、創造的な作業 を助けるという設計のための CAD の思想に変わりはない。 今後は設計者が思い通りに描けるばかりでなく、その創造性を何倍に も膨らまし広げる可能性を追求することが理想である。

本論文ではスケッチパッドのコンセプトであるコンピュータが人の直 感的な要求を理解し形にすることの重要性を念頭におきつつ、現在の 進歩した技術を前提にした新しいソフトの制作と、その活用システム を考案した。

外に持ち出し、好きな場所で思い付いたままにペンを走らせながら直 感的な入力で図形を描き、設計者にかわって機械的な作業を行い、自 分の位置をGPSが自動的に計算し設計画面に反映させる本ソフトは新 しい発想を生み出す場を与えた次世代の CAD システムである。

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

35


§ 4.2 メリット このソフトの使用は設計者にとって以下の三つのメリットをもたらす

4 . 2 . 1 . 現場での空気を感じながら 3 D エスキースを行う スケッチでは行えない仮想三次元 空間によるエスキースを現場で行 うことができる。本ソフトは持ち 歩きながらの操作(図4-2)を前提 にしており、PC-CAD の様に高機 能ではないが、多くの操作を必要 とすることなく思い付いたことを 即座に記入できるようになってい る。

図 4-2- 歩きながらの操作が前提

4.2.2.GPS による正確な周辺情報の取得と活用 GPS(図 4-3)を使用することにより周辺状況の情報と設計者の視点の 設定を正確に設定し、より確かな景観シミュレーションが行える。ス ケッチでは思い描いた大きさが、実際には不可能であったりとするこ とがしばしばあるが、その心配がなくなる。また、歩いただけでは分 からないデータベースに蓄積された情報を得、それを活用しながら設 計を行う可能性もある。

図 4-3 GPS の写真

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

36


4.2.3.CAD システムの一連の設計の流れに組み込まれる 現場でエスキースを行ったものが、PC-CAD の初期与件となり、 スムーズに机の上でのデジタルエスキースに移行できる。 (図 44)スケッチでは書き直す度に書いたものの整理と入力を繰り返 さなければいけないが、その労力が減る。 本ソフトを用いた流れ

従来の流れ

スケッチ・写真

視点決定

移動

スタディ

スケッチ・写真

移動

移動

...

ボリューム製作

作業A

空間アイディアパッド部分

現場に赴く

整理

入力

PC-CAD部分

...

3D-CADの初期与件

作業Aの回数だけくりかえし

オフィス・家に持ち帰る

アイディアをつめてゆく

製作

設計完了

(図 4-4)全体の流れ 早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

37


§ 4.3 未実装機能 以下は本論文の作成段階には未実装ながら本来本ソフトにはあ ると便利な機能で、 今後の課題として載せておく。 、今

GPS を実装するには現段階では見送った。 実際にGPS を装備し、それに対応したソフトもあるがまだ本格的なも のではなく今後の発展により実装する。 (実装の仕方は§ 6 付録の 「GPS の付け方」を参照)

- 陰線処理 PalmOSのライブラリに任意の領域を塗りつぶすサブルーチンがなくそ のコードを書くには時間がかかりすぎるため見送り。 PalmOSのライブ ラリの次期バージョンが対応すれば実装。

- 保存機能・アンドゥ機能 本ソフトは論文用に作成したため技術的には簡単だが作成に時間のか かる機能を省いている。

- 保存したデータを PC に送る機能とそのデータを PC 用の CAD ソフト で閲覧編集出来る機能 転送後に CAD に移行するためには本ソフトのデータ形式を DXF や DWGに変換するPC用のアプリケーション開発がもっともよい方法だ と思われる。PDA 上で DXF を編集することはあまり現実的でない。

- スケッチデータの多次元的な管理システム 建築スタディの履歴をわかりやすく表示したり、似たような形同士を 分類したり、様々な時期の案を自由に組み合わせスタディを行う時間 軸の操作に優れた保存リストの存在はスケッチの行為に新たな可能性

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

38


を呼び込む。

- 感覚による検索システム 過去のアイディアを現在のアイディアにいかそうとする際、 それ はいつ描いたものか、どのような名前を付けて保存したかより も、設計者にとっては形そのものの方が遥に重要である。描いた スケッチのイメージだけを頼りに、 そのスケッチを検索するシス テムはより感覚的でスムーズな設計を助ける。 例えば高い建物が 多かった、線の数がひたすらおおかった、など印象を入力して検 索するシステムである。

- 自由に描く ペンデバイスの場合、 マウスと違いドラッグ操作は自然な行為で あり、多用されるべきものである。 よって本ソフトのようにペンのタップによる操作よりもドラッグ 操作によって図形は描かれるほうが好いものと思われる。 自由に線を描くと、 それを元に立体を作成する機能は本ソフトを より直感的なものにすると思われるが、 これには自由に描いた線 をどのように3次元と判断するかといったコンピュータ内での処 理が課題となる。

- ソリッドモデル 作成されるオブジェクト情報をソリッドモデルにすると、 いろい ろな操作が可能になる代わりに、計算量が多くなる。

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

39


§ 4.4 PDA の未来像とソフトの可能性 PDAの発展する方向として現在予想され、その発展による本ソフトの 進むと考えられる方向性を以下に記す。

高速化、 大容量化、 カラー化 、大 、カ 当然考えうるこれらの発展は、PDA上の設計支援ソフトに多くの機能 を持たせ、視覚的印象に重要な透過処理やテクスチャー処理を可能に する。現在はボリュームスタディーにのみを想定している本論文のソ フトに、より煮詰まった設計案、内装やディテール等の検討を現場で 行える CAD の可能性を実現させる。

デジタルカメラ搭載 現在は背景はGPSから取得したランドマーク情報のみを白黒で表示さ せる使用になっている本ソフトであるが、デジタルカメラを活用する ことにより、電柱や看板と言った GPSからは得られない小さな情報を 考慮しながら設計を行うことを可能にする。

スムーズなインターネットアクセス Palm7やiModeで実現されているこの機能は、 インターネット上のデー タを十分に使いこなす可能性を持っている。テクスチャーを選ぶ際、 建材メーカーのデータベースにアクセスし、今現在現実的な検討をあ らゆる場面でストレスなく行ったり、自分の考案した建物の類似例を さがして参考にし、組み合わせることも可能である。

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

40


§ 5 おわりに 謝辞

この論文製作にあたり、ソースコードを惜し気もなく下さった Dave MacLeod 氏、Roger E. Critchlow Jr. 氏、 Ka-Ping Yee 氏、Dave Campbell 氏、アドバイスをしてくださった先生方、研究室の皆様、いろいろと 協力してくれた卒論生のみなさま(特に松本君) 、C のコードを見てく ださった橘木様、親身になって相談にのって下さった修士の玉井様、 そして休みを返上してつきっきりでC言語の特訓と卒論の面倒を見て くださった木村謙先生に心より感謝いたします。

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

41


§ 6 参考文献 「建築家のドローイング」香山壽夫 / 東京大学出版会 「建築家のメモ展:手が語る原点からのプロセス」/TOTO ギャラリー /1999 年展覧会 「構想と構築」  マリオボッタ著、古谷誠章訳 / 鹿島出版会発行 /1999 年発行 「Le Courbusier 1936-1932」  GarlandPublishing Inc., and Fondation Le Courbusier 「建築家フランクロイドライト」  テレンス・ライリ− + ピーターリード編 / デルファイ 研究所発行 「建築ノート」狩野忠正・本多友幸 / 新建築社発行 /1992 年発行 「マリオボッタ」GA アニオラント /A.D.AEdita

Tokyo/1986 年発行

「現代・世界の建築家 100 人 ドローイング / スケッチ」Gerald.Allen&RichardOliver/ グ ラフィック社 「生まれいづる空間への模索」新建築社 /1999 年発行 「シーザーペリ」ビルレーシー編・鈴木博之訳 / 同朋社出版 /1982 年発行 「菊竹清訓・作品と所法」美術出版界 /1973 年発行 「A/E/C Systems Japan97 特別企画展」A/E/C Systems Japan 組織委員会事務局 「3 次元図形処理工学」  黒瀬能 / 共立出版株式会社 /1999 年発行 「CAD 工学」山口富士夫著 / 培風館 /1998 年発行 「C によるグラフィック技法」Leendert Ammeraal 著 / オーム社 /1993 年発行 「コンピュータディスプレイによる図形処理工学」山口富士夫著 / 日刊工業新聞社 /1981 年発行 「C 言語による 3D グラフィックス入門」石井繁夫著 / 技術評論社 /1988 年発行 「まーぱのコトテン」MacPower 編集部 /1995 年発行 「Macintosh ではじめる C プログラミング」デーブ・マーク著 / トッパン社 /1996 年発行 「C 言語構造化プログラミング作法」HBJ 出版局 「入門 C 言語」三田典玄著 / アスキー出版局 「PalmOS バイブル」3Com 著 / 日系 BP 社 /1999 年発行 「Hacker Dude-san's Palm/WorkPad Page」http://www.tt.rim.or.jp/~tatsushi/ 「Palm de Cool!」http://www.fureai.or.jp/~mori-t/ 「Palm CENTRAL.COM」http://www.palmcentral.com/home.shtml 「Wade's Pilot Programming FAQ 」http://www.wademan.com/Pilot/Program/FAQ.htm 「Muchy’s Palmware Review」http://muchy.com/ 「PalmPilot-tech-ML 」http://www.pilot-jp.net/

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

42


§ 7 付録 7.1- プラットフォームの説明 PalmOS について 使用ハードウェア(WorkPad)について

7.2- スケッチの調査を行った建築家一覧

7.3- 付属 CD-ROM の使い方 コンパイルの行い方 エミュレータの使い方

7.4-GPS の付け方

7.5- ソースコードの説明

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

43


§ 7.1 プラットフォームの説明 OSPalm PILOT OS-Palm PILOT とは US Robotics(3COM に買収さた)の子会社である Palm Computing Inc., が開発、発売するコンパクトなペンタイプの PDA。 Graffitiという多少変わった手書き文字認識エンジンを使っている。本 体のコンパクトさに加え、軽快な動作と電池の持ちが良いのが特徴。 また、Desktop PC との接続を非常によく考えており簡単に PC と接続 してデータのやり取りをすることが可能。 データの入力等は 160*160 の白黒 2 階調の画面(OS3.0 以降は白黒 4 階 調)にペンを用いて行う。 (図 1)PalmOS 起動画面 PalmOS (図 1)の主な用途 PalmOS( PILOT 単体で住所録,スケジュール, メモ,計算機,備忘録、として使える。 付属の Cradle と呼ばれるドッキングス テーションを使って DeskTop PC と接 続することにより,データのバック アップ,PC 上での入力,他のソフトの データの読み込みができる。サード パーティ製のソフトウェアをインス トールするときにも Cradle を使う。モデムを使い、電話線を介して Desktop pcとデータの交換をすることも可能。 Palm7では電話が内蔵さ れており、モデムや携帯電話に接続しなくてもメールの送受信やホー ムページ閲覧が可能である。  文字の入力には Graffiti という手書き文字認識機能を使う。  サードパーティ製のソフトウェアをインストールすることにより ゲームを楽しんだり、ログや電子テキストを読んだり、通信をしたり、 数多くのアプリケーションを利用することができる。

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

44


PalmOS プ ラ ッ ト フ ォ ー ム の 特 徴 とにかく小さく.胸ポケットにもズボンのポケットにも入り、片手にすっぽ りと収まり軽い. ボタンが6つあり、ゲームやブラウズをするには本当に便利。簡易な機能の 呼び出しならペンを使わなくても行える。 拡張性がシリアルポートのみという割り切り。 電池の持続時間が長い。開発にがりがりと使っても一カ月持つ。普通に使え ば二ヶ月は持つ。 PC と接続しデータを交換する場合は Cardle(ゆりかご)と呼ばれるドッキ ングステーションの上に置いて、Cardle のボタンを押すだけで完了する。 安っぽいが音もでる。 バックライトがつく。

付属ソフトウェア (図 2)に つ い て ア( シンプルでインターフェースが統一されていて操作をすぐ覚えられ る。一つの画面に大体必要な情報が入っているので、操作が少なくて すむ。 高速な動作。ほとんど待ち時間がない。 主要な操作はボタンだけで済むので、頻繁に行う操作はペンを出す煩 わしさがない。 グローバル検索:NewtonのようにすべてのPIMを対象とした検索がで きる。

(図 2)付属ソフトウェア例 スケジュール帳

アドレス帳

ToDo リスト

メモ帳

使用ハードウェア (図 3) ア( スケジュール帳

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

45


モデル:WorkPad 型番:8602-30J OS:日本語版 Palm OS ver.3 ディスプレイ: 160 × 160 メモリー:4MB(DRAM)/2MB(Flash) インターフェース:シリアル、赤外線 寸法: 119.7 × 81.97 × 17.8mm 重量: 162g バッテリー:単 4 アルカリ電池(2 本) バッテリー寿命:約 2ヶ月 付属ソフト:ロータスイージーシンク、IRSync IBM インターネット接続サービス、英和・和英辞書

§7.2 スケッチの調査を行った建築家一覧

図 3-WorkPad 写真

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

46


E・フェイ・ジョーンズ / F・アンドラス・バー / H・H・リチャードソン / I・M・ペイ / O・ M・ウンガース / RM・クリメント / アーサー・エリクソン / アーサー・コットン・ムーア /  アデール・ノウディ・サントス / アラン・グリーンバーグ / アルヴァ・アールト / アルヴァロ・ シザ / アルキテクトニカ / アルド・ロッシ / アンソニー・エームズ / 安藤忠雄 / アンドレ・ デュアニ/エリザベス・プランター-ザイバーク / アンドレア・パラディオ / アントワン・プレドッ ク / 磯崎新 / イムレ・マコヴェッツ / ヴィラール・ド・オヌクール / ウィリアム・S・W・リ ム / ウィリアム・ターンブルJr / ウィリアム・ペダーセン / 内田祥三 / ウラジミール・タトリ ン / エーリッヒ・フランツェン / エーロ・サーリネン / エットーレ・ソットサス / エティン ヌ - ルイ・ブレー / エドワード・ララビー・バーンズ / エドワード I.ミルズ / エミリオ・アン バース / オスカー・ニーマイヤー / カール・フリードリッヒ・シンケル / ガイタナ・アウレン ティ / 香山壽夫 / ガリ・ビビエーナ / カルロ・スカルパ / カルロス・ジメネス / カレン・ ボースマン / レスリー・ギル / 菊竹清訓 / キャシー・サイモン / クロード - ニコラ・ルドゥー /  黒川紀章 / グンナー・バーカーツ / グンナール・アスプルンド / ゲルハート・コールマン/マ イケル・マッキネン / コープ・ヒンメルブラウ / ゴットフリート・ベーム / サー・ジョン・ソー ン / サイト / ザハ・ハディド / シーザー・ペリ / シーザー・ペリ / ジェイムス・コート /  ジェイムズ・フリード / ジェームズ・インゴ・フリード / ジェームズ・スターリング / ジェー ムズ・スチュアート・ポルシェク/ジェームズ・ガリソン / ジェラルド・アレン / 篠原一男 /  ジャックリン・T・ロバ−トソン / ジャネット・ニーダム - マッキャフリー / ジャン・ヌーベル /  ジャン・ポール・カーライアン / ジョージ・ハートマン/ウォレン・コックス / ジョージ・ラナ リィ / ジョサイア・コンドル / ジョバンニ・バティスタ・ピラネージ / ジョン・アンドリュース  / ジョン・ジョハンセン / ジョン・ヘイダック / ジョン・ローチ / ジョン J.カスバリアン /  白井晟一 / スタンリー・タイガーマン / スティーブン K.ピ−タ−ソン / スティーブン・ホー ル / ステファノス・ポリゾイド / スメット・ジュムサイ / ターナー・ブルックス / 辰野金吾  / ダニー・ニミエルス / ダニエル・リベンスキン / タフト・アーキテクツ / 丹下健三 / チャ −ルズ・グレイブズ / チャールズ・R・マッキントッシュ / チャールズ・グワスミイ / チャール ズ・コレア / チャールズ・ムーア / デービッド・チャイルズ / デニス・スコット・ブラウン /  トーマス・ジェファソン / トーマス・ビービイ / トッド・ウィリアムズ/ビリー・ツェン / 中 村順平 / ノーマン・フォスター / バーソロミュー・ボーサンガー / バーナード・チュミ / ハ リー・C・ウルフ / ハリー・M・ウィーズ / ハリー・サイドラー / バルダッサーレ・ペルッチ /  ハンス・ホライン / ピーター・C.プラン / ピーター・アイゼンマン / ピエール・ルイージ・ ネルヴィ / ヒュー・ニューウェル・ヤコブセン / ヒュー・ハディ、マルコム・ホルツマン&ノーマ ン・ファイファー / ヒュー・ハディド / ヒュー・フェリス / フィリップ・ジョンソン / フラ ンク・ゲ−リ− / フランク・ロイド・ライト / ブルーノ・タウト / フレデリック・フィッシャー  / ペーター・シェマイエフ / ヘルマン・ヘルツベルハー / ヘルムート・ヤーン / ヘルムート・ ヤーン / ベンジャミン・トンプソン / ヘンリー・N・コレア / ヘンリー・メルツァー / ポール・ ルドルフ / ボルクリシュナ・ビタルダ・ドーシ / ホルヘ・シルベッティ / マーク・サイモン /  マーク・マック / マーク・マック / マイケル・グレイブズ / マイケル・グレイブズ / マイ ケル・ソーキン / マイケル・ホプキンス / 前川国男 / 槇文彦 / マック・スコギン / マリオ・ ボッタ / ミース・ファン・デル・ローエ / ミケランジェロ / モシェ・サフィディ / モルフォ シス / ヨゼフ・パウル・クライフス / ラファエル・モネオ / ラム・カルミ/アダ・カルミ -メラー ド / リカルド・ボフィル / リカルド・レゴレッタ / リチャード・オリバー / リチャード・マ イヤー / リチャード・ロジャース / ル・コルビジェ / ルイス・H・サリヴァン / ルイス・カー ン / ルドルフ・マカード / レイマ・ピエティラ/ライリ・ピュエティラ / レイモンド・エイブラ ハム / レオナルド・ダ・ヴィンチ / レベウス・ウッズ / レム・クールハウス / レンゾ・ピア ノ / ロバート・A・M・スターン / ロバート・ベンチューリ / ロバート・ベンチューリ / ロバー ト AM.スターン / ロバート H ティム / ロマルド・ジョゴラ / ロレッタ・ビンシアレリ(あいう えお順)

§ 7.3 付属 CD-ROM の使い方 早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

47


コンパイルの方法 付属 C D の中のソースのコンパイルを行うためには別途 「CodeWarrior for PalmOS」が必要。 「CodeWarrior for PalmOS」は Metrowerks 社から発売されてる。現在は Ver.3.3 を使用している。 それ以外のバージョンではコンパイルが行えない可能性がある。 また、ファイルをコピーしてコンパイルを行う場合はかならず MathLib.c をインクルードする。MathLib 関連のフォルダが CD に 入っているので使い方はそちらを参照。 コンパイルを行うには付属の「SpaceIdeaPadCD」の中(図 7-3-1) の「IdeaPad」の中(図 7-3-2)の中の「IdeaPad」をダブルクリッ クして CodeWarrior for PalmOS を起動させる。 (ソースコードは Src フォルダの中に入っている。 ) CodeWarrior for PalmOS が起動されたら(図 7-3-3)図中のメイク ボタンを押すことでコンパイルが行える。

図 7-3-1

図 7-3-2

図 7-3-3

メイクボタン

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

48


エミュレータの使い方 パーム用に開発されたソフトをMacOS上で確認するためには、 エミュ レータを用いる。 エミュレータはSpaceIdeaPadCD の中の emulator_app_21d29 Folderの中 (図7-3-4)の中の Palm OS Emulator をダブルクリックすることで行う。 エミュレータのバージョンは日々あがるので、最新版を h t t p : / / www.palm.com/ からダウンロードして使用することを推奨する。 ソフトを起動すると(図7-3-5)の様になる。起動するロムを選択し(図 7-3-6)OK ボタンを押す。 (自分が所有するロムを使用する場合はそち らを選択。ロムはエミュレータを使用してクレイドル経由で Mac にダ ウンロード可能。ない場合は emulator_app_21d29 Folder の中にある workpad.ROM を使用) (図 7-3-7)の様に起動すればマウスをペンの様 にあつかい使用する。 図 7-3-5 図 7-3-4

図 7-3-7

図 7-3-6

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

49


§ 7.4 GPS の付け方 製作のポイント PalmV 対応に THE BRIDGE を改造(図 7-4-1) リン青銅製の板バネによる PalmV ワンタッチ脱着機構 軽量かつ強固な T=0.5 アルミ製フレーム構造の採用 GPS ユニットの固定には t=1.5 のアルミ板採用 部品の固定にホットボンドを採用することで製作時間短縮。 (完全ビスレス) パームと GPS を図 7-4-2 の様に接続する。接続に際しては表 7-4-1 を参照にし てそれに対応した線を接続する。完成図の前面は(図 7-4-3)の様になり、背 面は(図 7-4-4)の様になる。

レベルコンバータ回路図(表 7-4-1)

ブロック図(図 7-4-2)

信号名 DB9(雌)  PalmV RD

2

3

TD

3

5

RTS

7

4

CTS

8

6

GND

5

10

DC

1

-

DSR

6

-

図 7-4-1 ブリッジ部分

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

50


使用部品 製品名 - 型番 SONY コロンブス GPX-5 の GPS ユニット -A-3291-459-A アンテナ ASSY 接続ケーブル -1-775-918-21 IPS コネクタ - 型番不明 レベルコンバータ -MAX203 コネクタ -THE BRIDGE フレーム - アルミ板 t=0.5,1.5 外装ケース - 下敷き

図 7-4-3

図 7-4-4

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

51


§ 7.5 ソースコードの説明 付属 CD-ROM 内のソースコードの内でも、得に複雑なものを図 解説明する。

1. 図形を描いてポリゴンに登録する処理 2. 画面の再描画処理 3. ハンドルイベント処理

早稲田大学建築学科渡辺仁史研究室 1999 年度卒業論文

52


1 . 図形を描いてポリゴンに登録する処理

図形を描いてポリゴンに登録する。図形を描くのは drawFigure、ポリゴンリストに登 録するのは a d d P o l y g o n 、タップした点の三次元座標を計算し、格納するのが calcThreeDPoint。移動した時の二次元座標を計算するのが calcScreenPoint。 (図 7-5-1) スクリーン上に表示 screenX, screenY

最初だけ

pointData

[calcScreenPoint]

SWord x; SWord y; SWord zx,zy;

三次元->二次元

[drawFigure]

[calcThreeDPoint]

double realX,realY; double realZ,lengZ;

二次元->三次元

タップ タップ

処理(1)

....

タップ

ダブルタップ or 最初の点タップ

処理(2)

[addPolygon] 処理(3)

polygonList *polygonPoint;

pointData

pointData

pointData

screen data real data

screen data real data

screen data real data

* next; *belongPoint;

* next; *belongPoint;

* next; *belongPoint;

pointData

pointData

pointData

screen data real data

screen data real data

screen data real data

* next; *belongPoint;

* next; *belongPoint;

* next; *belongPoint;

*nextPolygon;

polygonList *polygonPoint;

....

*nextPolygon;

NULL

....

NULL

....

作られてゆくデータ (図 7-5-1) 53


関連構造体、関数 // 点のデータ struct pointData { // スクリーン上の値 // 上面の x、y 座標。x は共有。y から引く長さ。 SWord

x,y,zx,zy;

// 仮想三次元上の値 //realX は x 座標、realY は y 座標。 //realZ は座標の高さ。lengZ はその点の上の点までの長さ double

realX,realY,realZ,lengZ;

// 連結する次のポリゴン pointData * next; // 所属する最初のポイント pointData *belongPoint; // この点からのびる線の中点 SWord

halfX,halfY;

// 作られた時の角度 float madeAngle; }; // ポリゴンのデータ struct polygonList { // ポリゴンがさす点の最初 pointData *polygonPoint; // 次の連結ポリゴン polygonList *nextPolygon; // 所属する穴 pointData *voidRect; } ; static void addPolygon () { // 点を閉じたらポリゴンに登録する

処理(3)

if ( firstPolygon != NULL) { // 最初のポリゴンでなかったら、ポイントの場所をポリゴンリストに入れて、前のポリゴンのネクストが今のポリゴンを指す。 polygonList * tmpoly; tmpoly = (polygonList * )malloc ( sizeof (polygonList )); tmpoly->polygonPoint = firstPoint; tmpoly->nextPolygon = NULL ; tmpoly->voidRect= NULL; polOld->nextPolygon = tmpoly; polOld = tmpoly;

54


}else{ // 最初だったらファーストポリゴンリストにポリゴン登録 firstPolygon = (polygonList * )malloc ( sizeof (polygonList )); firstPolygon -> polygonPoint = firstPoint; firstPolygon -> nextPolygon = NULL; firstPolygon -> voidRect = NULL; polOld = firstPolygon; } } static void drawFigure( SWord XPos, SWord YPos ) { static SWord XPosFirst;

// 最初の x 座標

static SWord YPosFirst; drawCharacter (XPos , YPos ); drawCross (XPos , YPos ); pointData * tmpoint= NULL; if ( clickCounts != 0 ) { if (checkNearPoint ((* posOld).x , (* posOld).y , XPos , YPos) ) { // ダブルクリックで四角にする WinDrawLine ( XPosFirst, YPosFirst, XPos, YPos ); posOld->halfX = (firstPoint->realX + posOld->realX)/2; posOld->halfY = (firstPoint->realY + posOld->realY)/2; addPolygon(); redrawScreen (); clickCounts = 0; }else{ if (checkNearPoint (XPos , YPos , XPosFirst , YPosFirst)) { // 最初の点と近くなら四角にする WinDrawLine ( (* posOld).x, (* posOld).y, XPos, YPos ); WinDrawLine ( XPosFirst, YPosFirst, XPos, YPos ); posOld->halfX = (firstPoint->realX + posOld->realX)/2; posOld->halfY = (firstPoint->realY + posOld->realY)/2; addPolygon(); redrawScreen (); clickCounts = 0; }else{ // 図形の途中の線を引く処理 WinDrawLine( (* posOld).x , (* posOld).y , XPos , YPos); tmpoint = (pointData * )malloc ( sizeof ( pointData ) ); tmpoint->x = XPos; tmpoint->y = YPos; tmpoint->realZ = 0;

処理(2)

tmpoint->lengZ = 20;

55


tmpoint->belongPoint = firstPoint; tmpoint->madeAngle = nowAngle; calcThreeDPoint(XPos, YPos, tmpoint); calcScreenZPoint(tmpoint); posOld->halfX = (posOld->realX + tmpoint->realX)/2; posOld->halfY = (posOld->realY + tmpoint->realY)/2; (*tmpoint).next = NULL;

処理(2)

posOld->next = tmpoint; clickCounts++; posOld = tmpoint; } } } else { // 最初の点を登録 SndPlaySystemSound( sndWarning ); if (selectPolygon != NULL) selectPolygon = NULL; firstPoint = (pointData * )malloc ( sizeof (pointData )); firstPoint->x = XPos; firstPoint->y = YPos;

処理(2)

firstPoint->realZ = 0; firstPoint->lengZ = 20; firstPoint->belongPoint = firstPoint; firstPoint->madeAngle = nowAngle; calcThreeDPoint(XPos,YPos,firstPoint); calcScreenZPoint(firstPoint); firstPoint->next = NULL; XPosFirst = XPos; YPosFirst = YPos; clickCounts++;

処理(2)

posOld = firstPoint; } }

56


2 . 画面の再描画処理 画面に描いている図形を一旦消去し、現在の最新データを再描画する関数の流れ(図 7-5-2)

処理の流れ

この領域を消す

処理 4

図形を描く

firstPolygon

polygonList

pointData pointData pointData NULL

polygonList

pointData pointData NULL 処理 5

polygonList

pointData pointData

.......

....... 選択点を表示

firstPolygonからポイントを辿って底面を描く

[drawSelectPoint();]

if (selectPolygon != NULL) 処理 6

drawMode

[drawPreRect();] [drawPreBuilding();] グリッドを描く 周りの建物を描く

editMode

editMode

[drawPreBuilding();]

[drawBitmap();] [drawPreBuilding();] GLを描く

周りの建物を描く

背景を描く 周りの建物を描く

(図 7-5-2)

57


関連関数 static void redrawScreen( void ) { DWordwidth, height, depth; Boolean enableC; DWordmenuBarHeight=15; pointData

*i;

pointData

*iOld ;

polygonList *ppr; Err err = ScrDisplayMode( scrDisplayModeGet, &width, &height, &depth, &enableC ); RectangleType rect; rect.topLeft.x=0; rect.topLeft.y=menuBarHeight;

処理 4

rect.extent.x=width; rect.extent.y=height-menuBarHeight; WinEraseRectangle(&rect,0);

if (bitmapTowerPoint.x >= 0 && bitmapTowerPoint.x <= 160 && whatIsScreenMode == viewMode) drawBitmap(); // ポリゴンをたどって図形描画 for ( ppr = firstPolygon ; ppr != NULL ; ppr=ppr->nextPolygon ) { // ポイントたどって図形描画 for ( i = ppr->polygonPoint->next, iOld =ppr->polygonPoint ; i != NULL ; i=i->next ) { if (iOld->halfY >0 || whatIsScreenMode == planMode) { WinDrawLine ( i->x , i->y, iOld->x, iOld->y); WinDrawLine ( i->x , i->y+1, iOld->x, iOld->y+1); }else{ WinDrawLine ( i->x, i->y, iOld->x, iOld->y); } iOld = i;

処理 5

} if(iOld->halfY >0 || whatIsScreenMode == planMode) { WinDrawLine ( iOld->x, iOld->y , ppr->polygonPoint->x, ppr->polygonPoint->y) ; WinDrawLine ( iOld->x+1, iOld->y , ppr->polygonPoint->x+1, ppr->polygonPoint->y) ; }else{ WinDrawLine ( iOld->x, iOld->y , ppr->polygonPoint->x, ppr->polygonPoint->y) ; } } clickCounts = 0;

58


if (whatIsScreenMode != planMode) { // 三次元表示をしましょう for (ppr = firstPolygon ; ppr != NULL ; ppr = ppr->nextPolygon) { //threeDimension(ppr); newThreeDimension(ppr, 0); } } // セレクトポリゴンを示しましょう if (selectPolygon != NULL) { drawSelectPoint(); } switch (whatIsScreenMode) { // 基準線を引く case drawMode: drawPreRect(); if(GPSMode != 0) { drawPreBuilding(); } break; // なんにもしなない

処理 6

case editMode: if(GPSMode != 0) { drawPreBuilding(); } break; //GL を描く case viewMode: WinDrawLine(0,height*3/4,width,height*3/4); WinDrawLine(0,height*3/4+1,width,height*3/4+1); if(GPSMode != 0) { drawPreBuilding(); } //drawVoidRect(); break; case planMode: break; } }

59


3 . ハンドルイベント処理

ctlSelectEvent ctlRepeatEvent

frmOpenEvent menuEvent

ペンを用いて操作を行った時に何をするか判断する関数の流れ図(図 7-5-3)

MainFormDoCommand メニューの関数へ

MainFormInit

penDownEvent penMoveEvent

フォームを表示する

FrmDrawForm setPreRect

グリッドを表示する

drawPreRect フォーム表示へ フォームのイベント rotatePreBuild rotatePreRect rotateObjects rotateBitmap

諸処のオブジェクトを回転 回転処理は仮想三次元空間 の座標しか計算しない。

reconstructScreen 仮想三次元座標からスクリーン座標を計算して描画 nowAngle 今の角度を変更 スクリーン表示へ リピートボタンのイベント

ctlMode - モードボタン

changeLabel - モードを変える

ctlDelete - デリートボタン

deletePolygon - 図形削除

ctlPenMode - ペンの形ボタン

changePenModeLabel -ペン変更

ctlPenColor - ペンの色ボタン

changePenColorLabel - 色変更

ボタンのイベント

drawMode

penUpEvent

メニュー表示へ

メニューのイベント

editMode

drawFigure (図形を描く)

penUpDownCheck 下に点があるかチェック

viewMode penUpDownCheck 下に点があるかチェック

なかったら drawPen ペンを描く

なにもしない 上面だったら editHightPoint 一点の高さ編集

なにもしない

なかったら

上面だったら

editHightPolygon 全体の高さ編集

editHightPoint 一点の高さ編集

drawPenLine drawPenRect ラインか四角を描く

底面だったら

底面だったら

selectPoint= eventP 底面の位置編集

なにもしない

drawSelectPoint 選択点を描く

penUpDownSelect 点の有無検査・選択

drawSelectPoint 選択点を描く

penUpDownSelect 点の有無検査・選択

60 (図 7-5-3)


関連関数 static Boolean MainFormHandleEvent(EventPtr eventP) { Boolean handled = false; FormPtr frmP; // ペンダウンの点(イベントを抜けるたびに他の変数にならないように static) static SWord downX, downY; // ペンムーブの時のその前に拾った点 static SWord oldX,oldY; //x と y 座標をエディットするのに 0 だったらポリゴン全体の高さを変える。 //1 だったらポイントを移動 //2 だったら一点の高さを変える。 static short movePoint = 0; // 高さを変えたらセレクトポリゴンを解除しない -0 だったら高さを変えていない。 static Boolean moveHight = 0; // ペンダウンの時の点を記憶 SWord tempZ, menuBarHeight=15; switch (eventP->eType) { case menuEvent: return MainFormDoCommand(eventP->data.menu.itemID); case frmOpenEvent: frmP = FrmGetActiveForm(); MainFormInit( frmP); FrmDrawForm ( frmP); setPreRect(); drawPreRect(); elevationBitmap(); handled = true; break; // リピートボタンイベント - 回転するためのボタン case ctlRepeatEvent: switch (eventP->data.ctlEnter.controlID) { case ctlTurnleft : rotatePreBuild(0); rotatePreRect(0); rotateObjects(0); rotateBitmap(0); reconstructScreen(); nowAngle = nowAngle + pai/32; break;

61


case ctlTurnRight : rotatePreBuild(1); rotatePreRect(1); rotateObjects(1); rotateBitmap(1); reconstructScreen(); nowAngle = nowAngle - pai/32; break; } break; // ボタンイベント case ctlSelectEvent: switch (eventP->data.ctlEnter.controlID) { case ctlMode : changeLabel(eventP->data.ctlEnter.controlID); break; case ctlDelete : deletePolygon(); break; case ctlPenMode : if (whatIsScreenMode == viewMode) changePenModeLabel(eventP->data.ctlEnter.controlID); break; case ctlPenColor : if (whatIsScreenMode == viewMode) changePenColorLabel(eventP->data.ctlEnter.controlID); break; } break; // ペンをおいた時のイベント case penDownEvent: downX = (eventP->screenX); downY = (eventP->screenY); switch (whatIsScreenMode) { case drawMode: // 描画モードで描画ゾーンだったら if (eventP->screenY >menuBarHeight) { // 図形を描く drawFigure (eventP->screenX,eventP->screenY); } break;

62


case editMode: // ペンのしたにポイントがあったらポイントを動かす movePoint = penUpDownCheck(eventP->screenX,eventP->screenY); break; case viewMode: // 描閲覧モードで描画ゾーンだったら movePoint = penUpDownCheck(eventP->screenX,eventP->screenY); if (movePoint) { }else{ if (eventP->screenY >menuBarHeight) { if (penMode == LineMode) { drawPen(eventP->screenX, eventP->screenY); oldX = NULL; oldY = NULL; } } } break; } handled = false; break;

case penMoveEvent: switch (whatIsScreenMode) { case drawMode: break; case editMode: switch (movePoint) { case 0: // 全体の高さを変える if (selectPolygon!= NULL) { tempZ= downY - (eventP->screenY); editHightPolygon(tempZ); drawCharacter( 1, downY ); moveHight = 1; } break; case 1: selectPoint->x = eventP->screenX;

63


selectPoint->y = eventP->screenY; calcThreeDPoint(eventP->screenX,eventP->screenY,selectPoint); reconstructScreen(); break; case 2: editHightPoint(selectPoint , (downY - eventP->screenY)); reconstructScreen(); moveHight = 1; break; } break; case viewMode: { switch (movePoint) { case 0: if (penMode == LineMode) { drawPenLine(eventP->screenX, eventP->screenY, oldX, oldY, downX, downY); oldX = eventP->screenX; oldY = eventP->screenY; }else{ drawPenRect(downX, downY, eventP->screenX, eventP->screenY); } break; case 1: break; case 2: editHightPoint(selectPoint, (downY- eventP->screenY)); reconstructScreen(); moveHight = 1; break; } } break; } handled = false; break;

case penUpEvent: switch (whatIsScreenMode) { case drawMode: break;

64


case editMode: if (moveHight == 0) { penUpDownSelect (eventP->screenX,eventP->screenY); redrawScreen(); }else{ drawSelectPoint(); moveHight = 0; } break; case viewMode: if (moveHight == 0) { if(penUpDownSelect(eventP->screenX, eventP->screenY)) { redrawScreen(); } }else{ drawSelectPoint(); moveHight = 0; } break; } movePoint = 0; handled = false; break;

default: break; } return handled; }

65


1 . 図形を描いてポリゴンに登録する処理

図形を描いてポリゴンに登録する。図形を描くのは drawFigure、ポリゴンリストに登 録するのは a d d P o l y g o n 、タップした点の三次元座標を計算し、格納するのが calcThreeDPoint。移動した時の二次元座標を計算するのが calcScreenPoint。 (図 7-5-1) スクリーン上に表示 screenX, screenY

最初だけ

pointData SWord x; SWord y; SWord zx,zy;

[calcScreenPoint] 三次元->二次元

double realX,realY; double realZ,lengZ;

[calcThreeDPoint]

[drawFigure]

二次元->三次元

タップ タップ

処理(1)

....

タップ

ダブルタップ or 最初の点タップ

処理(2)

[addPolygon] 処理(3)

polygonList *polygonPoint;

pointData

pointData

pointData

screen data real data

screen data real data

screen data real data

* next; *belongPoint;

* next; *belongPoint;

* next; *belongPoint;

pointData

pointData

pointData

screen data real data

screen data real data

screen data real data

* next; *belongPoint;

* next; *belongPoint;

* next; *belongPoint;

*nextPolygon;

polygonList *polygonPoint;

....

*nextPolygon;

NULL

....

NULL

....

作られてゆくデータ (図 7-5-1) 66


関連構造体、関数 // 点のデータ struct pointData { // スクリーン上の値 // 上面の x、y 座標。x は共有。y から引く長さ。 SWord

x,y,zx,zy;

// 仮想三次元上の値 //realX は x 座標、realY は y 座標。 //realZ は座標の高さ。lengZ はその点の上の点までの長さ double

realX,realY,realZ,lengZ;

// 連結する次のポリゴン pointData * next; // 所属する最初のポイント pointData *belongPoint; // この点からのびる線の中点 SWord

halfX,halfY;

// 作られた時の角度 float madeAngle; }; // ポリゴンのデータ struct polygonList { // ポリゴンがさす点の最初 pointData *polygonPoint; // 次の連結ポリゴン polygonList *nextPolygon; // 所属する穴 pointData *voidRect; } ; static void addPolygon () { // 点を閉じたらポリゴンに登録する

処理(3)

if ( firstPolygon != NULL) { // 最初のポリゴンでなかったら、ポイントの場所をポリゴンリストに入れて、前のポリゴンのネクストが今のポリゴンを指す。 polygonList * tmpoly; tmpoly = (polygonList * )malloc ( sizeof (polygonList )); tmpoly->polygonPoint = firstPoint; tmpoly->nextPolygon = NULL ; tmpoly->voidRect= NULL; polOld->nextPolygon = tmpoly; polOld = tmpoly;

67


}else{ // 最初だったらファーストポリゴンリストにポリゴン登録 firstPolygon = (polygonList * )malloc ( sizeof (polygonList )); firstPolygon -> polygonPoint = firstPoint; firstPolygon -> nextPolygon = NULL; firstPolygon -> voidRect = NULL; polOld = firstPolygon; } } static void drawFigure( SWord XPos, SWord YPos ) { static SWord XPosFirst;

// 最初の x 座標

static SWord YPosFirst; drawCharacter (XPos , YPos ); drawCross (XPos , YPos ); pointData * tmpoint= NULL; if ( clickCounts != 0 ) { if (checkNearPoint ((* posOld).x , (* posOld).y , XPos , YPos) ) { // ダブルクリックで四角にする WinDrawLine ( XPosFirst, YPosFirst, XPos, YPos ); posOld->halfX = (firstPoint->realX + posOld->realX)/2; posOld->halfY = (firstPoint->realY + posOld->realY)/2; addPolygon(); redrawScreen (); clickCounts = 0; }else{ if (checkNearPoint (XPos , YPos , XPosFirst , YPosFirst)) { // 最初の点と近くなら四角にする WinDrawLine ( (* posOld).x, (* posOld).y, XPos, YPos ); WinDrawLine ( XPosFirst, YPosFirst, XPos, YPos ); posOld->halfX = (firstPoint->realX + posOld->realX)/2; posOld->halfY = (firstPoint->realY + posOld->realY)/2; addPolygon(); redrawScreen (); clickCounts = 0; }else{ // 図形の途中の線を引く処理 WinDrawLine( (* posOld).x , (* posOld).y , XPos , YPos); tmpoint = (pointData * )malloc ( sizeof ( pointData ) ); tmpoint->x = XPos; tmpoint->y = YPos; tmpoint->realZ = 0;

処理(2)

tmpoint->lengZ = 20;

68


tmpoint->belongPoint = firstPoint; tmpoint->madeAngle = nowAngle; calcThreeDPoint(XPos, YPos, tmpoint); calcScreenZPoint(tmpoint); posOld->halfX = (posOld->realX + tmpoint->realX)/2; posOld->halfY = (posOld->realY + tmpoint->realY)/2; (*tmpoint).next = NULL;

処理(2)

posOld->next = tmpoint; clickCounts++; posOld = tmpoint; } } } else { // 最初の点を登録 SndPlaySystemSound( sndWarning ); if (selectPolygon != NULL) selectPolygon = NULL; firstPoint = (pointData * )malloc ( sizeof (pointData )); firstPoint->x = XPos; firstPoint->y = YPos;

処理(2)

firstPoint->realZ = 0; firstPoint->lengZ = 20; firstPoint->belongPoint = firstPoint; firstPoint->madeAngle = nowAngle; calcThreeDPoint(XPos,YPos,firstPoint); calcScreenZPoint(firstPoint); firstPoint->next = NULL; XPosFirst = XPos; YPosFirst = YPos; clickCounts++;

処理(2)

posOld = firstPoint; } }

69


2 . 画面の再描画処理 画面に描いている図形を一旦消去し、現在の最新データを再描画する関数の流れ(図 7-5-2)

処理の流れ

この領域を消す

処理 4

図形を描く

firstPolygon

polygonList

pointData pointData pointData NULL

polygonList

pointData pointData NULL 処理 5

polygonList

pointData pointData

.......

....... 選択点を表示

firstPolygonからポイントを辿って底面を描く

[drawSelectPoint();]

if (selectPolygon != NULL) 処理 6

drawMode

[drawPreRect();] [drawPreBuilding();] グリッドを描く 周りの建物を描く

editMode

editMode

[drawPreBuilding();]

[drawBitmap();] [drawPreBuilding();] GLを描く

周りの建物を描く

背景を描く 周りの建物を描く

(図 7-5-2)

70


関連関数 static void redrawScreen( void ) { DWordwidth, height, depth; Boolean enableC; DWordmenuBarHeight=15; pointData

*i;

pointData

*iOld ;

polygonList *ppr; Err err = ScrDisplayMode( scrDisplayModeGet, &width, &height, &depth, &enableC ); RectangleType rect; rect.topLeft.x=0; rect.topLeft.y=menuBarHeight;

処理 4

rect.extent.x=width; rect.extent.y=height-menuBarHeight; WinEraseRectangle(&rect,0);

if (bitmapTowerPoint.x >= 0 && bitmapTowerPoint.x <= 160 && whatIsScreenMode == viewMode) drawBitmap(); // ポリゴンをたどって図形描画 for ( ppr = firstPolygon ; ppr != NULL ; ppr=ppr->nextPolygon ) { // ポイントたどって図形描画 for ( i = ppr->polygonPoint->next, iOld =ppr->polygonPoint ; i != NULL ; i=i->next ) { if (iOld->halfY >0 || whatIsScreenMode == planMode) { WinDrawLine ( i->x , i->y, iOld->x, iOld->y); WinDrawLine ( i->x , i->y+1, iOld->x, iOld->y+1); }else{ WinDrawLine ( i->x, i->y, iOld->x, iOld->y); } iOld = i;

処理 5

} if(iOld->halfY >0 || whatIsScreenMode == planMode) { WinDrawLine ( iOld->x, iOld->y , ppr->polygonPoint->x, ppr->polygonPoint->y) ; WinDrawLine ( iOld->x+1, iOld->y , ppr->polygonPoint->x+1, ppr->polygonPoint->y) ; }else{ WinDrawLine ( iOld->x, iOld->y , ppr->polygonPoint->x, ppr->polygonPoint->y) ; } } clickCounts = 0;

71


if (whatIsScreenMode != planMode) { // 三次元表示をしましょう for (ppr = firstPolygon ; ppr != NULL ; ppr = ppr->nextPolygon) { //threeDimension(ppr); newThreeDimension(ppr, 0); } } // セレクトポリゴンを示しましょう if (selectPolygon != NULL) { drawSelectPoint(); } switch (whatIsScreenMode) { // 基準線を引く case drawMode: drawPreRect(); if(GPSMode != 0) { drawPreBuilding(); } break; // なんにもしなない

処理 6

case editMode: if(GPSMode != 0) { drawPreBuilding(); } break; //GL を描く case viewMode: WinDrawLine(0,height*3/4,width,height*3/4); WinDrawLine(0,height*3/4+1,width,height*3/4+1); if(GPSMode != 0) { drawPreBuilding(); } //drawVoidRect(); break; case planMode: break; } }

72


3 . ハンドルイベント処理

ペンを用いて操作を行った時に何をするか判断する関数の流れ図(図 7-5-3) MainFormDoCommand <-メニューの関数へ メニュー表示へ

メニューイベント MainFormInit FrmDrawForm setPreRect drawPreRect

フォームを表示する グリッドを表示する フォーム表示へ

フォーム関連イベント rotatePreBuild rotatePreRect rotateObjects rotateBitmap

諸処のオブジェクトを回転 回転処理は仮想三次元空間 の座標しか計算しない。

仮想三次元座標からスクリーン座標を計算して描画 reconstructScreen 今の角度を変更 nowAngle スクリーン表示へ

リピートボタンイベント

changeLabel - モードを変える deletePolygon - 図形削除 changePenModeLabel -ペン変更 changePenColorLabel - 色変更

ctlMode - モードボタン ctlDelete - デリートボタン ctlPenMode - ペンの形ボタン ctlPenColor - ペンの色ボタン ボタンイベント

penUpEvent

penMoveEvent

penDownEvent

drawMode

editMode

drawFigure (図形を描く)

viewMode

penUpDownCheck 下に点があるかチェック

penUpDownCheck 下に点があるかチェック

なかったら drawPen ペンを描く

なにもしない

なにもしない

上面だったら

なかったら

上面だったら

editHightPoint 一点の高さ編集

editHightPolygon 全体の高さ編集

editHightPoint 一点の高さ編集

drawPenLine drawPenRect ラインか四角を描く

底面だったら

底面だったら

selectPoint= eventP 底面の位置編集

なにもしない

drawSelectPoint 選択点を描く

penUpDownSelect 点の有無検査・選択

drawSelectPoint 選択点を描く

penUpDownSelect 点の有無検査・選択

73 (図 7-5-3)


関連関数 static Boolean MainFormHandleEvent(EventPtr eventP) { Boolean handled = false; FormPtr frmP; // ペンダウンの点(イベントを抜けるたびに他の変数にならないように static) static SWord downX, downY; // ペンムーブの時のその前に拾った点 static SWord oldX,oldY; //x と y 座標をエディットするのに 0 だったらポリゴン全体の高さを変える。 //1 だったらポイントを移動 //2 だったら一点の高さを変える。 static short movePoint = 0; // 高さを変えたらセレクトポリゴンを解除しない -0 だったら高さを変えていない。 static Boolean moveHight = 0; // ペンダウンの時の点を記憶 SWord tempZ, menuBarHeight=15; switch (eventP->eType) { case menuEvent: return MainFormDoCommand(eventP->data.menu.itemID); case frmOpenEvent: frmP = FrmGetActiveForm(); MainFormInit( frmP); FrmDrawForm ( frmP); setPreRect(); drawPreRect(); elevationBitmap(); handled = true; break; // リピートボタンイベント - 回転するためのボタン case ctlRepeatEvent: switch (eventP->data.ctlEnter.controlID) { case ctlTurnleft : rotatePreBuild(0); rotatePreRect(0); rotateObjects(0); rotateBitmap(0); reconstructScreen(); nowAngle = nowAngle + pai/32; break;

74


case ctlTurnRight : rotatePreBuild(1); rotatePreRect(1); rotateObjects(1); rotateBitmap(1); reconstructScreen(); nowAngle = nowAngle - pai/32; break; } break; // ボタンイベント case ctlSelectEvent: switch (eventP->data.ctlEnter.controlID) { case ctlMode : changeLabel(eventP->data.ctlEnter.controlID); break; case ctlDelete : deletePolygon(); break; case ctlPenMode : if (whatIsScreenMode == viewMode) changePenModeLabel(eventP->data.ctlEnter.controlID); break; case ctlPenColor : if (whatIsScreenMode == viewMode) changePenColorLabel(eventP->data.ctlEnter.controlID); break; } break; // ペンをおいた時のイベント case penDownEvent: downX = (eventP->screenX); downY = (eventP->screenY); switch (whatIsScreenMode) { case drawMode: // 描画モードで描画ゾーンだったら if (eventP->screenY >menuBarHeight) { // 図形を描く drawFigure (eventP->screenX,eventP->screenY); } break;

75


case editMode: // ペンのしたにポイントがあったらポイントを動かす movePoint = penUpDownCheck(eventP->screenX,eventP->screenY); break; case viewMode: // 描閲覧モードで描画ゾーンだったら movePoint = penUpDownCheck(eventP->screenX,eventP->screenY); if (movePoint) { }else{ if (eventP->screenY >menuBarHeight) { if (penMode == LineMode) { drawPen(eventP->screenX, eventP->screenY); oldX = NULL; oldY = NULL; } } } break; } handled = false; break;

case penMoveEvent: switch (whatIsScreenMode) { case drawMode: break; case editMode: switch (movePoint) { case 0: // 全体の高さを変える if (selectPolygon!= NULL) { tempZ= downY - (eventP->screenY); editHightPolygon(tempZ); drawCharacter( 1, downY ); moveHight = 1; } break; case 1: selectPoint->x = eventP->screenX;

76


selectPoint->y = eventP->screenY; calcThreeDPoint(eventP->screenX,eventP->screenY,selectPoint); reconstructScreen(); break; case 2: editHightPoint(selectPoint , (downY - eventP->screenY)); reconstructScreen(); moveHight = 1; break; } break; case viewMode: { switch (movePoint) { case 0: if (penMode == LineMode) { drawPenLine(eventP->screenX, eventP->screenY, oldX, oldY, downX, downY); oldX = eventP->screenX; oldY = eventP->screenY; }else{ drawPenRect(downX, downY, eventP->screenX, eventP->screenY); } break; case 1: break; case 2: editHightPoint(selectPoint, (downY- eventP->screenY)); reconstructScreen(); moveHight = 1; break; } } break; } handled = false; break;

case penUpEvent: switch (whatIsScreenMode) { case drawMode: break;

77


case editMode: if (moveHight == 0) { penUpDownSelect (eventP->screenX,eventP->screenY); redrawScreen(); }else{ drawSelectPoint(); moveHight = 0; } break; case viewMode: if (moveHight == 0) { if(penUpDownSelect(eventP->screenX, eventP->screenY)) { redrawScreen(); } }else{ drawSelectPoint(); moveHight = 0; } break; } movePoint = 0; handled = false; break;

default: break; } return handled; }

78


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.