平面 — 分類つき2Dエンティティ
平面は水平断面ではない。立体を切っただけでは平面図にならない。次の四つは、どれだけ正確に切っても出てこない。
- 扉の開き勝手 — 動きの記号であって、そこに物は無い
- 上の吹抜けの見上げ — 切断面より上のものが下階の平面に落ちる
- 切断線そのもの — 切れたことの位置
- 下りる走り — 切断面より下の見えがかり
消費者に「立体から切れ」と言えば、この四つを各自が発明することになる。上部吹抜けの投影は実際にそうして落ちた — 同梱例に 11 件あるものが、あるビュアーの平面から一つも出ていなかった。
だから Form は平面を分類つきの2Dエンティティ集合として持つ。
form.plans // レベルごとに一つ
// { level: "L1", cut: 1200, cutZ: 1200, entities: [ … ] }
エンティティ
interface PlanEntity {
class: "cut" | "below" | "above" | "swing" | "anchor";
of: "space" | "boundary" | "opening" | "column" | "run";
ref: string; // 対象の同一性
role?: "outline" | "tread" | "break" | "arrow";
polygon?: Pt[];
lines?: Seg2[];
arc?: { cx, cy, r, from, to, ccw };
anchor?: { x, y, up? };
}
| 分類 | 意味 |
|---|---|
cut | 切断面が切ったもの |
below | 切断面より下の見えがかり |
above | 切断面より上のものの投影 |
swing | 動きの軌跡(扉) |
anchor | 記号を置く座 |
role は縦動線のエンティティが作図の中で何の線かを言う — 走りの側線 (outline)、段鼻や段の刻み (tread)、切断線 (break)、進む向きの矢印 (arrow)。
examples/two-rooms.muro の L1 は 25 個のエンティティを持つ。
cut/space 2 cut/boundary 11 above/boundary 4 below/boundary 2
cut/opening 4 swing/opening 2
壁の区間が三つの分類に割れているのが読める。切断面 (z = 1200) を含む区間が cut、垂れ壁が above、腰壁が below である。
切断高さは Form の入力であって、中身ではない
derive(model) // cut = 1200 (CUT_HEIGHT)
derive(model, { cut: 900 })
FormPlan.cut は FL からの高さ、cutZ は世界座標での高さである。切断高さを変えれば分類が変わる — それは同じ形の別の切り方であって、別の形ではない。
壁と開口
境界に材があれば、開口で割られた区間のそれぞれが一つのエンティティになる。区間の z 範囲と切断面を比べ、跨いでいれば cut、上端が切断面より下なら below、そうでなければ above に落ちる。材を持たない境界(type:open)は芯線分だけを持つ。
区間は足あと(厚みのある四辺形)と芯線の両方を持つ。厚みを持つものとして描くか一本の線として描くか(遮蔽しない手すり・柵)は見た目の判断なので、消費者が足あとから芯線を復元しなくて済むようにしてある。
開口は建具そのものの帯を持ち、扉なら swing のエンティティが続く。引戸・自動扉には円弧が無く、吊元から葉の先端への線分だけが出る。
平面の黒帯はForm の「切られた区間」そのものである。紙の色で塗り潰す操作はどこにも無い。
上る走りと下りる走り
一枚の平面には二つの走りが出る — このレベルから上る走りと、このレベルへ下りる走りである。これが階段が階ごとに違う姿で現れる理由であり、平面が「そのレベルで切った断面」だという事実そのものである。
上る走りは部品ごとに、その z の範囲と切断面を比べて可視区間を決める。切断面が部品の上端以上なら丸ごと見え、下端以下なら丸ごと見えず、跨ぐなら跨いだ位置で切れる。判定は幾何だけで行い、部品の番号では決めない — 並列の台は同じ高さで切られるので、こう書いてはじめて二台目に窓が出る。
下りる走りは、同じ枠を共有する双子の上る走りが隠した残りに現れる。双子であるには、矩形の四座標が SPAN_EPS 以内で一致し、向き・形式・装置・部品数がすべて一致していなければならない。位置だけで照合すると鏡像が出る。双子が無ければ下りる走りは丸ごと見える。
上る走りは cut、下りる走りは below に落ちる。
段鼻は部品の t0 を起点に踏面の刻みで並べ、可視区間の外は落とす。エスカレーターの段の刻みは可視区間の始点を起点に STEP_MARK(400mm)の一定ピッチで並べる。
矢印は、エスカレーターなら台ごとに、階段と斜路なら出発する走り(上りの面)/ 到着する走り(下りの面)に一本。向きは人の進む向きだけから決まる。エスカレーターはどちらの面でも同じ向きを指し、階段と斜路は下りの面で反転する — 機械の向きは固定で、人の向きは面で変わる。可視区間が 900mm を下回れば矢印は出ない。
anchor は注記の座だけを返す。段数も勾配も縦動線の側にあり、それを言葉にするのは描画側である。
切断線は、走りが切断面を跨いだ位置を走りの幅いっぱいに横切る一本の線分である。作図慣習の平行な二本の斜線は見た目であり、描画側が引く。
上部吹抜けの投影
void の境界で結ばれた上下の空間について、上の空間の導出された形が下階の平面に above として落ちる。割付で落とすと、描かれた線で切られた吹抜けが切られる前の姿で出る。
敷地境界線は最下階に出る
Form の site は与件の敷地形状を、レベルに関係なく持つ。
koyu plan は最下階の平面を配置図兼用とし、そこにだけ敷地境界線を一点鎖線で描く。これは紙面の構成の判断であって形ではない — どのレベルの図に載せるかも、一点鎖線という線種も、凍る面の外にある。