/// /// Copyright (c) 2017 Sensus Metering Systems /// using System; using System.IO; using System.Text; using System.Xml.Serialization; using Config.Entities; using TBF.BenchControl.Generic; using TBF.Resources; namespace TBF.BenchControl.Network.Camera.Roi { public class ProcedureParams : ProcedureParamsBase, IParamsProvider, IProcedureParams { public float PulsesPerLtr; /// [l^-1] public int DetectionImagesCount; public int DetectionPeriod1; public int DetectionPeriod2; public string RoiParams; public override void InitializeAll() { PulsesPerLtr = 1.0f; DetectionImagesCount = 10; DetectionPeriod1 = 1; DetectionPeriod2 = 19; RoiParams = "160 160 79 79 20 79 0 0 360 360 1 50 0 0 50 0"; } string[] paramNames = new string[] { Strings.PulsesPerLtr, "Images count", "Period1", "Period2", "Parameters" }; public override string ParamName(int i) { return paramNames[i]; } public override int ParamsCount() { return paramNames.Length; } public override string ToString(int i) { switch (i) { case 0: return PulsesPerLtr.ToString(); case 1: return DetectionImagesCount.ToString(); case 2: return DetectionPeriod1.ToString(); case 3: return DetectionPeriod2.ToString(); case 4: return RoiParams; default: return string.Empty; } } /// Retrieves parameters from UI controls public void UpdateParam(int i, string strValue) { switch (i) { case 0: PulsesPerLtr = Utils.ParseUFloat(strValue); return; case 1: DetectionImagesCount = int.Parse(strValue); return; case 2: DetectionPeriod1 = int.Parse(strValue); return; case 3: DetectionPeriod2 = int.Parse(strValue); return; case 4: RoiParams = strValue; return; default: return; } } /// Verifies whether strings in UI controls represent valid parameters public bool ValidateParam(int i, string strValue, out string message) { message = string.Empty; float dummy; int idummy; switch (i) { case 0: if (Utils.TryParseUFloat(strValue, out dummy)) return true; break; case 1: case 2: case 3: if (int.TryParse(strValue, out idummy) && idummy >= 1 && idummy <= 50) return true; break; case 4: return true; default: message = "Invalid index"; return false; } message = ParamName(i) + " is invalid"; return false; } void CopyContentTo(ProcedureParams prms) { prms.PulsesPerLtr = this.PulsesPerLtr; prms.DetectionImagesCount = this.DetectionImagesCount; prms.DetectionPeriod1 = this.DetectionPeriod1; prms.DetectionPeriod2 = this.DetectionPeriod2; prms.RoiParams = this.RoiParams; } public IParamsProvider Clone() { ProcedureParams pars = new ProcedureParams(); CopyContentTo(pars); return pars; } public override void UpdateProcedureParams(ComponentProcedure dbEntity) { if (dbEntity == null) return; try { ProcedureParams tmp = (ProcedureParams)(new XmlSerializer(typeof(ProcedureParams))) .Deserialize(new StringReader(dbEntity.Parameters)); procedureParamsEntity = dbEntity; componentName = dbEntity.CmpntName; procedure = dbEntity.Procedure; tmp.CopyContentTo(this); } catch { } } public ProcedureParams() { } public ProcedureParams(ComponentProcedure procedureParamsEntity, string componentName, Procedure procedure) { this.procedureParamsEntity = procedureParamsEntity; this.componentName = componentName; this.procedure = procedure; } } }