可視性と表示

表示

View.SetWorksetVisibility()を使用して、ワークセットの表示を特定のビューに設定できます。WorksetVisibility オプションには、[表示](ワークセットが開いている場合は表示)[非表示]、[グローバル設定を使用] (ビューの設定を優先しないことを示す)があります。対応する View.GetWorksetVisibility()メソッドは、そのビューのワークセットの現在の表示設定を取得します。ただし、このメソッドは、ワークセットが現在開いているかどうかを考慮しません。ワークセットが開いているか閉じているかを考慮に入れるなど、ワークセットがビューで表示されるかどうかを判断するには、View.IsWorksetVisible()を使用します。

クラス WorksetDefaultVisibilitySettings は、ドキュメントのワークセットの既定の表示を管理します。ファミリ ドキュメントでは使用できません。このワークシェアリングがドキュメントで無効にされている場合、すべての要素は単一のワークセットに移動され、そのワークセット、およびワークシェアリングが再有効化された場合に(再)作成された任意のワークセットは、現在の設定に関係なく、既定で表示されます。

次の例では、特定のビューのワークセットを非表示にして、他のビューのワークセットは既定で非表示にしています。

コード領域: ワークセットを非表示にする

public void HideWorkset(Document doc, View view, WorksetId worksetId)
{
    // get the current visibility
    WorksetVisibility visibility = view.GetWorksetVisibility(worksetId);

    // and set it to 'Hidden' if it is not hidden yet
    if (visibility != WorksetVisibility.Hidden)
    {
        view.SetWorksetVisibility(worksetId, WorksetVisibility.Hidden);
    }

    // Get the workset’s default visibility      
    WorksetDefaultVisibilitySettings defaultVisibility = WorksetDefaultVisibilitySettings.GetWorksetDefaultVisibilitySettings(doc);

    // and making sure it is set to 'false'
    if (true == defaultVisibility.IsWorksetVisible(worksetId))
    {
        defaultVisibility.SetWorksetVisibility(worksetId, false);
    }
}

表示モード

ワークセットの表示設定に関する情報を取得して設定するのに加えて、View クラスもワークシェアリング表示モードおよび設定の情報にアクセスするためのメソッドを提供します。WorksharingDisplayMode 列挙は、表示されている場合にビューがどのモードなのかを示します。

メンバー名

説明

オフ

アクティブなワークシェアリング表示モードはありません。

CheckoutStatus

ビューは、要素のチェックアウト ステータスを表示しています。

オーナ

ビューは、要素の特定のオーナを表示しています。

ModelUpdates

ビューは、モデルの更新プログラムを表示しています。

ワークセット

ビューは、各要素が割り当てられているワークセットを表示しています。

コード領域: 別のワークシェアリング表示モードをアクティブにする

public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
    View activeView = commandData.View;
    Document doc = activeView.Document;

    // Prepare settings
    Color red = new Color(0xFF, 0x00, 0x00);
    WorksharingDisplayGraphicSettings settingsToApply = new WorksharingDisplayGraphicSettings(true, red);

    // Toggle mode based on the current mode
    using (Transaction t = new Transaction(doc, "Toggle display mode"))
    {
        t.Start();

        WorksharingDisplaySettings settings = WorksharingDisplaySettings.GetOrCreateWorksharingDisplaySettings(doc);

        switch (activeView.GetWorksharingDisplayMode())
        {
            case WorksharingDisplayMode.Off:
                activeView.SetWorksharingDisplayMode(WorksharingDisplayMode.CheckoutStatus);
                settings.SetGraphicOverrides(CheckoutStatus.OwnedByOtherUser, settingsToApply);
                break;
            case WorksharingDisplayMode.CheckoutStatus:
                activeView.SetWorksharingDisplayMode(WorksharingDisplayMode.ModelUpdates);
                settings.SetGraphicOverrides(ModelUpdatesStatus.UpdatedInCentral, settingsToApply);
                break;
            case WorksharingDisplayMode.ModelUpdates:
                activeView.SetWorksharingDisplayMode(WorksharingDisplayMode.Owners);
                settings.SetGraphicOverrides("Target user", settingsToApply);
                break;
            case WorksharingDisplayMode.Owners:
                activeView.SetWorksharingDisplayMode(WorksharingDisplayMode.Worksets);
                settings.SetGraphicOverrides(doc.GetWorksetTable().GetActiveWorksetId(), settingsToApply);
                break;
            case WorksharingDisplayMode.Worksets:
                activeView.SetWorksharingDisplayMode(WorksharingDisplayMode.Off);
                break;
        }

        t.Commit();
    }

    return Result.Succeeded;
}

グラフィックス設定

WorksharingDisplaySettings クラスは、要素がワークシェアリング表示モードのいずれかで表示されたときの表示方法をコントロールします。これらの設定に保存されている色は共通設定で、モデルのすべてのユーザによって共有されます。指定された色が適用されているかどうかは、現在のユーザに特有なため、他のユーザによって共有されません。これらの設定はワークシェアされているモデルでも使用できないことに注意してください。これは、ワークセットを有効化する前に表示設定を事前に環境設定できるようにするもので、これにより表示設定をテンプレート ファイルに格納できます。

コード領域: ワークシェアリング表示グラフィックスの設定

public WorksharingDisplayGraphicSettings GetWorksharingDisplaySettings(Document doc, String userName, WorksetId worksetId, bool ownedbyCurrentUser)
{
    WorksharingDisplayGraphicSettings graphicSettings;

    // get or create a WorksharingDisplaySettings current active document
    WorksharingDisplaySettings displaySettings = WorksharingDisplaySettings.GetOrCreateWorksharingDisplaySettings(doc);

    // get graphic settings for a user, if specified
    if (!String.IsNullOrEmpty(userName))
        graphicSettings = displaySettings.GetGraphicOverrides(userName);

     // get graphicSettings for a workset, if specified
    else if (worksetId != WorksetId.InvalidWorksetId)
        graphicSettings = displaySettings.GetGraphicOverrides(worksetId);

    // get graphic settings for the OwnedByCurrentUser status
    else if (ownedbyCurrentUser)
        graphicSettings = displaySettings.GetGraphicOverrides(CheckoutStatus.OwnedByCurrentUser);
                
    // otherwise get graphic settings for the CurrentWithCentral status
     else
          graphicSettings = displaySettings.GetGraphicOverrides(ModelUpdatesStatus.CurrentWithCentral);

     return graphicSettings;
}

オーバーロードされたメソッド WorksharingDisplaySettings.SetGraphicOverrides()は、指定された基準に基づいた要素に割り当てられてたグラフィックスの優先を設定します。

コード領域: グラフィックスの優先

public void SetWorksharingDisplaySettings(Document doc, WorksetId worksetId, String userName)
{
    String message = String.Empty;

    // get or create a WorksharingDisplaySettings current active document
    WorksharingDisplaySettings displaySettings = WorksharingDisplaySettings.GetOrCreateWorksharingDisplaySettings(doc);

    // set a new graphicSettings for CheckoutStatus - NotOwned
    WorksharingDisplayGraphicSettings graphicSettings = new WorksharingDisplayGraphicSettings(true, new Color(255, 0, 0));
    displaySettings.SetGraphicOverrides(CheckoutStatus.NotOwned, graphicSettings);

    // set a new graphicSettings for ModelUpdatesStatus - CurrentWithCentral
    graphicSettings = new WorksharingDisplayGraphicSettings(true, new Color(128, 128, 0));
    displaySettings.SetGraphicOverrides(ModelUpdatesStatus.CurrentWithCentral, graphicSettings);

    // set a new graphicSettings by a given userName
    graphicSettings = new WorksharingDisplayGraphicSettings(true, new Color(0, 255, 0));
    displaySettings.SetGraphicOverrides(userName, graphicSettings);

    // set a new graphicSettings by a given workset Id
    graphicSettings = new WorksharingDisplayGraphicSettings(true, new Color(0, 0, 255));
    displaySettings.SetGraphicOverrides(worksetId, graphicSettings);
}

WorksharingDisplaySettings クラスを使用して、どのユーザがドキュメントの表示されたユーザのリストに表示されるかコントロールすることもできます。RemoveUsers()メソッドは、表示されたユーザのリストからユーザを削除し、グラフィックスのすべてのカスタマイズを永久に破棄します。ドキュメントの任意の要素を所有していないユーザのみを削除できます。RestoreUsers()メソッドは、削除されたユーザを表示されたユーザのリストにもう一度追加し、このユーザにグラフィックスのカスタマイズを許可します。復元された任意のユーザは、既定のグラフィックスの優先設定を使用して表示され、ユーザを削除する前に存在したすべてのカスタマイズは復元されません。

コード領域: ユーザを削除

public void RemoveAndRestoreUsers(Document doc)
{
    // get or create a WorksharingDisplaySettings current active document
    WorksharingDisplaySettings displaySettings = WorksharingDisplaySettings.GetOrCreateWorksharingDisplaySettings(doc);

    // get all users with GraphicOverrides
    ICollection<string> users = displaySettings.GetAllUsersWithGraphicOverrides();
           
    // remove the users from the display settings (they will not have graphic overrides anymore)
    ICollection<string> outUserList;
    displaySettings.RemoveUsers(doc, users, out outUserList);

    // show the current list of removed users
    ICollection<string> removedUsers = displaySettings.GetRemovedUsers();

    String message = "Current list of removed users: ";
    if (removedUsers.Count > 0 )
    {
        foreach (String user in removedUsers)
        {
           message += "\n" + user;
        }
    }
    else
    {
        message = "[Empty]";
    }
  
    TaskDialog.Show("Users Removed", message);
            
    // restore the previously removed users
    int number = displaySettings.RestoreUsers(outUserList);
            
    // again, show the current list of removed users
    // it should not contain the users that were restored
    removedUsers = displaySettings.GetRemovedUsers();

    message = "Current list of removed users: ";
    if (removedUsers.Count > 0 )
    {
       foreach (String user in removedUsers)
        {
           message += "\n" + user;
        }
    }
    else
    {
        message = "[Empty]";
    }

    TaskDialog.Show("Removed Users Restored", message);
}