Exemplo n.º 1
0
        public void Resize(double factorX, double factorY, Point refer)
        {
            foreach (GraphicVisual gv in this)
            {
                double alfa = (RefAngle - gv.Angle) * Math.PI / 180;
                double sin2 = Math.Pow(Math.Sin(alfa), 2);
                double cos2 = 1 - sin2;

                double fx = cos2 * factorX + sin2 * factorY;
                double fy = sin2 * factorX + cos2 * factorY;


                //Point origin = new RotateTransform(RefAngle).Transform(gv.Origin);
                //origin = new ScaleTransform(1 + factorX, 1 + factorY, refer.X, refer.Y).Transform(origin);
                //gv.Origin = new RotateTransform(-RefAngle).Transform(origin);


                //Point localRefer = gv.Transform.Inverse.Transform(refer);
                Point localRefer = gv.Transform.Inverse.Transform(refer);
                Point outRefer   = new RotateTransform(RefAngle).Transform(refer);

                GraphicVisualHelper.ScaleGraphicVisual(gv, 1 + fx, 1 + fy, outRefer);
                //GraphicVisualHelper.ScaleGraphicVisual(gv, 1 + fx, 1 + fy);
            }

            Point loc = new ScaleTransform(1 + factorX, 1 + factorY, refer.X, refer.Y).Transform(RefRect.Location);

            RefRect = new Rect(loc.X, loc.Y, RefRect.Width * (1 + factorX), RefRect.Height * (1 + factorY));

            UpdateSelection();
        }
Exemplo n.º 2
0
        private DrawingGroup GetSelectionDrawing()
        {
            DrawingGroup drawingGroup = new DrawingGroup();

            foreach (GraphicVisual gv in _visuals)
            {
                var drawing = GraphicVisualHelper.GetGraphicVisualDrawing(gv);
                drawing.Transform = gv.Transform;
                drawingGroup.Children.Add(drawing);
            }
            return(drawingGroup);
        }
Exemplo n.º 3
0
        public void Move(Vector delta)
        {
            // 图形移动距离保留两位小数
            delta.X = Math.Round(delta.X, 2);
            delta.Y = Math.Round(delta.Y, 2);

            // 移动图形
            foreach (GraphicVisual gv in this)
            {
                GraphicVisualHelper.MoveGraphicVisual(gv, delta);
            }

            // 移动 RefRect
            delta   = (Vector)(new RotateTransform(-RefAngle).Transform((Point)delta));
            RefRect = new Rect(RefRect.Location + delta, RefRect.Size);

            UpdateSelection();
        }
Exemplo n.º 4
0
        public void Rotate(double delta)
        {
            Point center = new Point(RefRect.X + RefRect.Width / 2, RefRect.Y + RefRect.Height / 2);

            center = new RotateTransform(RefAngle).Transform(center);

            double angle = Math.Round(delta, 2);

            foreach (GraphicVisual gv in this)
            {
                GraphicVisualHelper.RotateGraphicVisual(gv, angle, center);
            }

            Point loc = new RotateTransform(RefAngle).Transform(RefRect.Location);

            loc       = new RotateTransform(angle, center.X, center.Y).Transform(loc);
            RefAngle += angle;
            loc       = new RotateTransform(-RefAngle).Transform(loc);
            RefRect   = new Rect(loc, RefRect.Size);

            UpdateSelection();
        }