Expand description
主架構(水平な大梁)が囲む閉領域(床領域の境界)の検出。
床領域は「大梁で囲まれた領域ごとに 1 つ」と定める。本モジュールは、その閉領域を
主架構のトポロジーから求める。壁領域(柱と梁が囲む鉛直構面内の閉領域)は
super::wall が同じ面走査エンジン([super::scan_faces])を使って求める。
§生成規則
- 対象は水平な 2 節点の梁要素(
ElementKind::Beam)のみ。両端の Z 差がcrate::geom::LEVEL_TOL_MM以内のものを水平とみなす。柱・ブレース・壁・二次部材は対象にしない (床領域の境界は大梁であるという定義による)。 - レベルごとに分けて面を求める。同じ Z(
crate::geom::LEVEL_TOL_MM以内)の梁を 1 つの 平面グラフとして扱う。 - 面走査は半辺(有向辺)をたどる定型手法による([
super::scan_faces])。 - 外周面は符号付き面積が負になるため、これを捨てる。面積の大小では判別しない (中庭のある建物では、面積最大の内部面が外周面より大きくなりうる)。
- 行き止まりの辺(片持ち梁など、片端が他の梁と繋がらない梁)は、面走査が 往復してその場に戻るため面を作らない。往復ぶんは外周面に吸収される。
§平面グラフであることの前提
面走査は、辺どうしが節点でのみ接することを前提とする。節点を共有せずに交差する梁が
あると、検出される床領域は実際とずれるが、走査自体はエラーにならず黙って通る。
scan_region_boundaries はその組を RegionBoundaryScan::crossings として報告する
(検出は続行する。モデルの不備として利用者へ知らせるための情報である)。
§扱わないもの
- 穴(中庭)を持つ面。グラフが非連結で、ある閉路の内側に独立した閉路がある場合、 外側の面は内側の存在を無視した多角形として返る。実建物では中庭のまわりに梁が 通るため(=連結する)、この形は稀である。
- 段差床。レベルで分けるため、同じ階でもレベルが違えば別の平面グラフになる。 段差部の梁は両方のレベルのどちらにも属さない(両端の Z が違うため水平とみなされない)。
Structs§
- Region
Boundary - 主架構が囲む閉領域(床領域の境界)1 つ。
- Region
Boundary Scan - 面走査の結果。床領域の境界に加え、平面グラフとして矛盾がある兆候を持ち帰る。
Functions§
- crossing_
beams - 節点を共有せずに交差している水平大梁の組を、レベルごとに集めて返す。
- generate_
region_ boundaries scan_region_boundariesの境界だけを取り出す薄いラッパ。- scan_
region_ boundaries - 主架構(水平な大梁)が囲む閉領域を、レベルごとに検出する。