メッシュ筋

メッシュ筋は、溶接金網を材質とし、コンクリートのスラブや壁にホストされる補強鉄筋のレイヤです。

通常、メッシュ筋は互いに重なる溶接金網シートのパターンで作成され、1 つのシートから次のシートに連続して荷重を転送できます。シートは、コンクリート要素内の 1 つまたは複数のレイヤになります。

一般的に、メッシュ筋は、それぞれの方向のグリッド間隔とワイヤ サイズで指定します。例: 米国のインチ/フィート単位の 6x6 - W2.9/W2.9 (SI 単位の 152x152-MW18.7/MW18.7)は、100 分の 2.9 平方インチ(0.029 平方インチ)のワイヤ面積を持つ、中央が 6" のワイヤ グリッドとして解釈されます。

Revit API では、これらのシートは、FabricSheet クラスによって表され、FabricSheetType クラスによって定義されます。このクラスはパターン定義またはカスタム定義により、ワイヤの本数とワイヤの各方向の間隔をコントロールします。FabricSheetType は、ワイヤを、FabricWireType と関連付けられた FabricWireItems として参照します。

メッシュ筋エリア

FabricArea クラスはメッシュ筋のコンテナです。作成すると、作成時に参照された FabricSheetType に基づいて、メッシュ筋が FabricArea に自動的に生成されます。FabricArea クラスにはオーバーロードされた Create() メソッドが備わっており、ホストの境界か曲線の配列から FabricArea を作成します。FabricArea は、構造床、構造壁、べた基礎によってホストされるか、これらのタイプのうち 1 つの構造レイヤから部分的に作成される必要があります。

下の例は新しい FabricArea を作成し、出力される FabricSheet のリストを取得する方法を示しています。

コード領域: メッシュ筋エリアを作成
private FabricArea CreateNewFabricArea(Document document, Element wall)
{
    FabricArea system = null;

    // create default types if they aren't already in the model
    ElementId fabricAreaTypeId = FabricAreaType.CreateDefaultFabricAreaType(document);
    ElementId fabricSheetTypeId = FabricSheetType.CreateDefaultFabricSheetType(document);

    system = FabricArea.Create(document, wall, new XYZ(1, 0, 0), fabricAreaTypeId, fabricSheetTypeId);
    // call regenerate to generate fabric sheets in fabric area
    document.Regenerate();

    // get the list of elementIds for the sheets automatically generated in the fabric area
    IList<ElementId> sheetIds = system.GetFabricSheetElementIds();

    TaskDialog.Show("Revit", string.Format("{0} fabric sheets created", sheetIds.Count));

    return system;
}

メッシュ筋を作成する

メッシュ筋は、(FabricArea クラスによって表される)コンテナによってホストされる場合もあれば、一面のメッシュ筋シートとして構成される場合もあります。一面のメッシュ筋シートはホスト要素です。構造床、構造壁、べた基礎 、あるいはこの種の構造レイヤから作成された部材によってホストされる必要があります。曲げメッシュ筋も、構造梁、柱、ブレースにホストすることができます。

FabricSheet クラスは、オーバーロードされた静的 Create() メソッドを提供します。これにより、モデル内で一面のメッシュ筋シートを新規作成できます。FabricSheet.Create()の 1 回のオーバーロードで平坦なメッシュ筋が作成され、メッシュ筋が作成されるドキュメントへの参照、メッシュ筋をホストするホスト要素への参照、作成するメッシュ筋タイプの ElementId が必要になります。

FabricSheet.Create()をさらにオーバーロードすると、曲げメッシュ筋を作成できます。これは Revit ユーザ インタフェースでは実行できません。曲げメッシュ筋の作成には、上記と同じ入力と、曲げパスを定義する CurveLoop が必要になります。この曲げパスはメッシュ筋の曲げ形状を定義するプロファイルです。メッシュ筋のワイヤには曲げ半径の許容範囲が設定されているため、フィレットの有無を問わず、この CurveLoop プロファイルを提供することができます。つまり、U 形状のプロファイルが必要な場合は、3 つの線のみを指定する必要があり、作成されるメッシュ筋にはコーナーに適切な曲げ半径が適用されます。指定したプロファイルにハード コーナーがない場合は(曲線の終点以外のそれぞれの点に接線がある場合など)、最終的なメッシュ筋にはフィレットが作成されません。

指定した CurveLoop は曲げワイヤの中心線を定義するために使用します。FabricSheet の BentFabricBendDirection プロパティを使用すると、曲げを主筋か配力筋のどちらに設定するかを指定できます。さらに BentFabricStraightWiresLocation プロパティを使用して、ワイヤの曲げに対する直線ワイヤの位置を指定することもできます。

メッシュ筋タイプ

FabricSheet はメッシュ筋のワイヤを主筋方向および配力筋方向に生成する際に使用する FabricSheetType に関連付けられています。FabricSheetType でワイヤに使用される FabricSheetLayoutPattern は、次のように定義されます。

  • ActualSpacing - 鉄筋の間隔は固定されます。
  • FixedNumber - 鉄筋の間隔は調整できますが、鉄筋の本数は一定になります。
  • MaximumSpacing - 最大間隔の拘束を指定し、鉄筋の本数は鉄筋セットの長さによって決まります。
  • NumberWithSpacing - 鉄筋の本数と間隔が固定されます。
  • QuantitativeSpacing - 特定の間隔と直径を持つ複数のワイヤ グループ。

上から 4 つ目までのいずれかの場合、FabricSheetType では、主筋方向と配力筋方向のいずれかに指定された情報を使用してレイアウト パターンを設定するメソッド(SetMajorLayoutAsFixedNumber() や SetMinorAsActualSpacing() など)が提供されます。レイアウト パターンの取得には、MajorLayoutPattern プロパティと MinorLayoutPattern プロパティを使用します。

QuantitativeSpacing はカスタム パターンに使用します。主筋と配力筋のレイアウト パターンを QuantitativeSpacing に設定するには、SetLayoutAsCustomPattern() を使用します。FabricSheetType のレイアウト パターンがカスタマイズされている場合、MajorDirectionWireType、MinorDirectionWireType、MajorSpacing、MinorSpacing の各プロパティは適用されません。SetLayoutAsCustomPattern() メソッドには、主筋方向と配力筋方向の重なりの始端と終端を指定するパラメータに加えて、各方向の FabricWireItems のリストがあります。

コード領域: カスタム ワイヤ パターンを持つメッシュ筋
private FabricSheet CreateCustomFabricSheet(Document document, Element wall)
{
    if (FabricSheet.IsValidHost(wall) == false)
        return null;

    // Create a new type for custom FabricSheet
    ElementId fabricSheetTypeId = FabricSheetType.CreateDefaultFabricSheetType(document);
    FabricSheetType fst = document.GetElement(fabricSheetTypeId) as FabricSheetType;

    // Create some fabric wire types
    ElementId idWireType1 = FabricWireType.CreateDefaultFabricWireType(document);
    FabricWireType wireType1 = document.GetElement(idWireType1) as FabricWireType;
    wireType1.WireDiameter = 3.5/12.0;

    ElementId idWireType2 = FabricWireType.CreateDefaultFabricWireType(document);
    FabricWireType wireType2 = document.GetElement(idWireType1) as FabricWireType;
    wireType2.WireDiameter = 2.0/12.0;

    // Create the wires for the custom pattern
    IList<FabricWireItem> majorWires = new List<FabricWireItem>();
    IList<FabricWireItem> minorWires = new List<FabricWireItem>();
    FabricWireItem item = FabricWireItem.Create(2.0/12.0, 1, idWireType1);
    majorWires.Add(item);
    majorWires.Add(item);
    item = FabricWireItem.Create(1.5 / 12.0, 10.0 / 12.0, idWireType2);
    majorWires.Add(item);

    item = FabricWireItem.Create(3.0 / 12.0, 1, idWireType2);
    minorWires.Add(item);
    item = FabricWireItem.Create(3.0 / 12.0, 10.0 / 12.0, idWireType2);
    minorWires.Add(item);

    fst.SetLayoutAsCustomPattern(6.0 / 12.0, 2.0 / 12.0, 4.0 / 12.0, 1.0 / 12.0, minorWires, majorWires);

    FabricSheet sheet = FabricSheet.Create(document, wall, fabricSheetTypeId);
    // Regeneration is required before setting any property to object that was created in the same transaction.
    document.Regenerate();

            
    AnalyticalModelSurface ams = wall.GetAnalyticalModel() as AnalyticalModelSurface;
    sheet.PlaceInHost(wall, ams.GetLocalCoordinateSystem());

    // Give the user some information
    TaskDialog.Show("Revit", string.Format("Flat Fabric Sheet ID='{0}' created successfully.", sheet.Id.IntegerValue));

    return sheet;
}

一面のメッシュ筋

メッシュ筋を作成しても、ホストにはまだ配置されていません。FabricSheet.PlaceInHost()メソッドを呼び出し、ホスト要素と、メッシュ筋の最終的な位置を表す変換を渡す必要があります。ホストとして渡される要素はホストするメッシュ筋をサポートする必要があります。梁、柱、ブレースでホスト可能なのは曲げメッシュ筋のみです。他方、曲げメッシュ筋と平坦なメッシュ筋は、両方とも、構造床、構造壁、構造基礎スラブ、またはこの種の構造レイヤから作成された部材でホスト可能です。

コード領域: 曲げメッシュ筋を作成
private FabricSheet CreateBentFabricSheet(Document document, Element column)
{
    if (FabricSheet.IsValidHost(column) == false)
        return null;

    CurveLoop bendingProfile = new CurveLoop();
    Line line1 = Line.CreateBound(new XYZ(2, 0.8, 0), new XYZ(6, 0.8, 0));
    Line line2 = Line.CreateBound(new XYZ(6, -0.8, 0), new XYZ(4, -2, 0));
    Arc arc = Arc.Create(line1.GetEndPoint(1), line2.GetEndPoint(0), new XYZ(7, 0, 0));
    bendingProfile.Append(line1);
    bendingProfile.Append(arc);
    bendingProfile.Append(line2);

    ElementId fabricSheetTypeId = document.GetDefaultElementTypeId(ElementTypeGroup.FabricSheetType);
    FabricSheetType fst = document.GetElement(fabricSheetTypeId) as FabricSheetType;
    fst.SetMajorLayoutAsFixedNumber(12.0, 1.0, 0.8, 4);
    fst.SetMinorLayoutAsMaximumSpacing(10.0, .75, .90, 3.0);

    FabricSheet bentFabricSheet = FabricSheet.Create(document, column.Id, fabricSheetTypeId, bendingProfile);
    // Regeneration is required before setting any property to object that was created in the same transaction.
    document.Regenerate();

    bentFabricSheet.BentFabricBendDirection = BentFabricBendDirection.Major;

    AnalyticalModelColumn amc = column.GetAnalyticalModel() as AnalyticalModelColumn;
    bentFabricSheet.PlaceInHost(column, amc.GetLocalCoordinateSystem());

    // Give the user some information
    TaskDialog.Show("Revit", string.Format("Bent Fabric Sheet ID='{0}' created successfully.", bentFabricSheet.Id.IntegerValue));

    return bentFabricSheet;
}

曲げメッシュ筋

IsBent プロパティは、メッシュ筋が曲げメッシュ筋であるかどうかを表します。平坦なメッシュ筋と曲げメッシュ筋を切り替えることはできません。

GetBendProfile() を呼び出すことで曲げ配筋の曲線を取得したり、SetBendProfile() を呼び出すことで新しい曲線を設定することができます。
コード領域: メッシュ筋の曲げプロファイルを変更
private void ModifyBentFabricSheet(Document document, FabricSheet bentFabricSheet)
{
    CurveLoop newBendingProfile = CurveLoop.CreateViaOffset(bentFabricSheet.GetBendProfile(), 0.5, new XYZ(0, 0, -1));
    bentFabricSheet.SetBendProfile(newBendingProfile);

    // Give the user some information
    TaskDialog.Show("Revit", string.Format("Bent Fabric Sheet ID='{0}' modified successfully.", bentFabricSheet.Id.IntegerValue));
}

GetSegmentParameterIdsAndLengths() メソッドは、セグメント パラメータ ID を持つディクショナリをキーとして、長さを値として返します。これらは曲げメッシュ筋のセグメント(A、B、C、D など)に対応しますが、アルファベット順などで配列されることはありません。(メッシュ筋に曲げ部分がない場合は、空のディクショナリが返されます。)曲げメッシュ筋のセグメントの長さを設定するには、SetSegmentLength() を使用します。

コード領域: セグメント ID と長さを取得
private void GetBentFabricSheetData(FabricSheet fabricSheet)
{
    string fabricNumber = fabricSheet.FabricNumber;
    IDictionary<ElementId, double> idsAndLengths = fabricSheet.GetSegmentParameterIdsAndLengths(true);
    StringBuilder displayInfo = new StringBuilder();
    displayInfo.AppendLine(string.Format("Parameter Ids and segment lengths for FabricSheet {0}:", fabricNumber));
    
    foreach (ElementId key in idsAndLengths.Keys)
    {
        displayInfo.AppendLine(string.Format("Parameter Id: {0}, Length: {1}", key, idsAndLengths[key]));
    }

    TaskDialog.Show("Revit", displayInfo.ToString());
}

上記の例で使用している FabricNumber プロパティは、メッシュ筋や、メッシュ筋と同じタイプ、寸法、材質、形状、区分のシートに割り当てる数値パラメータを指定します。