ワークセット

ワークセットは、Revit ドキュメントの 要素のセットをサブセットに分割してワークシェアリングする方法です。1 つのドキュメントに 1 つまたは複数のワークセットがある場合があります。

ドキュメント内のワークセットにアクセスする

ドキュメントには、そのドキュメントに含まれるすべてのワークセットに対する参照を含むテーブルである WorksetTable が含まれます。各ドキュメントには 1 つの WorksetTable があります。ドキュメントでワークシェアリングが有効になっていない場合でも、少なくとも 1 つの既定のワークセットがテーブルに存在します。Document.IsWorkshared プロパティを使用して、ドキュメントでワークシェアリングが有効になっているかを判断できます。WorksetTable クラスを使用すると、アクティブなワークセット(下の例を参照)を取得し、SetActiveWorksetId()を呼び出してアクティブなワークセットを設定できます。

コード領域: アクティブなワークセットを取得

public Workset GetActiveWorkset(Document doc)
{
     // Get the workset table from the document
     WorksetTable worksetTable = doc.GetWorksetTable();
     // Get the Id of the active workset
     WorksetId activeId = worksetTable.GetActiveWorksetId();
     // Find the workset with that Id
     Workset workset = worksetTable.GetWorkset(activeId);
     return workset;
}

ワークセットをフィルタリングする

Workset クラスは要素から派生していないため、一連のワークセットから検索、フィルタ、反復を行うには、FilteredWorksetCollector を使用します。条件を割り当てて返されたワークセットをフィルタすることができます。条件が適用されていない場合、このフィルタは、ドキュメントのすべてのワークセットにアクセスします。WorksetKind 列挙子は、次の例に示すようにワークセットのフィルタリングに便利です。WorksetKind は、ワークセットの次のサブディビジョンを指定します。
  • User - ユーザ管理による 3D インスタンス要素のワークセット
  • Family - ファミリ記号とファミリを保持
  • Standard - システム ファミリ タイプを含むプロジェクト標準を持つ
  • Other - 通常はアプリケーションとして考慮されない、内部仕様のワークセット
  • View - ビューとビュー固有の要素を持つ

コード領域: ワークセットのフィルタリング

public void GetWorksetsInfo(Document doc)
{
    String message = String.Empty;
    // Enumerating worksets in a document and getting basic information for each
    FilteredWorksetCollector collector = new FilteredWorksetCollector(doc);

    // find all user worksets
    collector.OfKind(WorksetKind.UserWorkset);
    IList<Workset> worksets = collector.ToWorksets();

    // get information for each workset
    int count = 3; // show info for 3 worksets only
    foreach (Workset workset in worksets)
    {
        message += "Workset : " + workset.Name;
        message += "\nUnique Id : " + workset.UniqueId;
        message += "\nOwner : " + workset.Owner;
        message += "\nKind : " + workset.Kind;
        message += "\nIs default : " + workset.IsDefaultWorkset;
        message += "\nIs editable : " + workset.IsEditable;
        message += "\nIs open : " + workset.IsOpen;
        message += "\nIs visible by default : " + workset.IsVisibleByDefault;

        TaskDialog.Show("GetWorksetsInfo", message);

        if (0 == --count)
            break;
    }
}

Workset プロパティ

Workset クラスは Revit ドキュメントのワークセットを表します。上のワークセットのフィルタリングの例で示すように、Workset クラスは、所有者やワークセットが編集可能かどうかなど、指定のワークセットについての情報を取得するための多くのプロパティを提供します。これらのプロパティは読み取り専用です。既存のワークセットの名前を変更するには、静的メソッド WorksetTable.RenameWorkset()を使用します。

ワークセットを作成する

静的 Workset.Create()メソッドを使用すると、指定したドキュメントに名前を指定して新しいワークセットを作成できます。ワークセットはワークシェアリングが有効になっているドキュメントでのみ作成できます。それにはユニークな名前を付ける必要があります。静的メソッド WorksetTable.IsWorksetNameUnique ()は、指定された名前がドキュメント内で一意であることを確認します。次の例では、新しいワークセットを作成する方法を紹介します。

コード領域: 新しいワークセットを作成

public Workset CreateWorkset(Document document)
{
    Workset newWorkset = null;
    // Worksets can only be created in a document with worksharing enabled
    if (document.IsWorkshared)
    {
        string worksetName = "New Workset";
        // Workset name must not be in use by another workset
        if (WorksetTable.IsWorksetNameUnique(document, worksetName))
        {
            using (Transaction worksetTransaction = new Transaction(document, "Set preview view id"))
            {
                worksetTransaction.Start();
                newWorkset = Workset.Create(document, worksetName);
                worksetTransaction.Commit();
            }
        }
    }

    return newWorkset;
}