(前頁)<<      >>(次頁)          (Up)

9章 自作ツール画面、自作ツールプログラム等の組み込み
9.1 CommonMP  Ver1.3 以後
    ( 例:CommonMPで計算した結果をGoogleEarthで表示)


 CommonMPでは、依存性の注入(Dependency Injection)のソフトウエアパターン構造を採用しています。 この為、自作した「要素モデル」をCommonMP本体のコンパイルを行う事無しに 組み込むことができます。 要素モデル以外にも、独自に作成したグラフ表示画面やツールプログラムをCommonMPに組み込めます。 本頁では、 Ver1.3 以後での 独自ツール組み込み方法を説明します。

 組み込むツールの起動は、CommonMPのメニュー「ヘルプ」−「ツール管理」−「ツール起動」を選択します。 すると、ツールを起動する為のランチャーが表示されます。

       
                ツールランチャー起動

 ランチャー上のボタンを押下すると、組み込んだツールや画面が起動されます。




 このランチャーに登録するツールを作成してみます。

 例として、GIS2次元メッシュ時系列ファイル出力要素モデルが出力したファイルを、GoogleEarth(Google 社が無料で配布しているバーチャル地球儀ソフト)上に表示するツールを作成します。 本ツールを出力する前に、GoogleEarthを PCにインストールしておく必要があります。
 以降、C:\Program Files\Google\Google Earth\client\下に googleearth.exe がインストールされているものとして 説明を行います。

 CommonMPは、大きな機能がコンポーネント化されており、GIS機能はその一つの機能です。 機能は、同一の種類が同時に複数組み込むことが許さ れる場合と、必ず1個しか許されない場合があります。 例えば、計算モデルは 複数の計算モデルを同時に組み込むことが可能です。 一方、画面(ビューア 機能:直感的には、メニューが設定されている画面)は、同時に複数立ち上げる事ができません。 同様に CommonMPと連動して動作することが可能な GIS機能は1個のみです。 このため、GIS機能付きCommonMPをインストールした場合には、CommonMPと他のGIS(例えば、 GoogleEarth)を連動して動作できません。(但し、連動しないで、互いに独立したアプリケーションとして使用することは可能です。 これから述 べる例でも、CommonMPからGoogleEarthを制御することはできません。)
 そこで、此処では、計算結果を GoogleEarthに表示するための KMLファイルを出力する機能をツールとしてCommonMPに組み込みま す。 尚、GIS付きGommonMPは 最初からこの機能を有していますが、 GIS無しCommonmMPはこの機能が無いので、有益な機能かもしれ ません。
 CommonMPVer1.3 をダウンロードし、インストールすると、2次元GIS計算結果出力ファイルを、KMLファイルに変化するツールの、組み 込み例が一緒にダウンロードされます。(CommonMP\Source\HYSSOP\AddinSysToolsVer1.2\HSViewer\ HyssopGISControllerJob) 
 しかしながら、この例は、CommonMPVer1.2 の方法が記述されており、Ver1.3の方法には対応していません。 そこで、Ver1.2用に作成されたKMLファイル出力機能を、Ver1.3対応に修正します。
 
 下図に Ver1.2までのツール組込み時の動作概要を示します。
 CommonMP.diconファイルにツールを生成するFactoryクラスを登録することで、CommonMPは立ち上がり時にそこに記述されたDLL内のFactoryクラスを取り込みます。
 また、ツールを起動するメニューを、Menu.xml に記述しておくと、ツールを起動するメニューが表示されます。 
 メニュー上でツールが選択されると、メニューに登録された番号が、ツールのMenuCallBack()メソッドに通知されて、この中に記述された処理により、各種画面表示やツール起動等が行われます。

 
                      CommonMP Ver1.2 以前の ツール組み込み 
 
 Ver1.3 以降では、メニューの代わりに、ランチャー上に登録されたボタンからツールが起動されます。 このため、Menu.xmlファイルを変更 する必要が無くなりました。 また、要素モデルの場合と同じように 「.dicon 」ファイルに登録しなくても、DLLで提供されたツールをCommonMPに取り込めるようにしてあります。(但し、これは、各ツールが互いに独立し、干 渉し合わない事を前提としています。)
 一方、メニューの場合には、一つのツールに対して、メニューから色々な機能を選択できましたが、ランチャーに登録されるボタンはツールに一つ割り当てる だけなので、ツールは、MenuCallBack()メソッドではなく、StartTool()メソッドに対して、ツールボタンが押下された事を通知しま す。 ツールは、StartTool()メソッド内に記述された機能を実施します。 
 複数の機能を操作者から選択したいツールは、CommonMPVer1.2以前のメニュー選択に代わる機能を自前で準備する必要があります。(例えば、画面を準備し、その画面上にメニューやボタンを配置する等)
 Ver1.3以降、ランチャーに登録する事が可能となりましたが、MenuCallBack()メソッドを実装して、Menu.xmlファイルにメニューを記述すれば、Ver1.2以前の場合と同様に、メニューからツールを起動する事は可能です。

    
                      CommonMP Ver1.3 からのツール組み込み



 それでは、具体的に、ツールを組み込んで見ます。
 一般的な ツール作成方法は、\CommonMP\Source\HYSSOP\AddInSysTools\DeveloperTestMain\ bin\help\AddInSamples下のAddinScreenManual.pdf に記述されているので、それに沿って行います。 
 但し、これから制作しようとする「KMLファイル作成ツール」は、Ver1.2に対応しているツールが、「\CommonMP\Source\ HYSSOP\AddinSysToolsVer1.2\HSViewer」下の「HyssopGISControllerJob」に存在しているので、 それをコピーして、改修します。
 
 先ず、\CommonMP\Source\HYSSOP\AddinSysToolsVer1.2下の HSViewer フォルダーを コピーし、\ CommonMP\Source\HYSSOP\AddInSysTools\下にコピーします。SHViewer フォルダー内には、AddInDotNetScreenフォルダーと、HyssopGISControllerJobフォルダーが存在しますが、必要なの は HyssopGISControllerJobフォルダー なので、AddInDotNetScreenフォルダーは削除します。

 HyssopGISControllerJobフォルダーの中には 
   「HyssopAddinGISControlJob.csproj」、 
   「HyssopGISController\HyssopAddinGISController.csproj」 
   の2つのプロジェクトが存在しています。 
   HyssopAddinGISControlJob.csproj プロジェクトは CommonMPメニューから起動されるツールで、DLLとし て提供されます。 一方、HyssopGISController\HyssopAddinGISController.csproj は、ツールから起 動される別のプログラム(.exe)で、GIS付きCommonMPの2次元GIS出力結果選択画面に似せて制作してあります。

  GIS付きCommonMPの場合でもツールが動作できる様に ネームスペース名称、、クラス名等を変更します。

 プロジェクト「HyssopAddinGISControlJob.csproj」をMicrosoft Visual C# から開きます。
 この状態で、 下図の様に リファクタリング機能を利用して、 ネームスペース名称、クラス名称を変更します。

        
                      
         


   変更する名称は下記の通りです。

   <プロジェクト内の ネームスペース名>
    ・CommonMP.HYSSOP.OptionImpl.HysGISControllerJob  →  CommonMP.HYSSOP.OptionImpl.HysGglEarthControllerJob
   
   <プロジェクト内の クラス名称>
    ・HysGISJobControllerDefine.cs → HysGglEartJobControllerDefine.cs  
    ・HysGISControllerJobFactory.cs → HysGglEarthControllerJobFactory.cs  
    ・HysGISControllerJob.cs → HysGglEarthControllerJob.cs  

   クラス名を変更した後、ソース名とクラス名を一致化させるために、ファイル名を修正します。

  上記変更を完了した後、一旦 プロジェクトを閉じます。
 

 この状態で、\CommonMP\Source\HYSSOP\AddInSysTools\SysToolTestMain.sln を開き、ツール作成用ソリューションを開きます。

    

  ソリューションに、コピーしてきたプロジェクトを追加します。
     \CommonMP\Source\HYSSOP\AddInSysTools\HSViewer\HyssopGISControllerJob\HyssopAddinGISControlJob.csproj
           \CommonMP\Source\HYSSOP\AddInSysTools\HSViewer\HyssopGISControllerJob\HyssopGISController\HyssopAddinGISController.csproj 

        
 
 次に、SysToolTestMain プロジェクトの参照のに対して、HyssopAddinGISControlJob.csproj と HyssopAddinGISController.csproj を追加します。
  
     
 
  
 プロジェクトをリビルドして コンパイルエラーがない事を確認します。

 
 プロジェクトの開発環境が揃ったので、Ver1.3への対応を行います。
 \CommonMP\Source\HYSSOP\AddInSysTools\DeveloperTestMain\bin\help\AddInSamples\AddinScreenManual.pdf に記述されているように 
 
  HysGglEarthControllerJobFactory.cs に対して、DLLから ファクトリークラスをロードするメソッドを追加します。
 
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
// ↓↓↓ 下記コードが必須 ↓↓↓
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
namespace CommonMP.HYSSOP._SYSTEM_
{
    /// <summary><para>class outline:</para>
    /// <para>ツールファクトリ生成</para>
    /// </summary>
    /// <remarks><para>history:</para>
    /// <para>[CommonMP][ver 1.3.0][2013/1/29][新規作成]</para>
    /// </remarks>
    public class HYSSOP_USRVIEWERJOB_FACTORY_CREATOR_IMPLE : HYSSOP_USRVIEWERJOB_FACTORY_CREATOR
    {

        /// <summary><para>method outline:</para>
        /// <para>ツールのファクトリクラス生成</para>
        /// </summary>
        /// <example><para>usage:</para>
        /// <para> HySScreenFactory csToolFactory = CreateFactory( ) </para>
        /// </example>
        /// <param name="">無し</param>
        /// <returns>ツールのファクトリクラス</returns>
        /// <exception cref="">無し</exception>
        /// <remarks><para>remarks:</para>
        /// <para>無し</para>
        /// </remarks>
        public CommonMP.HYSSOP.Interface.HSViewer.HySViewerJobFactory CreateFactory()
        {

            // ToDo 自作の画面ファクトリ(ネームスペース付き)を new して下さい。
            return new CommonMP.HYSSOP.OptionImpl.HysGglEarthControllerJob.HysGglEarthControllerJobFactory();
        }
    }
}
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
// ↑↑↑ 上記コードが必須 ↑↑↑
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

namespace CommonMP.HYSSOP.OptionImpl.HysGglEarthControllerJob
{
    /// <summary><para>class outline:</para>
    /// <para>ビューア内処理ファクトリ</para>
    /// </summary>
    /// <remarks><para>history:</para>
    /// <para>[CommonMP][ver 1.1.0][2012/01/22][新規作成]</para>
    /// </remarks>
    public class HysGglEarthControllerJobFactory : HySDotNetAddInBaseJobFactory
    {
 

 次に、 HysGglEarthControllerJobFactory  に対して、 ランチャー上のボタンに表示する情報を取得する為のメソッド
 CreateToolInf()メソッドを オーバライドして製作します。

    public class HysGglEarthControllerJobFactory : HySDotNetAddInBaseJobFactory
    {
    。。。。。
    。。。。。
    。。。。。
       //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
        // ↓↓↓ 下記コードが必須 ↓↓↓
        //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
        /// <summary><para>method outline:</para>
        /// <para>アドインツール情報生成</para>  
        /// </summary>
        /// <example><para>usage:</para>
        /// <para> HySUserToolInfoData csAddinInf = CreateToolInf(  ) </para>
        /// </example>
        /// <param name="">無し</param>
        /// <returns>HySUserToolInfoData アドイン情報</returns>
        /// <exception cref="">無し</exception>
        /// <remarks><para>remarks:</para>
        /// <para>無し</para>
        /// </remarks>
        override public HySUserToolInfoData CreateToolInf( )
        {
            HySString csToolName;
            
            // ↓↓↓ 多言語対応 ↓↓↓
            // ランチャー画面に表示されるツール名称をOS設定に応じて表示切替
            if (System.Threading.Thread.CurrentThread.CurrentUICulture.Name.StartsWith("ja") == true)
            {
                // OS設定が日本語の場合
                csToolName = new HySString("グーグル・アース");
            }
            else
            {
                // OS設定が日本語以外の場合
                csToolName = new HySString("GoogleEarth");
            }
            // ↑↑↑ 多言語対応 ↑↑↑
            
               
            return new HySUserToolInfoData(
                  HysGglEartJobControllerDefine.BUSINESS_KIND,  ← システム内でユニークな値
                  csToolName,                        ← ランチャーに表示される名称
                   new HySString("GEarth.ico")             ← ランチャーに表示されるアイコン
                                                     );
        }
        //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
        // ↑↑↑ 上記コードが必須 ↑↑↑
        //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

 上段のコードの追加により、CommonMP.dicon ファイルへ記述しなくてもCommonMPにツールがインポートされます。
 また、HysGglEarthControllerJobFactory クラスの CreateToolInf()メソッドを追加することで、 ランチャーのボタンに表示される情報をCommonMPに提供することができます。

 次に ランチャー上のボタンを押下された時の イベント受け口を作成します。

    public class HysGglEarthControllerJob : HySDotNetAddInBaseJob
    {
        /// <summary>起動されたプロセスのハンドル(例)</summary>
        System.Diagnostics.Process m_hProcess = null;

        //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
        // ↓↓↓ 下記コードが必須 ↓↓↓
        //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
        /// <summary><para>method outline:</para>
        /// <para>ツールの起動</para>
        /// </summary>
        /// <example><para>usage:</para>
        /// <para> StartTool()</para>
        /// </example>
        /// <returns>無し</returns>
        /// <exception cref="">無し</exception>
        /// <remarks><para>remarks:</para>
        /// <para>無し</para>
        /// </remarks>
        ///
        public override void StartTool()
        {
            // GoogleEarth を起動する。
            this.ExecuteGoogleEarth();
            // 制御画面を起動する。
            this.WakeupGISController();
        }
        //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
        // ↑↑↑ 上記コードが必須 ↑↑↑
        //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 


 上記 StartTool( )メソッドを追加し、メソッド内に、ボタン押下によりHysGglEarthControllerJobクラスが実行すべき処理を記述します。
 この例では、 GoogleEarthを起動すると共に、 KMLファイル作成用プログラム HyssopAddinGISController.exe を起動します。
 各、処理詳細は、本ページからダウンロードしたプログラムを参照下さい。

 プログラム:HyssopAddinGISController.exe は、CommonMPへのツール組み込みには直接関係しないので、説明は省略します。
 ダウンロードしたプログラム及び関連ファイルを一式 所定の位置(\CommonMP\Source\下)に上書き保存して下さい。
 <注意>
  本ツールは、KMLファイル生成時に、\SystemData\GISLegendInfファイル下の XMLファイルを使用します。
 
 

  プログラムの修正は完了しましたが、ランチャーに貼り付けるアイコンを制作し、所定の位置(\CommonMP\Source\HYSSOP\AddInSysTools\DeveloperTestMain\bin\ToolIcon下)に配置します。  
 ここで、Microsoft Visual C# からディバッグモードで起動します。 起動されたディバッグ用CommonMPの「ヘルプ」−「ツール管理」−「ツール起動」からランチャーを表示すると、「グーグル・アース」というボタンが表示されます。

    
                  ランチャーボックスに グーグルアース起動ボタンの追加

 
 ここで、「グーグル・アース」ボタンを押下すると、 GIS2次元出力ファイルをKMLファイルに変換する画面とGoogoleEarthが起動されます。

    
                            グーグル・アースの起動


グーグルアースへの表示確認

 GIS2次元メッシュデータの表示を確認するために、テスト用のGIS-2次元メッシュデータを作成します。 テスト用のデータ作成には、テストプロ ジェクトとして、既にSampleProjectGroup内のSample_No3.cmprj が準備されているので、これを利用して、テストデータ を作成します。
 
    

 (テストの見栄えを良くするため、GIS2次元メッシュデータ発生要素モデルの一部を変更しています。 =>変更した発生モデルとプロジェクト   )



 テストプロジェクトが出力した 2次元GISファイルを 変換ツール画面から読み出します。
  
    

 読み込んだデータ内の情報を選択し、「KML出力」ボタンを押下します。
 変換したKMLフィアルを GoogleEarthで読み込んで表示した例を 下記に示します。

  
                 出力された水位KMLファイルを GoogleEarth上に表示した例(KML上では、水位は地面からの相対高さに変換)


  
                 出力された雨量KMLファイルを GoogleEarth上に表示した例         

 


(前頁)<<      >>(次頁) 

初版:2014/03/29 |