メインコンテンツまでスキップ

階をつなぐ (階段・シャフト・吹抜け)

上下に重なる空間のあいだに、階段・エレベーターシャフト・吹抜けを書く。段数も踏面も勾配も書かず、形は導出させる。

以下の出力例のファイルパスは、実際には絶対パスで出る。読みやすさのためファイル名だけに縮めてある。

垂直の既定は床である

平面が重なる二つの空間のあいだには、書かなくてもがある。これが既定なので、床を書く必要はない。書くのは例外のほうだけで、例外は三つしかない。

通れるか使うもの
stair通れる (扉0枚)無い階段・斜路・エスカレーター
shaft通れない無いEVシャフト・DS・PS
void通れない無い吹抜け

通行のトポロジーは stair の一語が引き受ける。階段も斜路もエスカレーターも「レベル間を通れる」という同じ関係であり、装置の違いは境界ではなく空間の側が言う。三つの型の意味は stack にまとまっている。

1. 上下に同じ位置の空間を置く

垂直の関係は、二つの空間のあいだの関係である。両端の空間が要る。階段室なら各階に階段室の空間を、シャフトなら各階にシャフトの空間を置く。

space /L1..L3/st stair X2..X3 Y1..Y2 name:階段室 use:common stair:N form:return
space /L1..L3/ev shaft X3..X4 Y1..Y2 name:EV     use:common lift:1

パスの先頭を L1..L3 のスパンで書けば、宣言済みレベルの z 順に展開される。書き方の詳細は 基準階を一度だけ書く にある。

縦動線は空間である。面積を持ち、通行でき、避難経路になる。境界だけにすると集計から落ちる。

2. 形は宣言せず、生成規則を選ぶ

段数・蹴上・踏面・勾配はどこにも書かない。書くのは「どこに・どれだけの大きさで・どちらへ上るか」だけで、レベル差と導出された走り長から形が出る。

属性意味
stair:N/E/S/W階段。上る向き (N=+Y, S=−Y, E=+X, W=−X)
ramp:N/E/S/W斜路
escalator:N/E/S/Wエスカレーター
lift:1エレベーター (走りを持たない)
form:return / form:straight折返しか直進か
slope:勾配の上限の宣言。検査に使われる

螺旋階段は書かない — 折返し (form:return) の連続として書く。属性の一覧は 縦動線 にある。

3. 垂直境界を張る

二層だけなら boundary を一本書く。

boundary /L1/hall /L2/hall type:stair

階数が多いなら stack で一度に書く。stack <末尾のセグメント> <レベル範囲> type: は、連続するレベル対ごとに垂直境界を一本ずつ張るのと同じである。

stack st L1..L3 type:stair
stack ev L1..L3 type:shaft

stack ev L1..L3 type:shaft は次の二行に等しい。

boundary /L1/ev /L2/ev type:shaft
boundary /L2/ev /L3/ev type:shaft

階を跨ぐ関係はどの階の層にも属さない。複数ファイルに割っているなら base層に置く。

確かめる

koyu 1.0
name 階をつなぐ稽古
unit mm

grid X 0 8400 11200 14000
grid Y 0 5600 8400

level L1 0 h:2800 slab:1400
level L2 4200 h:2800 slab:1400
level L3 8400 h:2800 slab:1400
level R 12600 slab:600

space /out exterior name:外部

space /L1..L3/st   stair X2..X3 Y1..Y2 name:階段室 use:common stair:N form:return
space /L1..L3/ev   shaft X3..X4 Y1..Y2 name:EV use:common lift:1
space /L1..L3/hall hall  X2..X4 Y2..Y3 name:乗場ホール use:common

space /L1/lobby     hall X1..X2 Y1..Y3 name:エントランス use:common
space /L2..L3/office room X1..X2 Y1..Y3 name:貸室 use:exclusive

boundary /L1..L3/hall /L1..L3/st t:200 spec:RC
  door w:900 name:階段防火戸
boundary /L1..L3/hall /L1..L3/ev t:200 spec:RC
boundary /L1..L3/st /L1..L3/ev t:200 spec:RC

boundary /L1/lobby /L1/st t:200 spec:RC
boundary /L1/lobby /L1/hall type:open
boundary /L1/lobby /out edge:W t:200 spec:CW
  door w:1800 name:正面出入口
boundary /L1/lobby /out edge:N t:200 spec:CW
boundary /L1/lobby /out edge:S t:200 spec:CW

boundary /L2..L3/office /L2..L3/st t:200 spec:RC
boundary /L2..L3/office /L2..L3/hall t:200 spec:RC
  door w:1600 name:貸室入口
boundary /L2..L3/office /out edge:W t:200 spec:CW
boundary /L2..L3/office /out edge:N t:200 spec:CW
boundary /L2..L3/office /out edge:S t:200 spec:CW

boundary /L1..L3/st /out edge:S t:200 spec:RC
boundary /L1..L3/ev /out edge:S t:200 spec:RC
boundary /L1..L3/ev /out edge:E t:200 spec:RC
boundary /L1..L3/hall /out edge:N t:200 spec:RC
boundary /L1..L3/hall /out edge:E t:200 spec:RC

stack st L1..L3 type:stair
stack ev L1..L3 type:shaft
$ npx tsx src/cli.ts check vert.muro
✔ Consistent — 13 spaces / 43 boundaries
  Structural consistency only — architectural validity is what koyu validate says, separately

koyu runs が、書かなかった形を答える。段数も踏面も原本のどこにも無い。

$ npx tsx src/cli.ts runs vert.muro
L1→L2	lift	EV	/L1/ev
L1→L2	stair	階段室	rise 4200mm	return	24 risers of 175mm, tread 300mm	going 6600mm	/L1/st
L2→L3	lift	EV	/L2/ev
L2→L3	stair	階段室	rise 4200mm	return	24 risers of 175mm, tread 300mm	going 6600mm	/L2/st
L3→R	lift	EV	/L3/ev
L3→R	stair	階段室	rise 4200mm	return	24 risers of 175mm, tread 300mm	going 6600mm	/L3/st

階段は通行の辺になり、扉を増やさない。3階の貸室から外までの4枚は、貸室入口・階段防火戸 (3階)・階段防火戸 (1階)・正面出入口である — 2層降りるあいだ扉は1枚も増えない。

$ npx tsx src/cli.ts doors vert.muro /L3/office /out
4 doors — /L3/office → /L3/hall → /L3/st → /L2/st → /L1/st → /L1/hall → /L1/lobby → /out

シャフトは通れない。連続していても通行路ではない。

$ npx tsx src/cli.ts doors vert.muro /L1/ev /L2/ev
Cannot reach /L2/ev from /L1/ev

吹抜けを書く

下階の天井が抜けているところには、上階側に void 型の空間を置き、下階の空間との間に type:void の垂直境界を書く。

space /L2/void void X2..X3 Y1..Y2 name:リビング上部

boundary /L1/ldk /L2/void type:void

void は床面積に算入されない。koyu stats がそう言う。

L2
  /L2/bed	主寝室	bedroom	26.50 m2
  /L2/hall	2階ホール	hall	13.25 m2
  /L2/void	リビング上部	void (not counted as floor area)
  Subtotal 39.75 m2

通行もできない。koyu graph↕ void は辺に見えるが、渡れない辺である。

/L2/void (リビング上部)
  ↕ void → /L1/ldk
  | wall → /L2/bed
  | wall → /L2/hall
$ npx tsx src/cli.ts doors two.muro /L1/ldk /L2/void
Cannot reach /L2/void from /L1/ldk

落ちるところ

形はあるのに繋がっていない — run.disconnected (caution)

stair:form: を書いたのに stack も垂直境界も書いていないと、階段の形は導出されるのに通行のグラフは切れたままになる。check は緑を返す。捕まえるのは koyu validate である。

⚠ [run.disconnected] vert-nostack.muro:line 15: /L1/st has a vertical-circulation form but no vertical boundary connecting the levels (write stack or boundary type:stair — the form exists, but the graph cannot pass)
⚠ [run.disconnected] vert-nostack.muro:line 15: /L2/st has a vertical-circulation form but no vertical boundary connecting the levels (write stack or boundary type:stair — the form exists, but the graph cannot pass)
⚠ [run.disconnected] vert-nostack.muro:line 15: /L3/st has a vertical-circulation form but no vertical boundary connecting the levels (write stack or boundary type:stair — the form exists, but the graph cannot pass)

段が窮屈になる — stair.proportion (caution)

階段室が短すぎると、同じ段数を短い走りに詰め込むので踏面が痩せる。上の例の階段室の奥行を 8400 から 4000 に縮めると、

$ npx tsx src/cli.ts runs vert-cramped.muro
L1→L2	lift	EV	/L1/ev
L1→L2	stair	階段室	rise 4200mm	return	24 risers of 175mm, tread 164mm	going 3600mm	/L1/st
⚠ [stair.proportion] vert-cramped.muro:line 15: Derived step dimensions are cramped: 24 risers of 175mm, tread 164mm (2*riser+tread = 514mm; expected 550-700mm)

直すのは階段の寸法ではなく、階段室の大きさである。階高から必要な走り長を先に決める手順は 書く前に寸法を決める にある。

シャフトを通って避難させてしまう

doors が「到達できません」を返す原因のうち、最も気づきにくいのが shaftvoid である。エレベーターシャフトは全階を貫いていても通行路ではない。避難経路は必ず stair を通す。

次に