Skip to main content

Module region_gen

Module region_gen 

Source
Expand description

主架構が囲む閉領域(床領域・壁領域の境界)の検出。

床領域は「大梁で囲まれた領域ごとに 1 つ」、壁領域は「柱と梁が囲む鉛直構面内の 閉領域ごとに 1 つ」と定める。本モジュールは、その閉領域を主架構のトポロジーから 求める半辺(有向辺)面走査エンジン([scan_faces])を共有し、床(floor)と 壁(wall)がそれぞれ「対象部材の絞り込み」と「2 次元への射影」を用意して 同じ走査に載せる。

設計の経緯は dev_docs/handoff/床領域・壁領域の再設計_申し送り.md を参照。

§面走査エンジン([scan_faces])

  1. 半辺(有向辺)の一覧を作る。同じ節点対に複数の部材があっても、最初の 1 本だけを採る (重複部材は面を増やさない)。
  2. 各節点まわりの接続先を、proj(節点 → 局所 2D 座標)が返す座標の方位角の昇順に並べる。
  3. 半辺 u→v の次を「v のまわりで v→u の 1 つ手前(時計回りに次)」とすると、 内部を左に見て一周する閉路が得られる(定型の面走査)。
  4. 得られた閉路すべてを、符号付き面積つきで返す。どれが外周面かの判別は呼び出し側が行う。 床は「符号付き面積が負」で判別できる(グローバル XY・+Z を上とする固定の向きで 常に判定できるため)。壁は局所座標 (s, z) の水平方向 s が構面ごとに任意に決まり、 床と同じ絶対符号の規則を機械的に流用できるとは限らないため、wall が自身で 判別方法を持つ(wall のモジュールドキュメント参照)。

projNone を返す節点(節点が引けない陳腐化した参照)を含む閉路は捨てる。

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;

Modules§

floor
主架構(水平な大梁)が囲む閉領域(床領域の境界)の検出。
wall
柱・梁が囲む鉛直構面内の閉領域(壁領域の境界)の検出。