コード例 #1
0
 public void UpdateSelection(GridDimension script)
 {
     foreach (GridDimension s in gridDimensions)
     {
         s.Unpressed();
     }
     currentSelectedDimension = script;
     currentSelectedDimension.Pressed();
 }
コード例 #2
0
        public virtual void UpdateScaling()
        {
            GraphBounds nonTransformedBounds;
            GetRawDataBounds(out nonTransformedBounds, out _TransformedBounds);
            if (_AlwaysShowZeroX)
            {
                _TransformedBounds.MinX = Math.Min(0, _TransformedBounds.MinX);
                _TransformedBounds.MaxX = Math.Max(0, _TransformedBounds.MaxX);
            }
            if (_AlwaysShowZeroY)
            {
                _TransformedBounds.MinY = Math.Min(0, _TransformedBounds.MinY);
                _TransformedBounds.MaxY = Math.Max(0, _TransformedBounds.MaxY);
            }
            if (_CenterX)
            {
                double max = Math.Max(Math.Abs(_TransformedBounds.MinX), Math.Abs(_TransformedBounds.MaxX));
                _TransformedBounds.MinX = -max;
                _TransformedBounds.MaxX = max;
            }
            if (_CenterY)
            {
                double max = Math.Max(Math.Abs(_TransformedBounds.MinY), Math.Abs(_TransformedBounds.MaxY));
                _TransformedBounds.MinY = -max;
                _TransformedBounds.MaxY = max;
            }

            GraphBounds transformedBounds = _TransformedBounds;

            if (_ForceCustomBounds)
            {
                transformedBounds = TransformedBounds;
                double minX = transformedBounds.MinX, minY = transformedBounds.MinY, maxX = transformedBounds.MaxX, maxY = transformedBounds.MaxY;
                if (TransformX != null)
                {
                    TransformX(this, false, ref minX);
                    TransformX(this, false, ref maxX);
                }
                if (TransformY != null)
                {
                    TransformY(this, false, ref minY);
                    TransformY(this, false, ref maxY);
                }
                nonTransformedBounds = new GraphBounds(minX, maxX, minY, maxY);
            }

            _DataRectangle = new Rectangle(_AdditionalPadding.Left, _AdditionalPadding.Top, Width - _AdditionalPadding.Horizontal - 1, Height - _AdditionalPadding.Vertical - 1);

            Graphics gr = Graphics.FromHwnd(Handle);

            //Create list of grid points, screen coordinates will be assigned later
            _YGridObj = _YGrid.CreateDimensionObjectTemplate(transformedBounds.MinY, transformedBounds.MaxY, nonTransformedBounds.MinY, nonTransformedBounds.MaxY, _DataRectangle.Height);

            /* Grid/labels computation algorithm:
             *  1. Compute fixed Y padding (font height)
             *  2. Determine Y labels, place them, compute X padding (max. Y label width)
             *  3. Determine X labels, place them
             *  4. Compute label visibility
             */

            int maxLabelWidth = 0;
            int yPadding = Size.Ceiling(gr.MeasureString("M", Font)).Height + BigRulerDash + RulerTextSpacing;
            if (!_XGrid.ShowLabels)
                yPadding = 5;

            //Reflect Y padding only. Used by MapY()
            _DataRectangle = new Rectangle(_AdditionalPadding.Left, _AdditionalPadding.Top, Width - _AdditionalPadding.Horizontal - 1, Height - _AdditionalPadding.Vertical - 1 - yPadding);

            for (int i = 0; i < _YGridObj.Data.Length; i++)
            {
                GridLine line = _YGridObj.Data[i];
                double rawVal = line.RawValue;
                if (_YGrid.TransformLabelValues && !_YGrid.ProportionalToTransformedScale)
                    DoTransformY(ref rawVal);
                string val = string.Format(_DefaultYFormat, rawVal);
                if (FormatYValue != null)
                    FormatYValue(this, line.RawValue, ref val);
                line.Label = val;
                Size labelSize = Size.Ceiling(gr.MeasureString(val, Font));
                line.LabelSize = labelSize.Height;
                maxLabelWidth = Math.Max(maxLabelWidth, labelSize.Width);

                line.ScreenCoordinate = MapY(line.RawValue, !_YGridObj.Transformed);
                if (i == 0)
                    line.TextCoordinate = Math.Min(line.ScreenCoordinate - line.LabelSize / 2, _DataRectangle.Bottom - line.LabelSize);
                else if (i == (_YGridObj.Data.Length - 1))
                    line.TextCoordinate = Math.Max(line.ScreenCoordinate - line.LabelSize / 2, _DataRectangle.Top);
                else
                    line.TextCoordinate = line.ScreenCoordinate - line.LabelSize / 2;
            }

            int xPadding = maxLabelWidth + BigRulerDash + RulerTextSpacing;
            if (!_YGrid.ShowLabels)
                xPadding = 0;

            //Reflect both X and Y padding
            _DataRectangle = new Rectangle(_AdditionalPadding.Left + xPadding, _AdditionalPadding.Top, Width - _AdditionalPadding.Horizontal - 1 - xPadding, Height - _AdditionalPadding.Vertical - 1 - yPadding);

            _XGridObj = _XGrid.CreateDimensionObjectTemplate(transformedBounds.MinX, transformedBounds.MaxX, nonTransformedBounds.MinX, nonTransformedBounds.MaxX, _DataRectangle.Width);

            for (int i = 0; i < _XGridObj.Data.Length; i++)
            {
                GridLine line = _XGridObj.Data[i];
                double rawVal = line.RawValue;
                if (_XGrid.TransformLabelValues && !_XGrid.ProportionalToTransformedScale)
                    DoTransformX(ref rawVal);

                string val = string.Format(_DefaultXFormat, rawVal);
                if (FormatXValue != null)
                    FormatXValue(this, line.RawValue, ref val);
                line.Label = val;
                line.LabelSize = Size.Ceiling(gr.MeasureString(val, Font)).Width;
                line.LabelVisible = true;

                line.ScreenCoordinate = MapX(line.RawValue, !_YGridObj.Transformed);
                if (i == 0)
                    line.TextCoordinate = Math.Max(line.ScreenCoordinate - line.LabelSize / 2, _DataRectangle.Left);
                else if (i == (_XGridObj.Data.Length - 1))
                    line.TextCoordinate = Math.Min(line.ScreenCoordinate - line.LabelSize / 2, _DataRectangle.Right - line.LabelSize);
                else
                    line.TextCoordinate = line.ScreenCoordinate - line.LabelSize / 2;
            }

            _YGridObj.ComputeLabelVisibility(_YGrid.DistributeLabelsEvenly && _YGridObj.Transformed, true);
            _XGridObj.ComputeLabelVisibility(_XGrid.DistributeLabelsEvenly && _XGridObj.Transformed, false);
            Invalidate();
        }