/// <summary> /// Draw the button graph /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void PictureBoxPaint(object sender, PaintEventArgs e) { const int padding = 30; int p, x, y; bool val; var par = Parameters; var w = pictureBox.Width - 2 * padding; var h = pictureBox.Height - 2 * padding; int max; int y1 = !(par.invert & !par.Trigger) ? padding + h : padding; int y2 = (par.invert & !par.Trigger) ? padding + h : padding; GraphicsPath graphPath = new GraphicsPath(); List <Point> points = new List <Point>(); if (par.notch) { max = par.thresh2 + par.thresh1; int t1 = (int)(par.thresh1 / (double)max * w); int t2 = (int)(par.thresh2 / (double)max * w); points.Add(new Point(padding, y1)); // left start point points.Add(new Point(padding + t1, y1)); // left horizontal points.Add(new Point(padding + t1, y2)); // left vertical points.Add(new Point(padding + t2, y2)); // middle horizontal points.Add(new Point(padding + t2, y1)); // right vertical points.Add(new Point(padding + w, y1)); // right horizontal } else { max = 2 * par.thresh1; points.Add(new Point(padding, y1)); // left start point points.Add(new Point(padding + w / 2, y1)); // left horizontal points.Add(new Point(padding + w / 2, y2)); // middle vertical points.Add(new Point(padding + w, y2)); // right horizontal } graphPath.AddLines(points.ToArray()); e.Graphics.DrawPath(linePen, graphPath); p = Math.Min(max, Math.Max(0, buttonMapping.Input)); // clamp val = par.Transform(p); if (par.Trigger) { val = par.invert ^ trigger.Trigger(val, par.TriggerEdge, par.TriggerDuration); } x = padding + (int)(p / (double)max * w); y = !val ? padding + h: padding; e.Graphics.DrawLine(inputPen, x, h + padding, x, y); e.Graphics.DrawLine(outputPen, padding, y, x, y); e.Graphics.DrawString(buttonMapping.Input.ToString(), DefaultFont, Brushes.Green, x, h + padding); e.Graphics.DrawString(val ? "On" : "Off", DefaultFont, Brushes.Red, 0, y); }
protected override float Transform(int val) { var p = Parameters; bool state = p.Transform(val);; if (p.Trigger) { state = trigger.Trigger(state, p.TriggerEdge, p.TriggerDuration) ^ p.invert; } return(state ? 1f : 0f); }