Пример #1
0
        protected override SegmentedList <PointDouble> CreateShape(SegmentedList <PointDouble> tracePoints)
        {
            RectDouble  num5;
            PointDouble a    = tracePoints[0];
            PointDouble b    = tracePoints[tracePoints.Count - 1];
            PointDouble num3 = new PointDouble(b.X - a.X, b.Y - a.Y);
            double      num4 = Math.Sqrt((num3.X * num3.X) + (num3.Y * num3.Y));

            if ((base.ModifierKeys & Keys.Shift) != Keys.None)
            {
                PointDouble center = new PointDouble((a.X + b.X) / 2.0, (a.Y + b.Y) / 2.0);
                double      num7   = num4 / 2.0;
                num5 = RectDouble.FromCenter(center, (double)(num7 * 2.0));
            }
            else
            {
                num5 = RectDoubleUtil.FromPixelPoints(a, b);
            }
            PdnGraphicsPath path = new PdnGraphicsPath();

            path.AddEllipse(num5.ToGdipRectangleF());
            using (Matrix matrix = new Matrix())
            {
                path.Flatten(matrix, 0.1f);
            }
            SegmentedList <PointDouble> list = new SegmentedList <PointDouble>(path.PathPoints.Select <PointF, PointDouble>(pt => pt.ToDoublePoint()), 7);

            path.Dispose();
            return(list);
        }
Пример #2
0
        protected override SegmentedList <PointDouble> CreateShape(SegmentedList <PointDouble> tracePoints)
        {
            RectDouble        num3;
            double            num6;
            double            num7;
            PointDouble       a           = tracePoints[0];
            PointDouble       b           = tracePoints[tracePoints.Count - 1];
            SelectionDrawMode mode        = base.ToolSettings.Selection.DrawMode.Value;
            double            num4        = base.ToolSettings.Selection.DrawWidth.Value;
            double            num5        = base.ToolSettings.Selection.DrawHeight.Value;
            MeasurementUnit   sourceUnits = base.ToolSettings.Selection.DrawUnits.Value;

            switch (mode)
            {
            case SelectionDrawMode.FixedRatio:
            case SelectionDrawMode.FixedSize:
                num6 = Math.Abs(num4);
                num7 = Math.Abs(num5);
                break;

            default:
                num6 = num4;
                num7 = num5;
                break;
            }
            switch (mode)
            {
            case SelectionDrawMode.Normal:
                if ((base.ModifierKeys & Keys.Shift) == Keys.None)
                {
                    num3 = RectDoubleUtil.FromPixelPoints(a, b);
                    break;
                }
                num3 = RectDoubleUtil.FromPixelPointsConstrained(a, b);
                break;

            case SelectionDrawMode.FixedRatio:
                try
                {
                    double num13 = b.X - a.X;
                    double num14 = b.Y - a.Y;
                    double num15 = num13 / num6;
                    double num16 = Math.Sign(num15);
                    double num17 = num14 / num7;
                    double num18 = Math.Sign(num17);
                    double num19 = num6 / num7;
                    if (num15 < num17)
                    {
                        double x      = a.X;
                        double y      = a.Y;
                        double right  = a.X + num13;
                        double bottom = a.Y + (num18 * Math.Abs((double)(num13 / num19)));
                        num3 = RectDouble.FromEdges(x, y, right, bottom);
                    }
                    else
                    {
                        double left  = a.X;
                        double top   = a.Y;
                        double num26 = a.X + (num16 * Math.Abs((double)(num14 * num19)));
                        double num27 = a.Y + num14;
                        num3 = RectDouble.FromEdges(left, top, num26, num27);
                    }
                }
                catch (ArithmeticException)
                {
                    num3 = new RectDouble(a.X, a.Y, 0.0, 0.0);
                }
                break;

            case SelectionDrawMode.FixedSize:
            {
                double width  = Document.ConvertMeasurement(num6, sourceUnits, base.Document.DpuUnit, base.Document.DpuX, MeasurementUnit.Pixel);
                double height = Document.ConvertMeasurement(num7, sourceUnits, base.Document.DpuUnit, base.Document.DpuY, MeasurementUnit.Pixel);
                num3 = new RectDouble(b.X, b.Y, width, height);
                break;
            }

            default:
                throw ExceptionUtil.InvalidEnumArgumentException <SelectionDrawMode>(mode, "drawMode");
            }
            RectDouble num8  = RectDouble.Intersect(num3, base.Document.Bounds());
            RectDouble num10 = num8.Int32Bound;

            if (num8.HasPositiveArea)
            {
                SegmentedList <PointDouble> list = new SegmentedList <PointDouble>(5, 7)
                {
                    new PointDouble(num10.Left, num10.Top),
                    new PointDouble(num10.Right, num10.Top),
                    new PointDouble(num10.Right, num10.Bottom),
                    new PointDouble(num10.Left, num10.Bottom)
                };
                list.Add(list[0]);
                return(list);
            }
            return(new SegmentedList <PointDouble>(0, 7));
        }
Пример #3
0
        public void ProcessMouseWheel(Control sender, MouseEventArgs e)
        {
            double      num11;
            double      num12;
            double      num13;
            RectDouble  visibleCanvasViewportBounds = this.canvasView.GetVisibleCanvasViewportBounds();
            PointInt32  point                = base.PointToClient(sender.PointToScreen(e.Location)).ToPointInt32();
            PointDouble viewportPt           = RectDoubleUtil.Clamp(visibleCanvasViewportBounds, point);
            PointDouble extentPt             = this.canvasView.ConvertViewportToExtent(viewportPt);
            PointDouble num5                 = this.canvasView.ConvertExtentToCanvas(extentPt);
            double      scaleRatio           = this.canvasView.ScaleRatio;
            PointDouble viewportCanvasOffset = this.canvasView.ViewportCanvasOffset;
            double      num8                 = ((double)e.Delta) / scaleRatio;
            double      x          = viewportCanvasOffset.X;
            double      y          = viewportCanvasOffset.Y;
            ScaleBasis  scaleBasis = this.canvasView.ScaleBasis;
            ScaleBasis  ratio      = ScaleBasis.Ratio;

            if (Control.ModifierKeys == Keys.Shift)
            {
                num11 = x - num8;
                num12 = y;
                ratio = scaleBasis;
                num13 = scaleRatio;
            }
            else if (Control.ModifierKeys == Keys.Control)
            {
                double num16;
                double num14 = ((double)e.Delta) / 120.0;
                double num15 = Math.Pow(1.12, Math.Abs(num14));
                if (e.Delta > 0)
                {
                    num16 = scaleRatio * num15;
                }
                else
                {
                    num16 = scaleRatio / num15;
                }
                double num17 = this.canvasView.ClampScaleRatio(num16);
                double num18 = Math.Round(num17, MidpointRounding.AwayFromZero);
                if ((Math.Abs((double)(num18 - num17)) < (num18 * 0.1)) && (Math.Abs((double)(num18 - num17)) < Math.Abs((double)(num18 - scaleRatio))))
                {
                    num13 = num18;
                }
                else
                {
                    num13 = num17;
                }
                ratio = ScaleBasis.Ratio;
                num11 = num5.X - (viewportPt.X / num13);
                num12 = num5.Y - (viewportPt.Y / num13);
            }
            else if (Control.ModifierKeys == Keys.None)
            {
                num11 = x;
                num12 = y - num8;
                ratio = scaleBasis;
                num13 = scaleRatio;
            }
            else
            {
                num11 = x;
                num12 = y;
                ratio = scaleBasis;
                num13 = scaleRatio;
            }
            this.canvasView.ViewportCanvasOffset = new PointDouble(num11, num12);
            this.canvasView.ScaleBasis           = ratio;
            this.canvasView.ScaleRatio           = num13;
        }