示例#1
0
        private void UpdateSkew()
        {
            Vector vector1 = this.transformedDisplacementVector * Vector.Multiply(this.currentPointerPosition - this.lastPointerPosition, this.transformedDisplacementVector);

            this.lastPointerPosition = this.currentPointerPosition;
            double num1 = Vector.Multiply(this.ActiveAdorner.InverseTransformVector(vector1 * this.documentToObjectTransform, false), this.displacementVector);
            Point  relativeBrushCenter = this.ActiveAdorner.RelativeBrushCenter;
            Point  fixedPoint          = !this.skewAroundCenter ? this.oppositeAdornerPosition : relativeBrushCenter;
            Vector vector2             = fixedPoint - this.adornerPosition;

            if (vector2.LengthSquared < FloatingPointArithmetic.DistanceTolerance)
            {
                return;
            }
            vector2 /= vector2.Length;
            double num2 = vector2.X * this.displacementVector.X + vector2.Y * this.displacementVector.Y;

            if ((this.displacementVector - vector2 * num2).LengthSquared < FloatingPointArithmetic.DistanceTolerance)
            {
                return;
            }
            CanonicalTransform transform = new CanonicalTransform(this.ActiveAdorner.BrushTransform);

            transform.UpdateCenter(relativeBrushCenter);
            transform.ApplySkewScale(this.displacementVector, this.adornerPosition - fixedPoint, transform.Center, fixedPoint, this.displacementVector, this.adornerPosition - fixedPoint + this.displacementVector * num1);
            if ((Math.Abs(transform.SkewX) - 90.0) * (Math.Abs(transform.SkewX) - 90.0) < FloatingPointArithmetic.DistanceTolerance || (Math.Abs(transform.SkewY) - 90.0) * (Math.Abs(transform.SkewY) - 90.0) < FloatingPointArithmetic.DistanceTolerance)
            {
                return;
            }
            this.SetBrushTransform(transform);
        }
示例#2
0
 private void UpdateScale()
 {
   Vector scale = new Vector(1.0, 1.0);
   if (this.constrainAspectRatio)
     scale.X = scale.Y = 0.0;
   if (this.ActiveAdorner.TestFlags(EdgeFlags.LeftOrRight))
   {
     double num = this.initialPointerPosition.X - this.currentCenter.X;
     scale.X = Math.Abs(num) >= 1E-06 ? (this.currentPointerPosition.X - this.currentCenter.X) / num : 1.0;
   }
   if (this.ActiveAdorner.TestFlags(EdgeFlags.TopOrBottom))
   {
     double num = this.initialPointerPosition.Y - this.currentCenter.Y;
     scale.Y = Math.Abs(num) >= 1E-06 ? (this.currentPointerPosition.Y - this.currentCenter.Y) / num : 1.0;
   }
   if (this.constrainAspectRatio)
   {
     double num = Math.Max(Math.Abs(scale.X), Math.Abs(scale.Y));
     scale.X = scale.X < 0.0 ? -num : num;
     scale.Y = scale.Y < 0.0 ? -num : num;
   }
   CanonicalTransform transform = new CanonicalTransform(this.initialBrushTransform);
   transform.UpdateCenter(this.ActiveAdorner.RelativeBrushCenter);
   transform.ApplyScale(scale, transform.Center, this.currentCenter);
   this.SetBrushTransform(transform);
 }
示例#3
0
        private void UpdateRotation()
        {
            double num = this.unsnappedAngle;

            if (this.snapping)
            {
                num = this.SnapToAngle(this.unsnappedAngle, BrushRotateBehavior.shiftSnapAngle);
            }
            Point relativeBrushCenter    = this.ActiveAdorner.RelativeBrushCenter;
            CanonicalTransform transform = new CanonicalTransform(this.initialBrushTransform);

            transform.UpdateCenter(relativeBrushCenter);
            transform.ApplyRotation(num - this.initialBrushTransform.RotationAngle, relativeBrushCenter);
            this.SetBrushTransform(transform);
        }