概要
ArcGIS Pro SDK が提供しているイベントを実装することで、ArcGIS Pro の様々な操作に対して独自の処理を入れることが可能です。この記事ではアクティブなビュー(マップ ビューやレイアウト ビューなど)が切り替わったときに発生する ActivePaneChangedEvent をご紹介します。
サンプル コード
イベントの登録はアドインの初期化メソッドなどの中に実装します。//// Module1.cs
protected override bool Initialize()
{
// イベントの登録
ActivePaneChangedEvent.Subscribe(onActivePaneChanged);
return base.Initialize();
}
続いて、イベント発生時に実行する処理を実装します。
ActivePaneChangedEvent では、イベント引数として PaneEventArgs オブジェクトが渡されます。
このオブジェクトには Pane(ビュー)の情報が含まれており、遷移元や遷移先の Pane の情報を取得できます。
private void onActivePaneChanged(PaneEventArgs args)
{
// 遷移元と遷移先の Pane(ビュー)を取得
var fromPane = args.OutgoingPane;
var toPane = args.IncomingPane;
// ~ 任意の処理を実装 ~
}
上記の実装により、特定のビューから特定のビューへ遷移した場合のみ、処理を実行することが可能です。
以下の例では、マップ ビューからレイアウト ビューへ遷移した際に、マップ ビューの表示範囲をレイアウト ビュー内のマップ フレームに適用するサンプルを示します。
これにより、マップ ビューとレイアウト ビューの表示範囲を連動させることができます。
protected override bool Initialize()
{
ActivePaneChangedEvent.Subscribe(onActivePaneChanged);
return base.Initialize();
}
// イベント発生時の処理
private void onActivePaneChanged(PaneEventArgs args)
{
Envelope extent = null;
var fromPane = args.OutgoingPane;
var toPane = args.IncomingPane;
// 遷移元がマップ ビュー、遷移先がレイアウト ビューの場合のみ処理
if (fromPane is IMapPane && toPane is ILayoutPane)
{
// マップ ビューの範囲を取得
IMapPane mapPane = (IMapPane)fromPane;
extent = mapPane.MapView.Extent;
ILayoutPane layoutPane = (ILayoutPane)toPane;
QueuedTask.Run(() =>
{
// レイアウト内のマップ フレームを取得
var mapFrame = layoutPane.LayoutView.Layout.GetElements().OfType<MapFrame>().First();
// マップ フレームのマップの範囲を、遷移元のマップで取得した範囲に設定
mapFrame.SetCamera(extent);
});
}
}
protected override void Uninitialize()
{
// イベントの登録を解除
// この実装が無くても動作しますが解除まで実装することが推奨
ActivePaneChangedEvent.Unsubscribe(onActivePaneChanged);
base.Uninitialize();
}
補足
上記は Visual Studio テンプレート「ArcGIS Pro モジュール アドイン」での実装を想定しています。ボタンなどのトリガーとせずイベントの登録を行う場合は、Config.daml ファイルの insertModule にて autoLoad を true に設定して実装することで、ArcGIS Pro 起動時に自動的にアドインが読み込まれイベントの登録が行われます。
<insertModule id="Sample_Module" className="Module1" autoLoad="true" caption="Module1">
このナレッジはお役に立ちましたか?
フィードバックをいただきありがとうございます!