6章 再び要素モデルの作成
6.1 独自プロパティ画面の作成
(その3 モデルの完成)
6.1.7
処理実装
前頁で 要素モデルとプロパティ画面のスタブを完成させ、起動することを確認しました。 この頁では 処理を実装します。
要素モデルの実装は DynamicModel実装の場合を参考にして行います。
手順は以下の様になります。
独自プロパティデータ(MyKinematicWavePropertyData)クラスの実装
(1-1)メンバー変数追加
(1-2)Clone、CopyInf メソッド実装
(1-3)XmlOUT、XmlIN メソッド実装
(2)独自初期化データ(MyKinematicWaveInitialData)クラスの実装
(2-1)メンバー変数追加
(2-2)Clone、CopyInf メソッド実装
(2-2)XmlOUT、XmlIN メソッド実装
(3)ファクトリークラスの実装
(3-1)CreateModelProperty メソッド実装
(3-2)CreateModelInitialInfo メソッド実装
(4)演算データ(MyKinematicWaveCalInfo)クラスの実装
(4-1)メンバー変数の追加
(4-2)Clone、CopyInfo メソッド実装
(5)要素モデル(MyKinematicWaveModel)クラス実装
(5-1)ReceiveConnectionCheck、SendConnectionCheck メソッド実装
(5-2)Initialize メソッド実装
(5-3)Calculate、DataFusion メソッド実装
(5-4)SetProperty メソッド実装
(1)独自プロパティデータ(MyKinematicWavePropertyData)クラスの実装
(1-1)メンバー変数追加
画面から設定したい変数を プロパティ画面のメンバー変数として追加します。
public class MyKinematicWavePropertyData :
McCellModelPropertyInfo { public double XL = 100.0 * 1000.0; public long NX = 50; public double SLOPE = 1.0 / 2000.0; public double WIDTH = 200.0; public double ROUGH = 0.03; |
protected override void
CopyInf(McPropertyInfoRoot
csOrgObj) { base.CopyInf(csOrgObj); MyKinematicWavePropertyData csPrpOrgObj = csOrgObj as MyKinematicWavePropertyData; if (csPrpOrgObj != null) { // ToDo 独自メンバー変数のコピー処理を追加して下さい。 XL = csPrpOrgObj.XL; NX = csPrpOrgObj.NX; SLOPE = csPrpOrgObj.SLOPE; WIDTH = csPrpOrgObj.WIDTH; ROUGH = csPrpOrgObj.ROUGH; } } |
public override HySXmlNode
XmlOUT(ref HySXmlWriter
csXmlWriter)
// 属性として追加する場合 //
別タグとして追加する場合
csLclNode = HySXmlNode.CreateElement("Val_SLOPE",
csXmlWriter);
csLclNode = HySXmlNode.CreateElement("Val_WIDTH",
csXmlWriter);
csLclNode = HySXmlNode.CreateElement("Val_ROUGH",
csXmlWriter);
// 属性として追加する場合
return bRtn; |
public class MyKinematicWaveInitialData :
McInitialInfo { /// <summary>初期流量 </summary> public double m_dInitQ; 。。。。。。。。。。。 protected override void CopyInf(McPropertyInfoRoot csOrgObj) { base.CopyInf(csOrgObj); MyKinematicWaveInitialData csPrpOrgObj = csOrgObj as MyKinematicWaveInitialData; if (csPrpOrgObj != null) { m_dInitQ = csPrpOrgObj.m_dInitQ; } } 。。。。。。。。。。。 public override HySXmlNode XmlOUT(ref HySXmlWriter csXmlWriter) { HySXmlNode csRtn = base.XmlOUT(ref csXmlWriter); // 属性として追加する場合 csRtn.SetAttribute("m_dInitQ", m_dInitQ.ToString()); return csRtn; } public override bool XmlIN(HySXmlNode csPrptyXml) { bool bRtn = base.XmlIN(csPrptyXml); // 属性として追加する場合 string sValueAttr = ""; sValueAttr = csPrptyXml.GetAttribute("m_dInitQ"); if (sValueAttr != "") { m_dInitQ = Convert.ToDouble(sValueAttr); } return bRtn; } 。。。。。。。。。。。 |
public override McCellModelPropertyIF CreateModelProperty(HySID
csLibraryID, HySObjectKind
csModelKind) MyKinematicWavePropertyData csKinematicPrpty = csRtnCellPrptyDt as MyKinematicWavePropertyData;
csKinematicPrpty.XL = 100.0 *
1000.0;
//
受信可能なパターン |
public override McPropertyInfoRoot CreateModelInitialInfo(HySID
csLibraryID, HySObjectKind
csModelKind) { 。。。。。。。。。。 else if (csModelKind.Equals(MyExerciseModelDefine.MY_KINEMATIC_MODEL_KIND) == true) { csRtnDt = new MyKinematicWaveInitialData(csLibraryID, csModelKind); ((MyKinematicWaveInitialData)csRtnDt).m_dInitQ = 0.1; } |
[Serializable] //
To
Do |
public class MyKinematicWaveModel :
McForecastModelBase if
(lInputDataNum <
1) //
start of
受信情報取得 |
ここで作成した要素モデル開発プロジェクト(Ex12_CommonMP.lzh)
ダウンロードしたら解凍して生成されたフォルダー「MyExerciseModel」、「MyExerciseModelProperty」を \CommonMP\Source\HYMCO\OptionImpl\ 下に置きます。
解凍して生成されたプロジェクト:MyExerciseModel.csproj 、MyExerciseModelProperty.csprojを ディバッグ用ソリューションに追加し、スタートアッププロジェクト(TestModelDeveloperMainExp)の依存関係に追加します。 また、 解凍して生成された、「MyExerciseStep1」フォルダーを \CommonMP\CommonMPData\ 下に置きます
初版:2013/08/03
|