pub fn generate_frame(spec: &FrameSpec) -> Result<FrameGenResult, String>Expand description
スパンと階高から架構(節点・柱・大梁・柱脚支点・通り芯・階)を生成する。
生成規則:
- 節点は全格子点(X 通り × Y 通り × レベル)に置く。ID は
X → Y → レベルの順の連番で、
ID = 配列添字の不変条件を満たす。 - 柱は各格子点で上下に隣り合うレベルを結ぶ。基部から最上階まで通す。
- 基礎梁は基部レベルで、隣り合う通りの間に架ける。日本の建築構造では
基礎梁は必ず設けるため、オプションを設けず常に生成する(
with_girdersに 依存しない)。 - 大梁は基部より上の各レベルで、隣り合う通りの間に架ける
(
with_girdersが false なら作らない)。 - 柱脚支点は最下レベルの節点へ
FrameSpec::base_supportの拘束を与える。 - 通り芯は X 方向・Y 方向のグループを新設し、通り名は
{接頭辞}{番号}(座標の昇順に 1 から)とする。所属節点はその通りの全格子点。出所はAxisSource::Manualとし、あとで柱位置からの自動生成を実行しても 作り直されないようにする。 - 階は全レベルに 1 つずつ作る(先頭は基部の床)。階は床であり、
その列の先頭が基部であることが
squid_n_core::model::storyの不変条件である。 階名は入力を優先し、空ならdefault_story_nameで補う。所属節点・剛床・ 地震用重量は準備計算が算定する派生値のため、ここでは空のままとする。 - 床は全レベルで、隣り合う通りに囲まれた格子床領域へ 1 枚ずつ作る
(
with_slabsが false、または片方向の通りが 1 本のときは作らない)。 板厚FrameSpec::slab_thicknessの断面SLAB_SECTION_NAMEを 1 枚だけ 作り、全階の床で共有する。断面にはFrameSpec::slab_concreteの コンクリートを 1 つ作って割り当てる。
部材(柱・大梁)の断面・材料は割り当てない(モジュールドキュメント参照)。
入力が不正な場合(FrameSpec::validate)はその説明を Err で返す。