Pro SDK を使用した ArcGIS Pro の拡張③:アドインプロジェクトの構成

Document created by takahiro_kamiyaesrij-esridist Employee on Jun 21, 2018Last modified by masanobu_hiranoesrij-esridist on Jun 24, 2018
Version 4Show Document
  • View in full screen mode

はじめに

 

この記事は、「Pro SDK を使用した ArcGIS Pro の拡張」シリーズの第3弾です。

 

当ブログシリーズでは、ArcGIS Pro SDK (以下、Pro SDK) を使用した ArcGIS Pro の拡張方法をご紹介しています。

前回の記事では、ArcGIS Pro の開発環境の構築方法についてご紹介しました。

 

第3弾では、Pro SDK のアドインプロジェクトの構成についてご紹介します。

 

Config.damlファイルとは?

 

初めに、アドインプロジェクトの構成を理解する上で重要な Config.daml ファイルについて説明します。

Visual Studio で ArcGIS Pro のアドインプロジェクトを作成すると、そのプロジェクトには「Config.daml」という名称のファイルが含まれています。

この Config.daml ファイルは ArcGIS Pro のカスタマイズにおいて不可欠なもので、XML 言語をベースとしており、daml という拡張子名は【Desktop Application Markup Language】の頭文字から取られています。

ArcGIS Pro の変更、拡張はすべてこのファイルに宣言する必要があります。宣言することによって既存の ArcGIS Pro のコントロールに対しての追加、編集、削除を行うこともできます。

 

 

アドインプロジェクトの構成について

 

それではここから、開発を行う際の基本的な構成について説明します。

第1弾のブログでも少し触れましたが、Pro SDK は MVVM モデルを考慮した設計になっています。

基本的な構成は以下のような図になります。

 

 

上記の図では、Config.daml ファイルに Pro UI の要素を定義して、定義した要素を .NET クラスで作成しています。

それぞれのファイルについて次のことを主に定義します。

 

Config.daml:ArcGIS Pro をカスタマイズする UI の要素を定義します(タブ・グループ・ボタンなど)。

MyViewModels.cs:View とのデータの受け渡しやボタンなどを押下したときの処理を実装します。

MyView.xaml:ドックパネルやポップアップなどの UI を実装します。

※上記で定義した以外でも .NET の基本設計・挙動に従って開発することが可能です。

 

基本的にはこのような構成でアドインプログラムを実装していきます。

また、.NET クラスで作成する Pro UI の要素については多くのテンプレートが提供されています。

 

図4:Pro SDK で提供されているアドインモジュールのテンプレート群

実際に Visual Studio でアドインプロジェクトを作成し、デバッグすると ArcGIS Pro では次のように表示されます。

 

 

これはあくまで一例ですが、リボン上にアドインのタブが追加され、ドックパネルを呼び出すボタンが定義されており、ボタンを押下することでドックパネルを画面に表示します。

 

非同期処理

 

最後に、ArcGIS Pro のアドインアプリケーションを作成する際の注意点についてご説明します。

ArcGIS Pro はマルチスレッド 64 ビットアプリケーションで様々な処理を同時実行します。

コンフリクトを避けるため、Pro SDK を使用した処理は QueuedTask.Run() メソッドでキューに登録する必要があります。

登録した処理は ArcGIS Pro のプロセスが適切なタイミングで実行します。

また、意識的に Async / Await を使用して非同期実行することもできます。

 

QueuedTask.Run() の呼び出し例

Task t = QueuedTask.Run(() =>
{
     // 呼び出す SDK のメソッド
}

 

Async / Await の実行例

private async Task<IGPResut> ExecuteGP(string tool, IReadOnlyList<string> parameters)
{
    IGPResult result = await Geoprocessing.ExecuteToolAsync(tool, parameters, flags: GPExcuteToolFlags.None);
    return result;
}

 

次回

 

これでアドインプロジェクトの構成の説明は終わりです。次回は、この構成を踏まえた上で Pro SDK での簡単なアドイン開発についてご紹介します。

 

■関連リンク

1 person found this helpful

Attachments

    Outcomes