Skip to main content

Module floor

Module floor 

Source
Expand description

主架構(水平な大梁)が囲む閉領域(床領域の境界)の検出。

床領域は「大梁で囲まれた領域ごとに 1 つ」と定める。本モジュールは、その閉領域を 主架構のトポロジーから求める。壁領域(柱と梁が囲む鉛直構面内の閉領域)は super::wall が同じ面走査エンジン([super::scan_faces])を使って求める。

§生成規則

  1. 対象は水平な 2 節点の梁要素(ElementKind::Beam)のみ。両端の Z 差が crate::geom::LEVEL_TOL_MM 以内のものを水平とみなす。柱・ブレース・壁・二次部材は対象にしない (床領域の境界は大梁であるという定義による)。
  2. レベルごとに分けて面を求める。同じ Z(crate::geom::LEVEL_TOL_MM 以内)の梁を 1 つの 平面グラフとして扱う。
  3. 面走査は半辺(有向辺)をたどる定型手法による([super::scan_faces])。
  4. 外周面は符号付き面積が負になるため、これを捨てる。面積の大小では判別しない (中庭のある建物では、面積最大の内部面が外周面より大きくなりうる)。
  5. 行き止まりの辺(片持ち梁など、片端が他の梁と繋がらない梁)は、面走査が 往復してその場に戻るため面を作らない。往復ぶんは外周面に吸収される。

§平面グラフであることの前提

面走査は、辺どうしが節点でのみ接することを前提とする。節点を共有せずに交差する梁が あると、検出される床領域は実際とずれるが、走査自体はエラーにならず黙って通る。 scan_region_boundaries はその組を RegionBoundaryScan::crossings として報告する (検出は続行する。モデルの不備として利用者へ知らせるための情報である)。

§扱わないもの

  • 穴(中庭)を持つ面。グラフが非連結で、ある閉路の内側に独立した閉路がある場合、 外側の面は内側の存在を無視した多角形として返る。実建物では中庭のまわりに梁が 通るため(=連結する)、この形は稀である。
  • 段差床。レベルで分けるため、同じ階でもレベルが違えば別の平面グラフになる。 段差部の梁は両方のレベルのどちらにも属さない(両端の Z が違うため水平とみなされない)。

Structs§

RegionBoundary
主架構が囲む閉領域(床領域の境界)1 つ。
RegionBoundaryScan
面走査の結果。床領域の境界に加え、平面グラフとして矛盾がある兆候を持ち帰る。

Functions§

crossing_beams
節点を共有せずに交差している水平大梁の組を、レベルごとに集めて返す。
generate_region_boundaries
scan_region_boundaries の境界だけを取り出す薄いラッパ。
scan_region_boundaries
主架構(水平な大梁)が囲む閉領域を、レベルごとに検出する。