単位変換関数ができたので、あらためて単位質量を実装する。
前に紹介したページで英語名を見てみると・・・mass per metre。なんかそのまんまだな。
関数名にメートルと入るのは若干嫌な気もするが・・・、まあいいか。
単位質量は断面積に密度をかければよい。すなわち、H型断面には限らないので、SecSteelFunctionクラスを作り、そちらに単位質量算出の関数を作成する。
鉄骨の密度は7850kg/m3。定数はマジックナンバーにならないように。enum作ったときにconstant.tsを作ってあるのでそこに入れる。
sec/steel-function.ts
import { STEEL_DENSITY } from "../constant"; /** * 鉄骨断面に関する関数 */ export class SecSteelFunction { /** * 単位質量 * @param area 断面積 * @returns 単位質量 */ static massPerMetre(area: number): number { return STEEL_DENSITY * area; } }
非常にシンプル。前回話したように、一貫性のある単位を使わないと、こういう関数を作るたびに、係数は?と悩むことになる。
断面性能を算出するためにenum SectionPropertyTypeに単位質量を追加。
また、断面積に対して単位質量を出す関数ができたので、sec/build-h-function.tsのSecBuildHFunctionのswitchのところに、単位質量を算出するケースを追加。
case SectionPropertyType.MassPerMetre: return SecSteelFunction.massPerMetre( SecBuildHFunction.buildHArea(a, b, t1, t2) );
あとはテストを追加。 BH-1200x400x19x25の単位質量は328.5225kg/m。
今回の修正
断面積に対する単位質量を求める関数を追加 · st-func/st-func-ts@773bdd8 · GitHub
また、アドイン側にも処理を追加する。
こちらは、toSectionPropertyTypeとunitOfSectionPropertyTypeに単位質量の処理を追加するだけなので簡単。
SecBuildH関数で単位質量の算定を追加 · st-func/st_func_addin@7704150 · GitHub
build+startで無事に動いた。
普段からこのぐらいスムーズに進むといいんだけどな。