예제 #1
0
        public override void Draw(DrawingContext context, Matrix matrix)
        {
            if (!this.ShouldDraw)
            {
                return;
            }
            bool   flag    = this.AdornerSet.Behavior.Tool is BrushTransformTool;
            Matrix matrix1 = this.GetCompleteBrushTransformMatrix(true) * matrix;

            if (flag)
            {
                Rect brushBounds = this.BrushBounds;
                if (brushBounds.Width <= 0.0 || brushBounds.Height <= 0.0)
                {
                    return;
                }
                Pen thinPen = this.ThinPen;
                System.Windows.Media.Geometry rectangleGeometry = Adorner.GetTransformedRectangleGeometry(brushBounds, matrix1, thinPen.Thickness);
                context.DrawGeometry((Brush)Brushes.Transparent, thinPen, rectangleGeometry);
            }
            else
            {
                Pen pen = new Pen((Brush)Brushes.Transparent, 15.0);
                pen.Freeze();
                if (!PlatformTypes.IsInstance(this.PlatformBrush, PlatformTypes.GradientBrush, (ITypeResolver)this.Element.ProjectContext))
                {
                    return;
                }
                Point startPoint;
                Point endPoint;
                this.GetBrushOffsetEndpoints(out startPoint, out endPoint, 13.0, 11.0, matrix);
                context.DrawLine(pen, startPoint, endPoint);
                context.DrawLine(this.ThinPen, startPoint, endPoint);
            }
        }
예제 #2
0
 protected void UpdateProvisionalContainerHighlight()
 {
     if (this.ProvisionalContainer == null)
     {
         this.FeedbackAdorner.CloseAdorner();
     }
     else
     {
         SceneView            activeView       = this.ActiveView;
         BaseFrameworkElement frameworkElement = this.provisionalContainer;
         this.FeedbackAdorner.Text = string.Format((IFormatProvider)CultureInfo.CurrentCulture, StringTable.ProvisionalDragDropText, new object[1]
         {
             (object)frameworkElement.DisplayNameNoTextContent
         });
         DrawingContext context             = this.OpenFeedback();
         Rect           computedTightBounds = frameworkElement.GetComputedTightBounds();
         System.Windows.Media.Geometry rectangleGeometry = Adorner.GetTransformedRectangleGeometry(activeView, (SceneElement)frameworkElement, computedTightBounds, 0.0, false);
         this.DashPen.Thickness  = 1.5 / activeView.Zoom;
         this.WhitePen.Thickness = 1.5 / activeView.Zoom;
         context.DrawGeometry((Brush)null, this.WhitePen, rectangleGeometry);
         context.DrawGeometry((Brush)null, this.DashPen, rectangleGeometry);
         this.FeedbackAdorner.DrawAdorner(context);
         this.CloseFeedback();
     }
 }
예제 #3
0
        public override void Draw(DrawingContext drawingContext, Matrix matrix)
        {
            if (!this.ShouldDraw)
            {
                return;
            }
            Rect   targetBounds        = this.TargetBounds;
            Matrix?additionalTransform = new Matrix?();
            ISubElementAdornerSet elementAdornerSet = this.AdornerSet as ISubElementAdornerSet;

            if (elementAdornerSet != null)
            {
                additionalTransform = new Matrix?(elementAdornerSet.TargetMatrix);
            }
            System.Windows.Media.Geometry rectangleGeometry = Adorner.GetTransformedRectangleGeometry(this.DesignerContext.ActiveView, this.Element, additionalTransform, targetBounds, MoveAdorner.transparentPen.Thickness, true);
            drawingContext.DrawGeometry((Brush)null, MoveAdorner.transparentPen, rectangleGeometry);
            base.Draw(drawingContext, matrix);
        }
예제 #4
0
        private void DrawFeedback(Point pointBegin, Point pointEnd)
        {
            Rect rect = new Rect(pointBegin, pointEnd);

            this.ToolBehaviorContext.SnappingEngine.UpdateTargetBounds(rect);
            DrawingContext drawingContext = this.OpenFeedback();
            Pen            thinPen        = FeedbackHelper.GetThinPen(this.ActiveView.Zoom);

            System.Windows.Media.Geometry rectangleGeometry = Adorner.GetTransformedRectangleGeometry(this.ActiveView, this.ActiveSceneInsertionPoint.SceneElement, rect, thinPen.Thickness, false);
            drawingContext.DrawGeometry((Brush)null, thinPen, rectangleGeometry);
            if (!Adorner.NonAffineTransformInParentStack(this.ActiveSceneInsertionPoint.SceneElement))
            {
                Matrix computedTransformToRoot = this.ActiveView.GetComputedTransformToRoot(this.ActiveSceneInsertionPoint.SceneElement);
                double scale = 1.0 / this.ActiveView.Zoom;
                SizeAdorner.DrawDimension(drawingContext, ElementLayoutAdornerType.Right, computedTransformToRoot, computedTransformToRoot, thinPen, rect, scale);
                SizeAdorner.DrawDimension(drawingContext, ElementLayoutAdornerType.Bottom, computedTransformToRoot, computedTransformToRoot, thinPen, rect, scale);
            }
            this.CloseFeedback();
        }
예제 #5
0
        protected void DrawAdorner(DrawingContext context, Matrix matrix, SceneElement adornedElement, Brush borderBrush, DrawingImage icon, string message)
        {
            Rect actualBounds = adornedElement.ViewModel.DefaultView.GetActualBounds(adornedElement.ViewTargetElement);

            if (actualBounds.IsEmpty)
            {
                return;
            }
            MatrixTransform matrixTransform = new MatrixTransform(matrix);

            matrixTransform.Freeze();
            System.Windows.Media.Geometry clipGeometry = (System.Windows.Media.Geometry) new RectangleGeometry(actualBounds);
            clipGeometry.Freeze();
            context.PushOpacity(0.5);
            System.Windows.Media.Geometry rectangleGeometry = Adorner.GetTransformedRectangleGeometry(actualBounds, matrix, 4.0);
            context.DrawGeometry((Brush)Brushes.White, (Pen)null, rectangleGeometry);
            context.Pop();
            context.PushTransform((Transform)matrixTransform);
            context.PushClip(clipGeometry);
            double num1      = 1.0 / this.DesignerContext.ActiveView.Zoom;
            double num2      = num1 * 12.0;
            double num3      = num1 * 24.0;
            Rect   rectangle = new Rect(actualBounds.Left + num2, actualBounds.Top + num2, num3, num3);

            context.DrawImage((ImageSource)icon, rectangle);
            FontFamily    fontFamily    = (FontFamily)Application.Current.FindResource((object)SystemFonts.IconFontFamilyKey);
            double        num4          = (double)Application.Current.FindResource((object)SystemFonts.IconFontSizeKey);
            Typeface      typeface      = new Typeface(fontFamily, FontStyles.Normal, FontWeights.Normal, FontStretches.Normal);
            FormattedText formattedText = new FormattedText(message, CultureInfo.CurrentCulture, FlowDirection.LeftToRight, typeface, num4 * num1, (Brush)Brushes.Black);

            formattedText.MaxTextWidth = Math.Min(3579139.0, Math.Max(0.0, actualBounds.Width - num3 - 3.0 * num2));
            Point origin = new Point(actualBounds.Left + num3 + 2.0 * num2, actualBounds.Top + num2 + Math.Max(0.0, (num3 - formattedText.Height) / 2.0));

            context.DrawText(formattedText, origin);
            context.Pop();
            context.Pop();
            context.PushOpacity(0.5);
            Pen pen = new Pen(borderBrush, 4.0);

            pen.Freeze();
            context.DrawGeometry((Brush)null, pen, rectangleGeometry);
            context.Pop();
        }
예제 #6
0
        public override void Draw(DrawingContext drawingContext, Matrix matrix)
        {
            Rect actualBounds = this.Element.ViewModel.DefaultView.GetActualBounds(this.Element.ViewTargetElement);

            if (actualBounds.IsEmpty)
            {
                return;
            }
            drawingContext.PushOpacity(0.5);
            System.Windows.Media.Geometry rectangleGeometry = Adorner.GetTransformedRectangleGeometry(actualBounds, matrix, 4.0);
            drawingContext.DrawGeometry((Brush)Brushes.Transparent, StaleTypeAdorner.BorderPen, rectangleGeometry);
            drawingContext.PushTransform((Transform) new MatrixTransform(matrix));
            double num1      = 1.0 / this.DesignerContext.ActiveView.Zoom;
            double num2      = num1 * 12.0;
            double num3      = num1 * 24.0;
            Rect   rectangle = new Rect(actualBounds.Left + num2, actualBounds.Top + num2, num3, num3);

            drawingContext.DrawImage((ImageSource)StaleTypeAdorner.ContentDrawing, rectangle);
            drawingContext.Pop();
            drawingContext.Pop();
        }
        public override void Draw(DrawingContext drawingContext, Matrix matrix)
        {
            if (!this.shouldDraw)
            {
                return;
            }
            Rect rect = this.initialBounds;

            System.Windows.Media.Geometry rectangleGeometry;
            if (this.ElementSet.HasHomogeneousRotation)
            {
                rectangleGeometry = Adorner.GetTransformedRectangleGeometry(rect, matrix, 1.0);
            }
            else
            {
                matrix.OffsetX = 0.0;
                matrix.OffsetY = 0.0;
                Matrix matrix1 = new Matrix();
                Point  point   = new Point((this.initialBounds.Left + this.initialBounds.Right) * this.initialRenderTransformOrigin.X, (this.initialBounds.Top + this.initialBounds.Bottom) * this.initialRenderTransformOrigin.Y);
                double angle   = this.rotationAmount;
                if (this.initialSharedTransform.ScaleY < 0.0)
                {
                    angle = -angle;
                }
                if (this.initialSharedTransform.ScaleX < 0.0)
                {
                    angle = -angle;
                }
                matrix1.RotateAt(angle, point.X, point.Y);
                double zoom    = this.DesignerContext.ActiveView.Artboard.Zoom;
                double num     = zoom / this.initialZoom;
                Matrix matrix2 = new Matrix();
                matrix2.Translate(num * this.initialOffset.X, num * this.initialOffset.Y);
                Point  topLeft = this.DesignerContext.ActiveView.Artboard.ArtboardBounds.TopLeft;
                Matrix matrix3 = new Matrix(1.0, 0.0, 0.0, 1.0, (this.startArtboardOrigin.X - topLeft.X) * zoom, (this.startArtboardOrigin.Y - topLeft.Y) * zoom);
                rectangleGeometry = Adorner.GetTransformedRectangleGeometry(rect, matrix1 * matrix * matrix2 * matrix3, RotateBoundingBoxAdorner.Thickness);
            }
            drawingContext.DrawGeometry((Brush)null, new Pen(this.ActiveBrush, RotateBoundingBoxAdorner.Thickness), rectangleGeometry);
        }
예제 #8
0
 private void DrawBounds(DrawingContext ctx, Rect bounds, Brush fillBrush, Pen pen)
 {
     System.Windows.Media.Geometry rectangleGeometry = Adorner.GetTransformedRectangleGeometry(this.DesignerContext.ActiveView, this.Element, bounds, pen.Thickness, true);
     ctx.DrawGeometry(fillBrush, pen, rectangleGeometry);
 }
예제 #9
0
        public override void Draw(DrawingContext drawingContext, Matrix matrix)
        {
            if (!this.ShouldDraw)
            {
                return;
            }
            SceneElementSelectionSet elementSelectionSet = this.DesignerContext.ActiveSceneViewModel.ElementSelectionSet;
            AdornerLayer             adornerLayer        = this.DesignerContext.ActiveView.AdornerLayer;
            Tool      adornerOwnerTool = this.DesignerContext.ToolManager.ActiveTool.AdornerOwnerTool;
            SceneView activeView       = this.DesignerContext.ActiveView;
            Transform transform        = activeView.Artboard.CalculateTransformFromContentToArtboard();
            bool      flag1            = this.ElementSet.AdornsMultipleElements && (adornerOwnerTool.GetSelectionAdornerUsages((SceneElement)null) & SelectionAdornerUsages.ShowBoundingBox) != SelectionAdornerUsages.None;
            bool      flag2            = false;
            bool      flag3            = true;
            Rect      rectangle        = new Rect();

            foreach (SceneElement element in this.ElementSet.Elements)
            {
                IViewObject viewTargetElement = element.ViewTargetElement;
                if (!(element is Base3DElement) && !element.IsHiddenOrCollapsedOrAncestorHiddenOrCollapsed && (viewTargetElement != null && element.Visual != null))
                {
                    Rect actualBounds = this.DesignerContext.ActiveView.GetActualBounds(viewTargetElement);
                    bool flag4        = element == this.ElementSet.PrimaryElement;
                    if ((adornerOwnerTool.GetSelectionAdornerUsages(element) & SelectionAdornerUsages.ShowBoundingBox) != SelectionAdornerUsages.None && this.ElementSet.Elements.Count < 100 || flag4)
                    {
                        Pen pen = flag4 ? this.MediumPen : this.BorderPen;
                        System.Windows.Media.Geometry rectangleGeometry = Adorner.GetTransformedRectangleGeometry(this.DesignerContext.ActiveView, element, actualBounds, pen.Thickness, true);
                        drawingContext.DrawGeometry((Brush)null, pen, rectangleGeometry);
                    }
                    if (flag1)
                    {
                        Rect rect1 = activeView.TransformBounds(element.Visual, (IViewObject)activeView.HitTestRoot, actualBounds);
                        Rect rect2 = transform.TransformBounds(rect1);
                        if (!flag2)
                        {
                            flag2 = Adorner.NonAffineTransformInParentStack(element);
                        }
                        if (flag3)
                        {
                            rectangle = rect2;
                            flag3     = false;
                        }
                        else
                        {
                            rectangle.Union(rect2);
                        }
                    }
                }
            }
            if (!flag1)
            {
                return;
            }
            if (flag2)
            {
                rectangle.Inflate(this.MediumPen.Thickness / 2.0, this.MediumPen.Thickness / 2.0);
                drawingContext.DrawRectangle((Brush)null, this.MediumPen, rectangle);
            }
            else
            {
                System.Windows.Media.Geometry rectangleGeometry = Adorner.GetTransformedRectangleGeometry(this.ElementSet.ElementBounds, this.ElementSet.GetTransformMatrixToAdornerLayer(), this.MediumPen.Thickness);
                drawingContext.DrawGeometry((Brush)null, this.MediumPen, rectangleGeometry);
            }
        }