Expand description
主架構が囲む閉領域(床領域・壁領域の境界)の検出。
床領域は「大梁で囲まれた領域ごとに 1 つ」、壁領域は「柱と梁が囲む鉛直構面内の
閉領域ごとに 1 つ」と定める。本モジュールは、その閉領域を主架構のトポロジーから
求める半辺(有向辺)面走査エンジン([scan_faces])を共有し、床(floor)と
壁(wall)がそれぞれ「対象部材の絞り込み」と「2 次元への射影」を用意して
同じ走査に載せる。
設計の経緯は dev_docs/handoff/床領域・壁領域の再設計_申し送り.md を参照。
§面走査エンジン([scan_faces])
- 半辺(有向辺)の一覧を作る。同じ節点対に複数の部材があっても、最初の 1 本だけを採る (重複部材は面を増やさない)。
- 各節点まわりの接続先を、
proj(節点 → 局所 2D 座標)が返す座標の方位角の昇順に並べる。 - 半辺
u→vの次を「vのまわりでv→uの 1 つ手前(時計回りに次)」とすると、 内部を左に見て一周する閉路が得られる(定型の面走査)。 - 得られた閉路すべてを、符号付き面積つきで返す。どれが外周面かの判別は呼び出し側が行う。
床は「符号付き面積が負」で判別できる(グローバル XY・+Z を上とする固定の向きで
常に判定できるため)。壁は局所座標
(s, z)の水平方向sが構面ごとに任意に決まり、 床と同じ絶対符号の規則を機械的に流用できるとは限らないため、wallが自身で 判別方法を持つ(wallのモジュールドキュメント参照)。
proj が None を返す節点(節点が引けない陳腐化した参照)を含む閉路は捨てる。
Re-exports§
pub use floor::crossing_beams;pub use floor::generate_region_boundaries;pub use floor::scan_region_boundaries;pub use floor::RegionBoundary;pub use floor::RegionBoundaryScan;pub use wall::generate_wall_region_boundaries;pub use wall::scan_wall_region_boundaries;pub use wall::WallRegionBoundary;pub use wall::WallRegionBoundaryScan;