private void AddOutputsAsLabel(BaseContent refPoi, IDataRecord dr) { foreach (var output in OutputParameters.Where(p => p.OutputType == SqlOutputType.Label)) { var oldValue = refPoi.Labels.ContainsKey(output.Name) ? refPoi.Labels[output.Name] : string.Empty; var strings = dr[output.Name] as string[]; if (strings != null) { refPoi.Labels[output.Name] = string.Join("\r\n", strings); //refPoi.Labels[output.Name] = ""; //foreach (var str in strings) // refPoi.Labels[output.Name] += str + "\r\n"; } else if (dr[output.Name] == null) return; else refPoi.Labels[output.Name] = dr[output.Name].ToString(); var name = output.Name; if (!string.Equals(oldValue, refPoi.Labels[output.Name])) Caliburn.Micro.Execute.OnUIThread(() => refPoi.TriggerLabelChanged(name)); } }
/// <summary> /// Calculate the results using the created formula. /// Note that you can have up to 8 parameters. /// </summary> /// <param name="bc"></param> /// <param name="mathFormula"></param> /// <returns>The computed result.</returns> private double CalculateResult(BaseContent bc, object mathFormula) { var parameters = new double[inputParameters.Count]; for (var i = 0; i < parameters.Length; i++) { var sqlInputParameter = inputParameters[i]; switch (sqlInputParameter.Type) { case SqlParameterTypes.Label: parameters[i] = bc.LabelToDouble(sqlInputParameter.LabelName); break; case SqlParameterTypes.Sensor: parameters[i] = GetSensorValue(bc, sqlInputParameter.LabelName); break; } } var result = 0d; switch (parameters.Length) { case 2: { var formula = mathFormula as Func<double, double, double>; result = formula == null ? 0 : formula(parameters[0], parameters[1]); break; } case 3: { var formula = mathFormula as Func<double, double, double, double>; result = formula == null ? 0 : formula(parameters[0], parameters[1], parameters[2]); break; } case 4: { var formula = mathFormula as Func<double, double, double, double, double>; result = formula == null ? 0 : formula(parameters[0], parameters[1], parameters[2], parameters[3]); break; } case 5: { var formula = mathFormula as Func<double, double, double, double, double, double>; result = formula == null ? 0 : formula(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4]); break; } case 6: { var formula = mathFormula as Func<double, double, double, double, double, double, double>; result = formula == null ? 0 : formula(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5]); break; } case 7: { var formula = mathFormula as Func<double, double, double, double, double, double, double, double>; result = formula == null ? 0 : formula(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6]); break; } case 8: { var formula = mathFormula as Func<double, double, double, double, double, double, double, double, double>; result = formula == null ? 0 : formula(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7]); break; } } if (string.IsNullOrEmpty(DesiredResultLabel)) return result; bc.Labels[DesiredResultLabel] = result.ToString(CultureInfo.InvariantCulture); Caliburn.Micro.Execute.OnUIThread(() => bc.TriggerLabelChanged(DesiredResultLabel)); return result; }