Пример #1
0
        public void ZoomToFitAll()
        {
            this.EnsureValidContentBounds();
            Rect documentBounds = this.DocumentBounds;

            documentBounds.Union(this.ContentBounds);
            if (this.AnnotationLayer.IsVisible)
            {
                foreach (UIElement uiElement in this.annotationLayer.Children)
                {
                    documentBounds.Union((Point)VisualTreeHelper.GetOffset((Visual)uiElement));
                }
            }
            foreach (Artboard.ExtraLayer extraLayer in this.extraLayers)
            {
                if (ArtboardExtraLayerOptionsExtensions.IsSet(extraLayer.Options, ArtboardExtraLayerOptions.IncludeBoundsInZoomToFitAll) && extraLayer.Layer.IsVisible)
                {
                    Rect descendantBounds = VisualTreeHelper.GetDescendantBounds((Visual)extraLayer.Layer);
                    if (!descendantBounds.IsEmpty && ArtboardExtraLayerOptionsExtensions.IsSet(extraLayer.Options, ArtboardExtraLayerOptions.OriginIsDocumentCenter))
                    {
                        descendantBounds.Offset(this.DocumentBounds.Width / 2.0, this.DocumentBounds.Height / 2.0);
                    }
                    documentBounds.Union(descendantBounds);
                }
            }
            this.ZoomToFitRectangleAndAdorners(documentBounds);
        }
Пример #2
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();
        }