Skip to main content

Module wall

Module wall 

Source
Expand description

柱・梁が囲む鉛直構面内の閉領域(壁領域の境界)の検出。

壁領域は「柱と梁が囲む鉛直構面内の閉領域ごとに 1 つ」と定める(D1)。床の面走査 (super::floor)は「同じレベル Z」で対象を絞り込んでから面走査にかけるが、 壁は「同じ鉛直構面(= XY 平面上の同一直線の真上)」で絞り込む必要があり、 この絞り込み自体が新規の幾何判定になる。通り芯(AxisGroup。表示専用のデータで 構造計算には一切使わない)には依存しない。直交グリッドか斜めかを問わず同じロジックで 扱う(dev_docs/handoff/床領域・壁領域の再設計_申し送り.md §3.2 E1)。

§生成規則

  1. 鉛直構面の候補は、全柱(ElementKind::Beam のうち crate::geom::is_vertical_pair を満たすもの)の柱脚位置(XY)から作る。 柱位置を crate::geom::MEMBER_AXIS_TOL_MM 以内で重複排除したうえで全ペアから 直線を作り、既に見つかっている直線と同一とみなせるものは統合する。

    同一直線とみなす判定は、角度の許容差ではなく、柱位置から直線までの実距離 [mm] で行う。 角度の許容差は直線が長いほど遠方での位置ずれが拡大するため使わない (梁の交差診断を同じ理由で角度の外積しきい値から MEMBER_AXIS_TOL_MM へ 統一した経緯(§8.3)と同じ判断)。例えば 0.5° の角度許容差は 50m 先で 436mm の ずれになり、10mm の許容差としては粗すぎる。

  2. 各直線に乗る部材は、両端の XY 射影が直線から MEMBER_AXIS_TOL_MM 以内にある ElementKind::Beam の要素(柱・梁の区別、鉛直・水平・斜めの区別は問わない)。 ブレース・壁要素・二次部材・パネルゾーンは対象にしない。

  3. 面走査は直線ごとに、局所座標 (s, z)(s=直線に沿った位置、z=グローバル Z)へ 射影して行う([super::scan_faces]、床と共通のエンジン)。1 本の直線は建物の 全高さをまとめて 1 つの平面グラフとして扱うため、複数階にまたがる壁面は 階ごとの内部面として現れる。

§非平面な壁面は複数の境界へ自然に分解される

壁領域の境界検出は常に厳密な平面(1 つの直線の真上)を対象とする。芯ずれ・ 折れ曲がり・傾きがある壁面は、1 つの WallRegionBoundary にはならず、 平面ごとに複数の境界へ自然に分解される。この前提は緩めない (複数面の節点をまとめて 1 つの境界にする近道を取らないこと。§3.2 E2)。

§面積・自重の計算について

WallRegionBoundary::area は、実座標から crate::geom::polygon::area_3d (ニューエルの公式)で求めた 3 次元面積である。壁・シェル要素の自重算定と スラブ・壁の数量拾いが共通で使う既存の関数をそのまま使い、自前実装を持たない。 トポロジー(面走査・外周面の判別)は直線への射影という近似で行ってよいが (MEMBER_AXIS_TOL_MM 以内の芯ずれ・非平面性は面走査の結果を左右しない)、 面積・荷重は理想平面へ投影せず実座標から直接求める(§3.2 E3)。芯ずれが MEMBER_AXIS_TOL_MM 相当あると、投影面積は自重計算で無視できない誤差になりうるため。

§計算量について

柱脚位置の全ペアから直線候補を作るため、柱の本数を N とすると候補数は O(N²) になる。 実建物の柱本数(数百〜数千本程度)では実用上問題にならないが、極端に柱本数が多い モデルでは遅くなりうる。梁の交差診断(super::floor::crossing_beams)も当初は 総当たりで実装し、実測して初めて走査線法へ最適化した経緯があり(§8.3)、 本モジュールも同じ方針(先に正しさを固め、実測してから最適化する)を踏襲する。

§未結線

本モジュールは幾何の検出のみを提供する。WallRegion/WallPlate への統合、 モデルとの結線(要素生成・交差診断の接続)は別の作業(Step 7+8)で行う (dev_docs/handoff/床領域・壁領域の再設計_申し送り.md §9)。

Structs§

WallRegionBoundary
柱・梁が囲む鉛直構面内の閉領域(壁領域の境界)1 つ。
WallRegionBoundaryScan
面走査の結果。壁領域の境界を持つ。

Functions§

generate_wall_region_boundaries
scan_wall_region_boundaries の境界だけを取り出す薄いラッパ。
scan_wall_region_boundaries
柱・梁(ElementKind::Beam)が囲む鉛直構面内の閉領域を検出する。