private IDataSeries <double, double> GenerateDataSeries(AxisAlignment axisAlignment, int index)
        {
            var dataSeries = new XyDataSeries <double, double>();

            dataSeries.SeriesName = string.Format("Series {0}", index);

            double gradient = axisAlignment == AxisAlignment.Right ? index : -index;
            double start    = axisAlignment == AxisAlignment.Right ? 0.0 : 14000;

            DoubleSeries straightLineData = DataManager.Instance.GetStraightLine(gradient, start, SeriesPointCount);

            dataSeries.Append(straightLineData.XData, straightLineData.YData);
            return(dataSeries);
        }
        private IAxis GenerateLinearAxis(AxisAlignment axisAlignment)
        {
            return(new NumericAxis
            {
                AxisAlignment = axisAlignment,

                TextFormatting = "#.#E+0",
                ScientificNotation = ScientificNotation.Normalized,

                GrowBy = new DoubleRange(0.1, 0.1),

                DrawMajorBands = false
            });
        }
Пример #3
0
        private static IDataSeries GenerateDataSeries(AxisAlignment alignment, int index)
        {
            var dataSeries = new XyDataSeries <double, double> {
                SeriesName = $"Series {index}"
            };

            var gradient = alignment == AxisAlignment.Right ? index : -index;
            var start    = alignment == AxisAlignment.Right ? 0d : 14000d;

            var straightLine = DataManager.Instance.GetStraightLine(gradient, start, SeriesPointCount);

            dataSeries.Append(straightLine.XData, straightLine.YData);

            return(dataSeries);
        }
        public static Charting.Visuals.Axes.AxisAlignment FromXfAxisAlignment(AxisAlignment xfAxisAlignment)
        {
            switch (xfAxisAlignment)
            {
            case AxisAlignment.Left: return(Charting.Visuals.Axes.AxisAlignment.Left);

            case AxisAlignment.Bottom: return(Charting.Visuals.Axes.AxisAlignment.Bottom);

            case AxisAlignment.Right: return(Charting.Visuals.Axes.AxisAlignment.Right);

            case AxisAlignment.Top: return(Charting.Visuals.Axes.AxisAlignment.Top);

            case AxisAlignment.Default: return(Charting.Visuals.Axes.AxisAlignment.Auto);

            default:
                throw new NotImplementedException("The AxisAlignment " + xfAxisAlignment.ToString() +
                                                  " has not been handled");
            }
        }
        internal static WpfAxisAlignment FromXfAxisAlignment(AxisAlignment xfAxisAlignment)
        {
            switch (xfAxisAlignment)
            {
            case AxisAlignment.Left: return(WpfAxisAlignment.Left);

            case AxisAlignment.Bottom: return(WpfAxisAlignment.Bottom);

            case AxisAlignment.Right: return(WpfAxisAlignment.Right);

            case AxisAlignment.Top: return(WpfAxisAlignment.Top);

            case AxisAlignment.Default: return(WpfAxisAlignment.Default);

            default:
                throw new NotImplementedException("The AxisAlignment " + xfAxisAlignment.ToString() +
                                                  " has not been handled");
            }
        }
        public void SeriesSelectionExampleView_OnLoaded(object sender, RoutedEventArgs e)
        {
            // Create a number of DataSeries of type X=double, Y=double
            var allDataSeries = new IDataSeries <double, double> [SeriesCount];

            var initialColor = Colors.Blue;

            // Suspend visual updates while we add N RenderableSeries
            using (sciChartSurface.SuspendUpdates())
            {
                // Add N data and renderable series
                for (int i = 0; i < SeriesCount; i++)
                {
                    AxisAlignment alignment = i % 2 == 0 ? AxisAlignment.Left : AxisAlignment.Right;

                    allDataSeries[i] = GenerateDataSeries(alignment, i);

                    var renderableSeries = new FastLineRenderableSeries {
                        Stroke = initialColor
                    };

                    renderableSeries.YAxisId = alignment.ToString();

                    // Assign DataSeries to RenderableSeries
                    renderableSeries.DataSeries = allDataSeries[i];

                    // Assign RenderableSeries to SciChartSurface
                    sciChartSurface.RenderableSeries.Add(renderableSeries);

                    // Colors are incremented for visual purposes only
                    int newR = initialColor.R == 255 ? 255 : initialColor.R + 5;
                    int newB = initialColor.B == 0 ? 0 : initialColor.B - 2;
                    initialColor = Color.FromArgb(255, (byte)newR, initialColor.G, (byte)newB);
                }
            }

            sciChartSurface.ZoomExtents();
        }
        private IAxis GenerateLogarithmicAxis(AxisAlignment axisAlignment, bool withNegativeScale)
        {
            var axis = withNegativeScale ? new NegativeLogarithmicAxis() : new LogarithmicNumericAxis();

            axis.AxisAlignment = axisAlignment;

            axis.TextFormatting     = "#.#E+0";
            axis.ScientificNotation = ScientificNotation.LogarithmicBase;

            axis.GrowBy = new DoubleRange(0.1, 0.1);

            axis.DrawMajorBands = false;

            var converter  = new LogarithmicBaseConverter();
            var logBinding = new Binding("SelectedValue")
            {
                ElementName = "logBasesChbx", Converter = converter
            };

            axis.SetBinding(LogarithmicNumericAxis.LogarithmicBaseProperty, logBinding);

            return(axis);
        }
Пример #8
0
        protected override Size ArrangeOverride(Size finalSize)
        {
            // Position children.
            foreach (UIElement child in Children)
            {
                // Add translate transform.
                var translate = child.RenderTransform as TranslateTransform;
                if (translate == null)
                {
                    translate             = new TranslateTransform();
                    child.RenderTransform = translate;
                }

                // Get positioning information.
                ValueSource   xSource    = DependencyPropertyHelper.GetValueSource(child, XProperty);
                object        x          = xSource.BaseValueSource == BaseValueSource.Default ? null : child.GetValue(XProperty);
                ValueSource   ySource    = DependencyPropertyHelper.GetValueSource(child, YProperty);
                object        y          = ySource.BaseValueSource == BaseValueSource.Default ? null : child.GetValue(YProperty);
                AxisAlignment alignmentX = (AxisAlignment)child.GetValue(AlignmentXProperty);
                AxisAlignment alignmentY = (AxisAlignment)child.GetValue(AlignmentYProperty);

                // Position.
                if (x != null)
                {
                    translate.X = PositionInInterval(VisibleIntervalX, finalSize.Width, child.DesiredSize.Width, (TX)x, alignmentX);
                }
                if (y != null)
                {
                    translate.Y = PositionInInterval(VisibleIntervalY, finalSize.Height, child.DesiredSize.Height, (TY)y, alignmentY);
                }

                // Arrange.
                child.Arrange(new Rect(new Point(0, 0), child.DesiredSize));
            }

            return(finalSize);
        }
Пример #9
0
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value == null)
            {
                return(value);
            }

            AxisInfo      axis     = (AxisInfo)value;
            AxisAlignment aligment = axis.AxisAlignment;

            if (aligment == AxisAlignment.Right)
            {
                return(axis.AxisFormattedDataValue);
            }
            else if (aligment == AxisAlignment.Left)
            {
                return(axis.AxisFormattedDataValue);
            }

            Type type = axis.DataValue.GetType();

            if (type.Name.Equals("DateTime"))
            {
                DateTime t = (DateTime)axis.DataValue;

                String formatedT = string.Format("{0:yyyy-MM-dd HH:mm}", t).ToString();
                return(formatedT);
            }
            else if (type.Name.Equals("Double"))
            {
                Double t         = (Double)axis.DataValue;
                Double formatedT = ((int)(t * 10000)) / 10000.0;
                return(formatedT);
            }

            return(axis.DataValue);
        }
        public void SetAxisAlignment(AxisAlignment mode)
        {
            PrevalidateModel();

            _model.AxisAlignment = mode;
        }
Пример #11
0
        /// <summary>
        /// Constructor for an a structure
        /// </summary>
        /// <param name="x">Alignment for the _x a</param>
        /// <param name="y">Alignment for the _y a</param>
        /// <param name="z">Alignment for the _z a</param>
        /// <exception cref="ArgumentException">
        /// Thrown if two or more a share or complement over an alignment.
        /// </exception>
        public Axis(AxisAlignment x, AxisAlignment y, AxisAlignment z)
        {
            bool ud = false, lr = false, nf = false, fail = false;

            if (x == AxisAlignment.UP || x == AxisAlignment.DOWN)
            {
                ud = true;
            }
            if (x == AxisAlignment.LEFT || x == AxisAlignment.RIGHT)
            {
                lr = true;
            }
            if (x == AxisAlignment.NEAR || x == AxisAlignment.FAR)
            {
                nf = true;
            }

            if (y == AxisAlignment.UP || y == AxisAlignment.DOWN)
            {
                ud = ud ? (fail = true): true;
            }
            if (y == AxisAlignment.LEFT || y == AxisAlignment.RIGHT)
            {
                lr = lr ? (fail = true): true;
            }
            if (y == AxisAlignment.NEAR || y == AxisAlignment.FAR)
            {
                nf = nf ? (fail = true): true;
            }

            if (z == AxisAlignment.UP || z == AxisAlignment.DOWN)
            {
                if (ud)
                {
                    fail = true;
                }
            }
            if (z == AxisAlignment.LEFT || z == AxisAlignment.RIGHT)
            {
                if (lr)
                {
                    fail = true;
                }
            }
            if (z == AxisAlignment.NEAR || z == AxisAlignment.FAR)
            {
                if (nf)
                {
                    fail = true;
                }
            }

            if (fail)
            {
                throw new ArgumentException(AXIS_DUPLICATION);
            }

            this.x = x;
            this.y = y;
            this.z = z;
        }
Пример #12
0
        public void Map
        (
            out float x, out float y,
            out float z, float right, float up, float far,
            out bool iRight, out bool iUp, out bool iFar
        )
        {
            // Preinitialisation
            x      = 0.0f; y = 0.0f; z = 0.0f;
            iRight = false; iUp = false; iFar = false;

            switch (X)
            {
            case AxisAlignment.DOWN: x = up; iUp = true; break;

            case AxisAlignment.UP: x = up; break;

            case AxisAlignment.RIGHT: x = right; break;

            case AxisAlignment.LEFT: x = right; iRight = true; break;

            case AxisAlignment.NEAR: x = far; iFar = true; break;

            case AxisAlignment.FAR: x = far; break;

            default: throw new ArgumentException();     // Should never reach this
            }

            switch (Y)
            {
            case AxisAlignment.DOWN: y = up; iUp = true; break;

            case AxisAlignment.UP: y = up; break;

            case AxisAlignment.RIGHT: y = right; break;

            case AxisAlignment.LEFT: y = right; iRight = true; break;

            case AxisAlignment.NEAR: y = far; iFar = true; break;

            case AxisAlignment.FAR: y = far; break;

            default: throw new ArgumentException();     // Should never reach this
            }

            switch (Z)
            {
            case AxisAlignment.DOWN: z = up; iUp = true; break;

            case AxisAlignment.UP: z = up; break;

            case AxisAlignment.RIGHT: z = right; break;

            case AxisAlignment.LEFT: z = right; iRight = true; break;

            case AxisAlignment.NEAR: z = far; iFar = true; break;

            case AxisAlignment.FAR: z = far; break;

            default: throw new ArgumentException();     // Should never reach this
            }
        }
Пример #13
0
        private void Initialize(UlDoubleBufferedSeriesCollection series)
        {
            zoomAxisCombo.SelectedIndex = 0;

            viewGraph.Series.Clear();
            viewGraph.Mode       = EChartMode.Dynamic;
            viewGraph.BackColor  = Color.White;
            viewGraph.LegendFont = new Font("Arial", 7, FontStyle.Regular);

            viewGraph.SetBufferedSeries(series);
            viewGraph.SetPrimaryAxisX(AxisAlignment.Near, "Time", StringAlignment.Center, 0, 60000);

            InitializeYAxes();
            LoadYAxes();

            foreach (YAxisRow row in YAxisRows)
            {
                AxisAlignment align = (row.Align == EAxisAlign.Left) ? AxisAlignment.Near : AxisAlignment.Far;

                if (row.AxisNo == 0)
                {
                    viewGraph.SetPrimaryAxisY(align, row.DescriptionUnit, StringAlignment.Far, row.WholeMin, row.WholeMax);
                }
                else
                {
                    viewGraph.AddSecondaryAxisY(align, row.DescriptionUnit, StringAlignment.Far, row.WholeMin, row.WholeMax);
                }
            }

            InitializePlotSeries();
            LoadPlotSeries();

            xAxis = new XAxisRow();
            LoadXAxis();
            ResetRangeAxisX();

            viewGraph.Prepare();
            viewGraph.SetGridLinesAxisX(true);
            viewGraph.SetGridLinesAxisY(true);

            foreach (SeriesRow row in PlotSeriesRows)
            {
                viewGraph.Series[row.Name].View.Color = row.Color;
                viewGraph.Series[row.Name].Visible    = row.Checked;
                viewGraph.SetSeriesAxisY(row.Name, GetIndexAxisY(row.UnitType));
            }

            foreach (YAxisRow row in YAxisRows)
            {
                viewGraph.AxesY[row.AxisNo].Visibility =
                    (row.Checked == true) ? DefaultBoolean.True : DefaultBoolean.False;
            }

            viewGraph.MarkLine.ShowValueMarkPoint += DoShowValueMarkPoint;
            viewGraph.MarkLine.Visible             = false;

            viewGraph.Zooming.ZoomStackChanged += DoZoomStackChanged;
            viewGraph.Zooming.Clear();

            graphPauseLed.Active = false;

            plotSeriesGrid.DataSource      = PlotSeriesRows;
            plotSeriesGrid.UseDirectXPaint = DefaultBoolean.False;
            plotSeriesGridView.Columns["Checked"].ImageOptions.ImageIndex = 1;
            plotSeriesGridView.Appearance.EvenRow.BackColor        = Color.FromArgb(244, 244, 236);
            plotSeriesGridView.OptionsView.EnableAppearanceEvenRow = true;

            SetCursorAColumnVisible(false);
            SetCursorBColumnVisible(false);

            plotSeriesGridView.RefreshData();
        }
Пример #14
0
        double PositionInInterval <T, TSize>(Interval <T, TSize> interval, double panelSize, double elementSize, T value, AxisAlignment alignment)
            where T : IComparable <T>
            where TSize : IComparable <TSize>
        {
            double percentage = interval.GetPercentageFor(value);
            double position   = percentage * panelSize;

            switch (alignment)
            {
            case AxisAlignment.AfterValue:
                return(interval.IsReversed ? position - elementSize : position);

            case AxisAlignment.Center:
                return(position - (elementSize / 2));

            case AxisAlignment.BeforeValue:
                return(interval.IsReversed ? position : position - elementSize);

            default:
                throw new NotSupportedException(alignment + " is not supported by the AxesPanel.");
            }
        }
Пример #15
0
 public static void SetAlignmentY(FrameworkElement element, AxisAlignment value)
 {
     element.SetValue(AlignmentYProperty, value);
 }
Пример #16
0
        public OrthogonalAxis(AxisAlignment x, AxisAlignment y, AxisAlignment z)
        {
            const Vector vx  = new Vector(1, 0, 0);
            const Vector vMx = new Vector(-1, 0, 0);

            switch (x)
            {
            case AxisAlignment.FORWARD:
                Forward = vx;
                break;

            case AxisAlignment.BACKWARD:
                Forward = vMx;
                break;

            case AxisAlignment.UP:
                Up = vx;
                break;

            case AxisAlignment.DOWN:
                Up = vMx;
                break;

            case AxisAlignment.RIGHT:
                Right = vx;
                break;

            case AxisAlignment.LEFT:
                Right = vMx;
                break;
            }

            const Vector vy  = new Vector(0, 1, 0);
            const Vector vMy = new Vector(0, -1, 0);

            switch (y)
            {
            case AxisAlignment.FORWARD:
                Forward = vy;
                break;

            case AxisAlignment.BACKWARD:
                Forward = vMy;
                break;

            case AxisAlignment.UP:
                Up = vy;
                break;

            case AxisAlignment.DOWN:
                Up = vMy;
                break;

            case AxisAlignment.RIGHT:
                Right = vy;
                break;

            case AxisAlignment.LEFT:
                Right = vMy;
                break;
            }

            const Vector vz  = new Vector(0, 0, 1);
            const Vector vMz = new Vector(0, 0, -1);

            switch (z)
            {
            case AxisAlignment.FORWARD:
                Forward = vz;
                break;

            case AxisAlignment.BACKWARD:
                Forward = vMz;
                break;

            case AxisAlignment.UP:
                Up = vz;
                break;

            case AxisAlignment.DOWN:
                Up = vMz;
                break;

            case AxisAlignment.RIGHT:
                Right = vz;
                break;

            case AxisAlignment.LEFT:
                Right = vMz;
                break;
            }

            if
            (
                Vector.Angle(_right, _up) != Angle.Right_Angle ||
                Vector.Angle(_up, _forward) != Angle.Right_Angle ||
                Vector.Angle(_right, _forward) != Angle.Right_Angle
            )
            {
                throw new ArgumentException("The vectors provided are not orthogonal.");
            }
        }