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); }
private void UpdateSkew() { if (!this.behaviorEnabled) { return; } Vector vector1 = this.MouseDevice.GetPosition((IInputElement)this.ActiveView.ViewRootContainer) - this.startPointerPosition; double num1 = vector1.X * this.transformedDisplacementVector.X + vector1.Y * this.transformedDisplacementVector.Y; vector1.X = this.transformedDisplacementVector.X * num1; vector1.Y = this.transformedDisplacementVector.Y * num1; Vector vector2 = vector1 * this.documentToObjectTransform; double num2 = vector2.X * this.displacementVector.X + vector2.Y * this.displacementVector.Y; CanonicalTransform newTransform = new CanonicalTransform(this.canonicalTransform); Point fixedPoint = !this.skewAroundCenter ? this.oppositeAdornerPosition : this.BaseEditingElement.RenderTransformOriginInElementCoordinates; Vector vector3 = fixedPoint - this.adornerPosition; if (vector3.LengthSquared < FloatingPointArithmetic.DistanceTolerance) { return; } Vector vector4 = vector3 / vector3.Length; double num3 = vector4.X * this.displacementVector.X + vector4.Y * this.displacementVector.Y; if ((this.displacementVector - vector4 * num3).LengthSquared < FloatingPointArithmetic.DistanceTolerance) { return; } newTransform.ApplySkewScale(this.displacementVector, this.adornerPosition - fixedPoint, this.BaseEditingElement.RenderTransformOriginInElementCoordinates, fixedPoint, this.displacementVector, this.adornerPosition - fixedPoint + this.displacementVector * num2); newTransform.ScaleX = RoundingHelper.RoundScale(newTransform.ScaleX); newTransform.ScaleY = RoundingHelper.RoundScale(newTransform.ScaleY); newTransform.SkewX = RoundingHelper.RoundAngle(newTransform.SkewX); newTransform.SkewY = RoundingHelper.RoundAngle(newTransform.SkewY); newTransform.TranslationX = RoundingHelper.RoundLength(newTransform.TranslationX); newTransform.TranslationY = RoundingHelper.RoundLength(newTransform.TranslationY); if ((Math.Abs(newTransform.Skew.X) - 90.0) * (Math.Abs(newTransform.Skew.X) - 90.0) < FloatingPointArithmetic.DistanceTolerance || (Math.Abs(newTransform.Skew.Y) - 90.0) * (Math.Abs(newTransform.Skew.Y) - 90.0) < FloatingPointArithmetic.DistanceTolerance) { return; } AdornedToolBehavior.UpdateElementTransform(this.EditingElement, newTransform, AdornedToolBehavior.TransformPropertyFlags.Scale | AdornedToolBehavior.TransformPropertyFlags.Skew | AdornedToolBehavior.TransformPropertyFlags.Translation); }