Пример #1
0
        static Transform CreateNormalizeTransform(Rect bounds, Point location, Size size, double angle)
        {
            var t = new TransformGroup();

            var b = bounds;

            // Move center of the geometry to origin
            t.Children.Add(new TranslateTransform(-b.X - b.Width / 2, -b.Y - b.Height / 2));
            // Rotate around origin
            t.Children.Add(new RotateTransform(angle));

            b = t.TransformBounds(bounds);
            // Scale to requested size
            t.Children.Add(new ScaleTransform(size.Width / b.Width, size.Height / b.Height));

            b = t.TransformBounds(bounds);
            // Move to requested position
            t.Children.Add(new TranslateTransform(-b.X + location.X, -b.Y + location.Y));

            t.Freeze();

            b = t.TransformBounds(bounds);
            Debug.Assert(Math.Abs(b.X - location.X) < 0.0001);
            Debug.Assert(Math.Abs(b.Y - location.Y) < 0.0001);
            Debug.Assert(Math.Abs(b.Width - size.Width) < 0.0001);
            Debug.Assert(Math.Abs(b.Height - size.Height) < 0.0001);

            return(t);
        }
Пример #2
0
            public DrawHandler(WindowGraphics windowGraphics)
            {
                this.windowGraphics = windowGraphics;
                windowGraphics.TryUpdateGraphics();
                DrawingContext = windowGraphics.drawingVisual.RenderOpen();
                var transformGroup = new TransformGroup();

                transformGroup.Children.Add(new ScaleTransform(1, -1));
                transformGroup.Children.Add(new TranslateTransform(0, windowGraphics.height));
                transformGroup.Freeze();
                DrawingContext.PushTransform(transformGroup);
            }
        /// <summary>  </summary>
        public override void InitializeTransform()
        {
            const double mercatorSize       = 360;
            var          translateTransform = new TranslateTransform(MapView.ReferenceSize / 2 - 180, MapView.ReferenceSize / 2 - 180);
            var          zoomTransform      = new ScaleTransform(MapView.ZoomAdjust * MapView.ReferenceSize / mercatorSize, MapView.ZoomAdjust * MapView.ReferenceSize / mercatorSize, MapView.ReferenceSize / 2, MapView.ReferenceSize / 2);
            var          transformGroup     = new TransformGroup();

            transformGroup.Children.Add(translateTransform);
            transformGroup.Children.Add(zoomTransform);

            zoomTransform.Freeze();
            translateTransform.Freeze();
            transformGroup.Freeze();

            RenderTransform = transformGroup;
        }
Пример #4
0
        protected virtual void UpdateChildren()
        {
            if (this.designerView == null)
            {
                return;
            }
            double zoom = this.Zoom;
            Vector rootToArtboardScale = this.ViewRootToArtboardScale;

            rootToArtboardScale.X      *= zoom;
            rootToArtboardScale.Y      *= zoom;
            this.designerView.ZoomLevel = this.Zoom;
            double         centerX         = this.CenterX;
            double         centerY         = this.CenterY;
            TransformGroup transformGroup1 = new TransformGroup();

            transformGroup1.Children.Add((Transform) new ScaleTransform(rootToArtboardScale.X, rootToArtboardScale.Y, centerX, centerY));
            transformGroup1.Children.Add((Transform) new TranslateTransform(this.canvas.RenderSize.Width / 2.0 - centerX, this.canvas.RenderSize.Height / 2.0 - centerY));
            Point point = this.TranslatePoint(new Point(1.0 / rootToArtboardScale.X, 1.0 / rootToArtboardScale.Y) * transformGroup1.Value, this.VisualTreeRoot);

            point.X = Math.Round(point.X) - point.X;
            point.Y = Math.Round(point.Y) - point.Y;
            transformGroup1.Children.Add((Transform) new TranslateTransform(point.X, point.Y));
            transformGroup1.Freeze();
            this.designerView.RenderTransform     = (Transform)transformGroup1;
            this.feedbackLayer.RenderTransform    = (Transform)transformGroup1;
            this.liveControlLayer.RenderTransform = (Transform)transformGroup1;
            this.annotationLayer.RenderTransform  = (Transform)transformGroup1;
            foreach (Artboard.ExtraLayer extraLayer in this.extraLayers)
            {
                TransformGroup transformGroup2 = transformGroup1;
                if (ArtboardExtraLayerOptionsExtensions.IsSet(extraLayer.Options, ArtboardExtraLayerOptions.OriginIsDocumentCenter))
                {
                    transformGroup2 = new TransformGroup();
                    transformGroup2.Children.Add((Transform) new TranslateTransform(this.DocumentBounds.Width / 2.0, this.DocumentBounds.Height / 2.0));
                    transformGroup2.Children.Add((Transform)transformGroup1);
                    transformGroup2.Freeze();
                }
                extraLayer.Layer.RenderTransform = (Transform)transformGroup2;
            }
            this.annotationLayer.ChildRenderTransform = (Transform) new ScaleTransform(1.0 / zoom, 1.0 / zoom, 0.0, 0.0);
            this.contentBorder.BorderThickness        = new Thickness(1.0 / rootToArtboardScale.X);
            this.transform = (Transform)transformGroup1;
            this.snapToGridRenderer.InvalidateVisual();
        }
Пример #5
0
        protected override void OnRender(DrawingContext drawingContext)
        {
            var view = this.TextView;

            if (view == null || !view.VisualLinesValid)
            {
                return;
            }
            if (!Workspace.CurrentWorkspace.DebugContext.IsDebuggerAttached)
            {
                return;
            }
            if (!Workspace.CurrentWorkspace.DebugContext.IsPaused)
            {
                return;
            }
            if (Workspace.CurrentWorkspace.CurrentDocument != Workspace.CurrentWorkspace.DebugContext.CurrentDocument)
            {
                return;
            }
            var color = new SolidColorBrush(ConfigHost.Coloring.ExecutionMarker.MainColor);

            color.Freeze();
            var pen = new Pen(new SolidColorBrush(ConfigHost.Coloring.ExecutionMarker.BorderColor), 2);

            pen.Freeze();

            var line = view.GetVisualLine(Workspace.CurrentWorkspace.DebugContext.CurrentLine);

            if (line == null)
            {
                return;
            }
            var lineTop = line.GetTextLineVisualYPosition(line.TextLines[0], VisualYPosition.TextTop) - view.VerticalOffset;
            var lineBot = line.GetTextLineVisualYPosition(line.TextLines[0], VisualYPosition.TextBottom) - view.VerticalOffset;
            var geo     = new StreamGeometry();

            using (var context = geo.Open())
            {
                context.BeginFigure(new Point(3, 5), true, true);
                context.LineTo(new Point(6, 5), false, false);
                context.LineTo(new Point(6, 2), false, false);
                context.LineTo(new Point(10, 6.5), false, false);
                context.LineTo(new Point(6, 11), false, false);
                context.LineTo(new Point(6, 8), false, false);
                context.LineTo(new Point(3, 8), false, false);
            }
            var       transgroup = new TransformGroup();
            Transform t;

            t = new TranslateTransform(-16, lineTop);
            t.Freeze();
            transgroup.Children.Add(t);

            t = new ScaleTransform((lineBot - lineTop) / 14, (lineBot - lineTop) / 14);
            t.Freeze();
            transgroup.Children.Add(t);

            transgroup.Freeze();
            geo.Transform = transgroup;
            geo.Freeze();

            drawingContext.DrawGeometry(color, pen, geo);
        }
Пример #6
0
        /// <summary> Returns a Transform object for a spatial reference. </summary>
        /// <param name="reference"> The spatial reference. </param>
        /// <returns> The resulting render transform. </returns>
        public static Transform CreateTransform(SpatialReference reference)
        {
            switch (reference)
            {
            case SpatialReference.PtvMercator:
            {
                const double EARTH_RADIUS  = 6371000.0;
                const double MERCATOR_SIZE = EARTH_RADIUS * 2.0 * Math.PI;

                var translateTransform = new TranslateTransform(MapView.ReferenceSize / 2, MapView.ReferenceSize / 2);
                var zoomTransform      = new ScaleTransform(MapView.ZoomAdjust * MapView.ReferenceSize / MERCATOR_SIZE, -MapView.ZoomAdjust * MapView.ReferenceSize / MERCATOR_SIZE, MapView.ReferenceSize / 2, MapView.ReferenceSize / 2);
                var transformGroup     = new TransformGroup();
                transformGroup.Children.Add(translateTransform);
                transformGroup.Children.Add(zoomTransform);

                zoomTransform.Freeze();
                translateTransform.Freeze();
                transformGroup.Freeze();

                return(transformGroup);
            }

            case SpatialReference.PtvMercatorInvertedY:
            {
                const double EARTH_RADIUS  = 6371000.0;
                const double MERCATOR_SIZE = EARTH_RADIUS * 2.0 * Math.PI;

                var translateTransform = new TranslateTransform(MapView.ReferenceSize / 2, MapView.ReferenceSize / 2);
                var zoomTransform      = new ScaleTransform(MapView.ZoomAdjust * MapView.ReferenceSize / MERCATOR_SIZE, MapView.ZoomAdjust * MapView.ReferenceSize / MERCATOR_SIZE, MapView.ReferenceSize / 2, MapView.ReferenceSize / 2);
                var transformGroup     = new TransformGroup();
                transformGroup.Children.Add(translateTransform);
                transformGroup.Children.Add(zoomTransform);

                zoomTransform.Freeze();
                translateTransform.Freeze();
                transformGroup.Freeze();

                return(transformGroup);
            }

            case SpatialReference.WebMercator:
            {
                const double EARTH_RADIUS  = 6378137.0;
                const double MERCATOR_SIZE = EARTH_RADIUS * 2.0 * Math.PI;

                var translateTransform = new TranslateTransform(MapView.ReferenceSize / 2, MapView.ReferenceSize / 2);
                var zoomTransform      = new ScaleTransform(MapView.ZoomAdjust * MapView.ReferenceSize / MERCATOR_SIZE, -MapView.ZoomAdjust * MapView.ReferenceSize / MERCATOR_SIZE, MapView.ReferenceSize / 2, MapView.ReferenceSize / 2);
                var transformGroup     = new TransformGroup();
                transformGroup.Children.Add(translateTransform);
                transformGroup.Children.Add(zoomTransform);

                zoomTransform.Freeze();
                translateTransform.Freeze();
                transformGroup.Freeze();

                return(transformGroup);
            }

            case SpatialReference.WebMercatorInvertedY:
            {
                const double EARTH_RADIUS  = 6378137.0;
                const double MERCATOR_SIZE = EARTH_RADIUS * 2.0 * Math.PI;

                var translateTransform = new TranslateTransform(MapView.ReferenceSize / 2, MapView.ReferenceSize / 2);
                var zoomTransform      = new ScaleTransform(MapView.ZoomAdjust * MapView.ReferenceSize / MERCATOR_SIZE, MapView.ZoomAdjust * MapView.ReferenceSize / MERCATOR_SIZE, MapView.ReferenceSize / 2, MapView.ReferenceSize / 2);
                var transformGroup     = new TransformGroup();
                transformGroup.Children.Add(translateTransform);
                transformGroup.Children.Add(zoomTransform);

                zoomTransform.Freeze();
                translateTransform.Freeze();
                transformGroup.Freeze();

                return(transformGroup);
            }

            default:
                throw new ArgumentException("not supported");
            }
        }