public OutputState(List <CalculatorCore> calcs, GraphRange xRange, GraphRange yRange, GraphRange zRange, DirectBitmap bitmap) { Calcs = calcs; XRange = xRange; YRange = yRange; ZRange = zRange; Bitmap = bitmap; }
private static void MaybeChooseAutoZRange(GraphRange range, double[,] data) { if (data != null && range.AutoRange) { range.Lo = double.NaN; range.Hi = double.NaN; FindMinMax(data, ref range.Lo, ref range.Hi); if (double.IsNaN(range.Lo)) { range.Lo = -1; range.Hi = 1; } } }
public static GraphRange New(string rangeName, LNode range, int numPixels, Dictionary <Symbol, LNode> varDict) { if (range == null) { return new GraphRange(-1, 1, numPixels, Pens.MidnightBlue, null) { AutoRange = true } } ; if (range.Calls(CodeSymbols.Colon, 2) && range[0].IsId && string.Compare(range[0].Name.Name, rangeName, true) == 0) { range = range[1]; // ignore axis prefix like "x:" or "y:" } if (range.Calls(CodeSymbols.Sub, 2) || range.Calls(CodeSymbols.DotDot, 2)) { double lo = CalculatorCore.Eval(range[0], varDict); double hi = CalculatorCore.Eval(range[1], varDict); Pen pen = OutputState.MakePen(range); string label = range.Attrs.Select(a => a.Value as string).FirstOrDefault(s => s != null); var result = new GraphRange(lo, hi, numPixels, pen, label) { RangeExpr = range }; foreach (var attr in range.Attrs) { if (attr.Value is int) { result.RoughLineCount = (int)attr.Value; } } return(result); } throw new FormatException("Invalid range for {axis}: {range}".Localized("axis", rangeName, "range", range)); } }
static double ChooseGridSpacing(out double lo, GraphRange range, double[,] data = null) { lo = range.Lo; MaybeChooseAutoZRange(range, data); return(ChooseGridSpacing(ref lo, range.Hi, range.RoughLineCount)); }