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

ZON — ゾーン

ZON は二つある。どちらも警告である。

コードseverity何を言うか
ZON01warningゾーンの配下に空間が一つも無い
ZON02warningゾーンと同じパスの空間がある

ゾーンは幾何を持たない。空間のようにレベルにも領域にも載らず、zone /L9/A と書くことは /L9/A/ で始まるパスの空間を束ねる、という宣言である。面積の小計・用途の継承・敷地の集約は、この接頭辞の一致だけで動く。

だからゾーンの誤りはいつもパスのずれである。ZON01 は束ねる先が無いずれ、ZON02 は束ねる対象と自分が重なったずれである。

ZON01 — ゾーンの下に空間がありません

warning

grid X 0 3600
grid Y 0 4000
level L1 0 h:2400 slab:150
space /L1/a room X1..X2 Y1..Y2
zone /wing name:西棟
There are no spaces beneath zone /wing

原因 — 配下と数えられるのは、パスが /wing/ で始まる空間だけである。一つも無い。ゾーンの面積は 0 になり、集計にも koyu stats のゾーン別の表にも何も現れない。

ほとんどは、ゾーンのパスと空間のパスがずれているだけである。/wing と書いたが空間は /L1/wing/a にある、というのが典型で、この二つは接頭辞として一致しない。

直し方 — ゾーンのパスを、配下の空間の共通接頭辞に合わせる。

grid X 0 3600
grid Y 0 4000
level L1 0 h:2400 slab:150
space /L1/wing/a room X1..X2 Y1..Y2
zone /L1/wing name:西棟

まだ空間を書いていないだけなら、書けば消える。空のゾーンを先に置いて後から埋めるのは正しい書き方である — 警告どまりなのはそのためで、--strict を回している間だけ邪魔になる。

敷地のゾーンで出やすい。zone /site site:1 を宣言して polygon だけ書き、敷地内の外部空間 (庭・通路) をまだ書いていないと、これが出る。敷地の面積は多角形が与えるので導出は動くが、配下が空であることは知らされる。

ZON02 — ゾーンと同じパスの空間があります

warning

grid X 0 3600 7200
grid Y 0 4000
level L1 0 h:2400 slab:150
space /L1/a room X1..X2 Y1..Y2
space /L1/a/x room X2..X3 Y1..Y2
zone /L1/a name:重なった名
A space shares its path with a zone (settle on one of them): /L1/a

原因 — パスが同一性であるのに、同じパス /L1/a空間 (領域を持つ実体) とゾーン (集約) の両方がある。ゾーン /L1/a/L1/a/x を束ね、空間 /L1/a は自分の領域を持つ。面積を二重に数える読み方ができてしまう。

住戸を室に割るときに必ず踏む。「住戸をまず一室として書き、あとから中を割る」と書くと、この形になる。

直し方 — どちらかに寄せる。

割るなら、親をゾーンにする。これが正しい形である。

grid X 0 3600 7200
grid Y 0 4000
level L1 0 h:2400 slab:150
zone /L1/a name:住戸A
space /L1/a/ldk ldk X1..X2 Y1..Y2
space /L1/a/bed bedroom X2..X3 Y1..Y2

親の領域は消える。面積は子の合計としてゾーンに集まり、住戸という言葉は保たれる。親の領域を残したまま子を書くと、今度は同じレベルで領域が重なるので GEO02 がエラーで止める。

割らないなら、zone の行を消す。名前を付けたいだけなら空間に name: を書けばよい。

grid X 0 3600
grid Y 0 4000
level L1 0 h:2400 slab:150
space /L1/a room X1..X2 Y1..Y2 name:住戸A

ゾーンに書ける属性

name (表示名)、use (集計軸 — 配下の空間へ継承される)、site (0/1 — このゾーンが敷地であるという宣言)、area (敷地の宣言面積 ㎡、測量値)、uid (永続同一性トークン)。これ以外のキーは、ドット区切りの名前空間 (acme.owner) を持たなければ ATT03 になる。

関連