0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Revit】DockablePaneとは

Last updated at Posted at 2024-08-21

概要

Revitアドイン開発で使用する可能性がある、DockablePaneについて纏めました。

DockablePaneとは

RevitAPI側が用意している、画面を埋め込めるウィンドウみたいなもの。Revitが用意しているものなので、Revitの上下左右にドッキングされた状態で表示することができる。また、通常のウィンドウのようにフロート状態で表示することも可能。

設定方法

Revit起動時に走る、OnStartup()の引数UIControlledApplicationを使用して設定できる。
RevitAPIに定義されているIDockablePaneProviderというインターフェースをもつクラスの作成が必要。
以下は、WPFのウィンドウをセットしているところ。

pulic class Sample : IExternalApplication
{
    public Result OnStartup(UIControlledApplication uicapp)
    {
        var host = new host();
        var guid = new Guid("{AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA}");
        var dockablePaneId = new DockablePaneId(guid);
        uicapp.RegisterDockablePane(dockablePaneId, "タイトル名", host);
    }
}
    public class host : IDockablePaneProvider
    {
        public SampleView Content = new SampleView();  // WPFのviewのクラス
        public object DataContext => Content.DataContext;

        public void SetupDockablePane(DockablePaneProviderData data)
        {
            data.FrameworkElement = Content;
            data.InitialState.DockPosition = DockPosition.Tabbed;  // どの部分にドッキングするか
        }
    }

DockablePaneが開かれたり、閉じられる際の処理

DockablePaneが開閉時に特定の処理を行いたい場合は、下記のように行う。

public Result OnStartup(UIControlledApplication uicapp)
{
    uicapp.DockableFrameVisibilityChanged += new EventHandler<DockableFrameVisibilityChangedEventArgs>(DockablePane_Changed);
}

private void DockablePane_Changed(object obj, DockableFrameVisibilityChangedEventArgs args)
{
    if (args.DockableFrameShown)
    {
        // 開かれるときの処理
    }
    else
    {
        // 閉じられるときの処理
    }
}

注意点

DockablePaneの開閉状態は、Revit終了時にRevit自体の設定として保存されているようです。
※参考文献があるわけではなく、挙動からの私の推測です。DockablePaneが開いた状態でRevitを終了し、再度起動して物件ファイルを開くと、DockablePaneが開いた状態のままでした。

なので、もし物件ファイルが開かれた後は、必ずDockablePaneは閉じていないといけない場合は、例えばUIControlledApplicationViewActivatedに、DockablePaneが開いていたら閉じる、という処理を接続しておく形もよさそうかと思いました。

    private void ViewActivated(object sender, ViewActivatedEventArgs e)
    {
        uicapp.GetDockablePane(dockablePaneId).Hide();
    }

uicappOnStartupの引数であるUIControlledApplicationdockablePaneIdはDockablePaneを追加するときに使用したクラスです。どちらもOnStartupの処理中にプロパティとして保持しておくと良いかもしれません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?