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

3章 CommonMPの要素モデルを作成する
3.4 要素モデルを作成する(GUIからモデルのプロパティ情報を設定できるようにする)


 全頁で作成した要素モデルのプロパティ設定画面を表示してみます。



 プロパティ画面には 設定項目として 「ステップ時間60秒」だけが表示されています。

 ここで、この画面を使用して、モデルの各種定数等の値を設定できるようにしたいと思います。
 設定できる項目は、第2章で作成した DynamicWaveModel の場合と同様とします。

  (第2章でプロパティデータから設定した項目)
            ・XL :河道長
            ・NX : 分割数
            ・SLOPE : 勾配
            ・ROUGH : 粗さ


(Factoryクラスの変更)
 まずは、第2章で作成した DynamicWavePrptyInf クラスに相当するクラスが必要です。
 本章では、要素モデルのプロパティ情報クラスは親クラスを使用しています。 親クラス McCellModelPropertyInfo は、汎用用途に使用できるようになっていますが、それ故に 使用するにはコツが必要です。
 
 要素モデルのプロパティデータクラスは、画面に表示する情報と、画面で入力された情報を対応付けて設定できます。
   ・どのような項目が設定情報として存在するか
   ・その情報のデータの型は何か(整数型なのか、実数型なのか等)
   ・画面に表示する時にはどの様な表題とするか
   ・デフォルト値は何か
 等を 予め プロパティデータに登録しておきます。
 この登録は Factoryクラスの McCellModelPropertyIF CreateModelProperty(HySID csLibraryID, HySObjectKind csModelKind) メソッド内で行います。

        public override McCellModelPropertyIF CreateModelProperty(HySID csLibraryID, HySObjectKind csModelKind)
        {
            if (this.EqualFactory(csLibraryID) == false)
            {
                return null;
            }

            McCellModelPropertyInfo csRtnCellPrptyDt = null;

            if (csModelKind.Equals(MyExerciseModelDefine.MY_DYNAMIC_MODEL_KIND) == true)
            {
                csRtnCellPrptyDt = new McCellModelPropertyInfo(csLibraryID, csModelKind);

                csRtnCellPrptyDt.SetStepTime(60); // δT設定 60秒
                
            }
            return csRtnCellPrptyDt;
        } 


 ここで、.SetStepTime(60); の設定があるため、 最初のプロパテイ画面に タイムステップ60秒が表示されました。
 一般的な、変数の登録は次のようにします。
 .AddInfoType("XL",
          "河道長",
          McDefine.ValKind.DOUBLE); 
 
 AddInfoType は変数を登録するメソッドです。
   第1変数は 変数の識別子です。任意の文字列が使用できますが、ここでは、プログラムで使用されている変数と同じにしました。
   第2変数は 画面へ表示する表題文字列です。
   第3変数は 数値の型を示します。 McDefine.ValKind.DOUBLE はdouble型(実数型)変数であることを示しています。(整数型であれば、McDefine.ValKind.LONG とします。)
 このメソッドを使用して、変数1つが登録されました。
 この変数にデフォルト値を与えます。 そのためには、
 .SetInfo メソッドを使用します。

 .SetInfo("XL",
       100000.0);
   第1変数は、変数の識別子であり、登録した識別子を使用します。
   第2変数は 与える値を入れます。

 実際の実装は以下のようになります。

                csRtnCellPrptyDt.AddInfoType("XL", "河道長", McDefine.ValKind.DOUBLE);
                csRtnCellPrptyDt.SetInfo("XL", 100.0 * 1000.0);

                csRtnCellPrptyDt.AddInfoType("NX", "モデル内セル分割数+1", McDefine.ValKind.LONG);
                csRtnCellPrptyDt.SetInfo("NX", 50);

                csRtnCellPrptyDt.AddInfoType("ROUGH", "粗度", McDefine.ValKind.DOUBLE);
                csRtnCellPrptyDt.SetInfo("ROUGH", 0.03);

                csRtnCellPrptyDt.AddInfoType("SLOPE", "河床勾配", McDefine.ValKind.DOUBLE);
                csRtnCellPrptyDt.SetInfo("SLOPE", 1.0 / 2000.0); 

 これで、プロパティ情報の登録が終了しました。 ここで、設定値を確認してみます。
 コンパイルし、ディバッグ用CommonMPを 立ち上げてみます。
 先ほどのプロジェクトに登録されたモデルのプロパティを開いてみても、反映されていません。 何故反映されていないかというと、先ほどのプロジェクトを作成した時には、プロパティデータクラスには、変数が登録されていなかったため、プロジェクトには、無登録のプロパティ情報が保存されているからです。 そこで、一度 要素モデルを解除し、再度、要素モデルに、”演習:DynamicWaveモデル”を設定し直します。

(要素モデルの解除) 

(要素モデルの再設定) 
 
(プロパテイ画面表示) 

 今度は、プロパティ情報設定画面に各パラメーターが表示されました。


(要素モデルの変更)
 プロパティデータの設定は、
 public override bool SetProperty(McCellModelPropertyIF csCellMdlPropertyInfo) メソッド内で行います。

 プロパティデータクラスに登録された情報を取得するには、.GetInfo メソッドを使用します。

 .GetInfo("SLOPE",
      ref m_csMyInf.SLOPE);

 第1変数は、変数の識別子であり、登録した識別子を使用します。
 第2変数は、取得するデータを格納するための 変数を設定します。(情報を取得するには、 ref を追加します)

                csPrptyInfo.GetInfo("XL", ref m_csMyInf.XL);
                csPrptyInfo.GetInfo("NX", ref m_csMyInf.NX);
                csPrptyInfo.GetInfo("SLOPE", ref m_csMyInf.SLOPE);
                csPrptyInfo.GetInfo("ROUGH", ref m_csMyInf.ROUGH);


 以上で、CommonMPの プロパティ設定画面上で 操作者が入力した情報を 要素モデルのパラメータに設定できるようになりました。

 


 ここで作成した要素モデル開発プロジェクト(Ex04_MyExerciseModel.lzh

 ダウンロードしたら解凍して生成されたフォルダー「MyExerciseModel」を \CommonMP\Source\HYMCO\OptionImpl\ 下に置きます。   
 解凍して生成されたプロジェクト:MyExerciseModel.csproj を ディバッグ用ソリューションに追加し、スタートアッププロジェクト(TestModelDeveloperMainExp)の依存関係に追加します。

 

 またテスト用のCommonMP計算プロジェクト(Ex04_CommonMPData.lzh

 解凍して生成された、「MyExerciseStep1」フォルダーを \CommonMP\CommonMPData\ 下に置きます。

 


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

初版:2013/06/17 |