集計表を作成する

集計表を作成する

ViewSchedule クラスには、集計表のタイプに応じて新しい集計表を作成するためのメソッドがいくつか用意されています。メソッドにはすべて Document パラメータがありますが、これは新しい集計表や集計表に似たビューを追加するドキュメントです。新しく作成した集計表ビューはプロジェクト ブラウザの[集計表/数量]ノードに表示されます。

静的な ViewSchedule.CreateSchedule()メソッドを使用すると、標準の単一カテゴリか複数カテゴリの集計表を作成できます。

コード領域: 2 つのフィールドを持つ単一カテゴリの集計表を作成

public static void CreateSingleCategorySchedule(Document doc)
{
    using (Transaction t = new Transaction(doc, "Create single-category"))
    {
        t.Start();

        // Create schedule
        ViewSchedule vs = ViewSchedule.CreateSchedule(doc, new ElementId(BuiltInCategory.OST_Windows));

        doc.Regenerate();

        // Add fields to the schedule
        AddRegularFieldToSchedule(vs, new ElementId(BuiltInParameter.WINDOW_HEIGHT));
        AddRegularFieldToSchedule(vs, new ElementId(BuiltInParameter.WINDOW_WIDTH));

        t.Commit();
    }
}

/// <summary>
/// Adds a single parameter field to the schedule
/// </summary>
public static void AddRegularFieldToSchedule(ViewSchedule schedule, ElementId paramId)
{
    ScheduleDefinition definition = schedule.Definition;

    // Find a matching SchedulableField
    SchedulableField schedulableField =
        definition.GetSchedulableFields().FirstOrDefault<SchedulableField>(sf => sf.ParameterId == paramId);

    if (schedulableField != null)
    {
        // Add the found field
        definition.AddField(schedulableField);
    }
}

2 番目のパラメータは要素が集計表に含まれるカテゴリの ID です。複数カテゴリの集計表の場合は InvalidElementId となります。

2 番目の CreateSchedule()メソッドを使用するとエリア集計表を作成し、集計表のエリア スキームの ID となる追加パラメータを取得できます。

コード領域: エリア集計表を作成

FilteredElementCollector collector = new FilteredElementCollector(doc);
collector.OfCategory(BuiltInCategory.OST_AreaSchemes);
//Get first ElementId of AreaScheme.
ElementId areaSchemeId = collector.FirstElementId();
if (areaSchemeId != null && areaSchemeId != ElementId.InvalidElementId)
{
    // If you want to create an area schedule, you must use CreateSchedule method with three arguments. 
    // The value of the second argument must be ElementId of BuiltInCategory.OST_Areas category
    // and the value of third argument must be ElementId of an AreaScheme.
    areaSchedule = Autodesk.Revit.DB.ViewSchedule.CreateSchedule(doc, new ElementId(BuiltInCategory.OST_Areas), areaSchemeId);
}
集計キーに表示される抽象的な「キー」要素を使用すると、通常のモデル要素のパラメータを入力できます。また、この「キー」要素は静的な ViewSchedule.CreateKeySchedule()メソッドを使用することで作成できます。このメソッドの 2 番目のパラメータは、集計表のキーが関連付けられる要素のカテゴリの ID になります。

部材拾い出しは、モデル内の要素を構成するマテリアルに関する情報を表示する集計表です。(グループ化前は)各行が単一の要素を表す標準の集計表と異なり、部材拾い出しの各行は単一の<element, material>ペアを表します。ViewSchedule.CreateMaterialTakeoff()メソッドは ViewSchedule.CreateSchedule()メソッドと同じパラメータを持ち、単一カテゴリと複数カテゴリの両方の部材拾い出し集計表に使用できます。

ビュー リスト、シート リスト、キーノート凡例は指定されたカテゴリに関連付けられるため、その作成メソッドはカテゴリ ID をパラメータとして取ります。ビュー リストは、プロジェクト内のビューの集計表です。これはビュー カテゴリの集計表であり、ViewSchedule.CreateViewList()を使用して作成します。

シート リストはプロジェクト内のシートの集計表です。これはシート カテゴリの集計表であり、ViewSchedule.CreateSheetList()メソッドを使用して作成します。

キーノート凡例はキーノート タグ カテゴリの集計表であり、ViewSchedule.CreateKeynoteLegend()を使用して作成します。

改訂表は図面枠ファミリに追加され、シート上の図面枠の一部として表示されます。渡されるドキュメントが図面枠ファミリではない場合、ViewSchedule.CreateRevisionSchedule()メソッドにより例外が発生します。

メモ ブロックは一般注釈 カテゴリの集計表であり、カテゴリ内のすべての要素ではなく 1 つのファミリの要素を表示します。

コード領域: ViewSchedule.CreateNoteBlock()

public ViewSchedule ViewSchedule.CreateNoteBlock(Document document, ElementId familyId);

2 番目のパラメータは、要素が集計表に含まれるファミリの ID です。

コード領域: メモ ブロック集計表を作成

using (Transaction transaction = new Transaction(doc, "Creating Note BLock"))
{
    //Get first ElementId of a Note Block family.
    ICollection<ElementId> noteblockFamilies = ViewSchedule.GetValidFamiliesForNoteBlock(doc);
    ElementId symbolId = noteblockFamilies.First<ElementId>();
               
    if (!symbolId.Equals(ElementId.InvalidElementId))
    {
        transaction.Start();

        //Create a note-block view schedule.
        noteBlockSchedule = ViewSchedule.CreateNoteBlock(doc, symbolId);
    }

    if (null != areaSchedule)
    {
        transaction.Commit();
    }
    else
    {
        transaction.RollBack();
    }
}