アセンブリとビュー

任意の数のモデル要素を組み合わせてアセンブリを作成すると、このアセンブリに対して編集、タグ付け、集計、フィルタを実行することができます。

アセンブリを作成する

AssemblyInstance クラスの Create()メソッドは、プロジェクトで新しいアセンブリ インスタンスの作成に使用します。Create()メソッドはトランザクション内で作成する必要があり、新しく作成したアセンブリ インスタンスで操作を実行する前にトランザクションをコミットしておく必要があります。アセンブリ タイプは、トランザクションの完了後に割り当てられます。ユニークなアセンブリにはそれぞれ固有の AssemblyType があります。

次の例では、新しいアセンブリ インスタンスを作成し、その AssemblyType の名前を変更して、アセンブリ インスタンスにビューを作成します。

コード領域: アセンブリとビューを作成

AssemblyInstance CreateAssemblyAndViews(Autodesk.Revit.DB.Document doc, ICollection<ElementId> elementIds)
{
    AssemblyInstance assemblyInstance = null;
    using (Transaction transaction = new Transaction(doc))
    {
        ElementId categoryId = doc.GetElement(elementIds.First()).Category.Id; // use category of one of the assembly elements
        if (AssemblyInstance.IsValidNamingCategory(doc, categoryId, elementIds))
        {
            transaction.Start("Create Assembly Instance");
            assemblyInstance = AssemblyInstance.Create(doc, elementIds, categoryId);
            transaction.Commit(); // commit the transaction that creates the assembly instance before modifying the instance's name

            if (transaction.GetStatus() == TransactionStatus.Committed)
            {
                transaction.Start("Set Assembly Name");
                assemblyInstance.AssemblyTypeName = "My Assembly Name";
                transaction.Commit();
            }

            if (assemblyInstance.AllowsAssemblyViewCreation()) // create assembly views for this assembly instance
            {
                if (transaction.GetStatus() == TransactionStatus.Committed)
                {
                    transaction.Start("View Creation");
                    View3D view3d = AssemblyViewUtils.Create3DOrthographic(doc, assemblyInstance.Id);
                    ViewSchedule partList = AssemblyViewUtils.CreatePartList(doc, assemblyInstance.Id);
                    transaction.Commit();
                }
            }
        }
    }

    return assemblyInstance;
}
AssemblyInstance の作成には、既存の AssemblyType を使用する方法もあります。AssemblyType を使用して AssemblyInstance を作成するには、静的メソッド AssemblyInstance.PlaceInstance()を使用し、使用する AssemblyType の ElementId とアセンブリを配置する場所を指定します。

アセンブリ ビュー

AssemblyViewUtils クラスの静的メソッドを使用すると、平行投影アセンブリ ビュー、断面詳細図アセンブリ ビュー、部材拾い出しマルチカテゴリ集計表アセンブリ ビュー、パーツ リスト マルチカテゴリ集計表アセンブリ ビュー、シングルカテゴリ集計表、シート アセンブリ ビューなどさまざまなアセンブリ ビューをアセンブリ インスタンスに作成できます。こうした例外的なシート ビューは、すべて、テンプレートから集計表やビューを作成する作成メソッドをオーバーロードします。これらのオーバーロードには、テンプレート ID の他に、テンプレートの割り当てと適用のどちらを行うかを指示するパラメータがあります。

アセンブリ ビューは、同じアセンブリ タイプのアセンブリ インスタンスに割り当てられる必要があります。AssemblyInstance.AllowsAssemblyViewCreation() は、そのアセンブリ インスタンスで新しいアセンブリ ビューを使用できる場合に、true の値を返します(アセンブリ インスタンスにすでにビューがあるかどうかを問いません)。

次の例では、指定されたテンプレートからアセンブリの新しいシングルカテゴリ集計表を作成しています。

コード領域: テンプレートからアセンブリ ビューを作成

private ViewSchedule CreateScheduleForAssembly(Document doc, AssemblyInstance assemblyInstance, ElementId viewTemplateId)
{
    ViewSchedule schedule = null;
    if (assemblyInstance.AllowsAssemblyViewCreation()) // create assembly views for this assembly instance
    {
        using (Transaction transaction = new Transaction(doc))
        {
            transaction.Start("Create Schedule");
                    
            // use naming category for the schedule
            if (ViewSchedule.IsValidCategoryForSchedule(assemblyInstance.NamingCategoryId))
            {
                schedule = AssemblyViewUtils.CreateSingleCategorySchedule(doc, assemblyInstance.Id, assemblyInstance.NamingCategoryId, viewTemplateId, false);
            }
            transaction.Commit();

            if (schedule != null && transaction.GetStatus() == TransactionStatus.Committed)
            {
                transaction.Start("Edit Schedule");
                schedule.ViewName = "AssemblyViewSchedule";
                transaction.Commit();
            }
        }
    }

    return schedule;
}

これらの新しく作成したアセンブリ ビューを使用する前に、ドキュメントを再生成しておく必要があります。上の例では、新しいアセンブリ ビューを作成した後にトランザクションをコミットしています。Commit()メソッドは自動的にドキュメントを再生成します。