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

パスと面積集計

/L5/A/ldk は名前ではなく住所である。そして / で切られた階層は、そのまま集計の単位になる。パスは二役を兼ねている。

この二役が、建築のデータで長年ややこしかった問題を一つ消す — 粒度をどこで切るか。室で切るのか、住戸で切るのか、階で切るのか。koyu の答えは「全部で切る。パスがそれを同時に成立させる」である。

住所として

パスは人間が読める。UUID の対応表を持たずに、外の世界がこの空間を指せる。

space /L5/A/ldk ldk X1..X3 Y1..Y2 name:リビングダイニング

センサーの計測値も、予約システムも、BEMS も、/L5/A/ldk という文字列を外部キーにできる。パスがそのまま意味である。

パスの先頭セグメントは、同名の level が宣言されているときにだけレベルになる。/L1/ と書いただけではレベルは生まれない。

grid X 0 3600
grid Y 0 4000
space /L1/x room X1..X2 Y1..Y2
✖ p3.muro:line 3: /L1/x has a region, but its level cannot be determined (give it at the head of the path or with level:)

エラーであって、警告ではない。終了コードは 1 である。レベルが決まらなければ形が作れないので、これは充足性の欠落として扱われる。

パスの先頭で表せるのは一つのレベルだけなので、階を跨ぐくくり (メゾネット等) は level: 属性で明示する。

集計の階層として

領域を持つ空間は、領域を持つ子空間を持てない。親子で領域が重なるからである。

grid X 0 3600 7200
grid Y 0 4000
level L1 0 h:2400 slab:150
space /L1/home unit X1..X3 Y1..Y2
space /L1/home/a room X1..X2 Y1..Y2
space /L1/home/b room X2..X3 Y1..Y2
✖ p1.muro:line 4: Space regions overlap: /L1/home and /L1/home/a
✖ p1.muro:line 4: Space regions overlap: /L1/home and /L1/home/b

住戸を室に割るときは、親を space ではなく zone にする。ゾーンは幾何を持たず、パス接頭辞で配下を束ねるだけの、数える集約である。

grid X 0 3600 7200
grid Y 0 4000
level L1 0 h:2400 slab:150
zone /L1/home name:住戸
space /L1/home/a room X1..X2 Y1..Y2
space /L1/home/b room X2..X3 Y1..Y2
L1
  /L1/home/a	a	room	14.40 m2
  /L1/home/b	b	room	14.40 m2
  Subtotal 28.80 m2
Total 28.80 m2 (indoor floor area)
By zone (counted aggregation):
  /L1/home	住戸	28.80 m2

個々の室が出て、しかも住戸の合計が残る。「間取りに割っても住戸の言葉を失わない」というのがこの二役の効き目である。

だから設計上の指針が一つ出る — 集計したい単位が、パスの先頭側に来る。

同梱例には二つの流儀がある。

流儀何で束ねたいか
/L1/room — レベルを先頭にtwo-rooms office mansion tower complex階ごとの面積・階ごとの検査
/home/room + level:L1 — 住戸を先頭にhouse住戸ごとの面積・メゾネット

優劣ではない。何で束ねたいかの違いである。zonespace の使い分けは zone

パスは変わる。だから uid がある

改名や階層再編でパスが変われば、それを外部キーにしていたセンサーや台帳との対応は切れる。

寿命がパスより長い参照が要るときは uid: を使う。不透明なトークンで、モデル全体で一意で、パスから導出しない。

space /L5/A/ldk ldk X1..X3 Y1..Y2 uid:u-7f3k9m2qx4b8dhtv

パスから導出しないことが要である。導出すれば改名でトークンが変わり、uid の意味 — 改名を跨いで同じものを指す — が消える。機械が作るときは乱数である。

役割分担は明確である。

用途何を使うか
リポジトリの中の参照 (boundary / doors / ゾーン集計)パス
集計の階層パス
改名を跨ぐ長期の同一性 (センサー・実測・台帳)uid

uid を書けるのは spacezone の二つに閉じている。関係に書けないのは、関係の同一性が両端から導かれるからである (境界による壁の表現)。詳細は 同一性

名前空間としても働く

合成で複数のファイルを重ねるとき、層ごとの名前空間接頭辞は要らない — パスの階層がすでに名前空間である。L5.muro/L5/... を書き、core.muro/B2..L19/core/... を書けば、それだけで衝突しない。

これは USD からパス名前空間という機構だけを借りた結果である (ファイル分割と重ね合わせ)。

この先