public void SetTimeRegion(double originalRegionBegin, double originalRegionEnd, double finalRegionBegin, double finalRegionEnd)
 {
     using (SceneEditTransaction editTransaction = this.ViewModel.CreateEditTransaction(StringTable.UndoUnitMoveScheduledProperties))
     {
         double scaleFactor = (finalRegionEnd - finalRegionBegin) / (originalRegionEnd - originalRegionBegin);
         TimeRegionChangeDetails details = TimeRegionChangeDetails.None;
         if (Tolerances.AreClose(originalRegionEnd - originalRegionBegin, 0.0))
         {
             details |= TimeRegionChangeDetails.FromZero;
         }
         if (Tolerances.AreClose(finalRegionEnd - finalRegionBegin, 0.0))
         {
             details |= TimeRegionChangeDetails.ToZero;
         }
         if (!Tolerances.AreClose(scaleFactor, 1.0))
         {
             details |= TimeRegionChangeDetails.Scale;
         }
         if (!Tolerances.AreClose(originalRegionBegin, finalRegionBegin))
         {
             details |= TimeRegionChangeDetails.Translate;
         }
         this.RecursiveSetTimeRegion(details, scaleFactor, originalRegionBegin, originalRegionEnd, finalRegionBegin, finalRegionEnd);
         editTransaction.Commit();
     }
 }
        protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParams)
        {
            Point hitPoint = hitTestParams.HitPoint;

            if (Tolerances.AreClose(hitPoint, this.lastPoint))
            {
                return(base.HitTestCore(hitTestParams));
            }
            this.lastPoint = hitPoint;
            double num;

            if (((LayoutBehavior)this.AdornerSet.Behavior).IsNewGridlineEnabled && Mouse.LeftButton != MouseButtonState.Pressed && Mouse.RightButton != MouseButtonState.Pressed)
            {
                Matrix inverseMatrix = ElementUtilities.GetInverseMatrix(this.AdornerSet.Matrix);
                Point  point         = hitPoint * inverseMatrix;
                Point  pointBegin;
                Point  pointEnd;
                this.GetPoints(out pointBegin, out pointEnd, this.AdornerSet.Matrix);
                num = !new Rect(pointBegin, pointEnd).Contains(point) ? double.NaN : (!this.IsX ? point.Y : point.X);
            }
            else
            {
                num = double.NaN;
            }
            if (!this.position.Equals(num))
            {
                this.position = num;
                if (this.isMouseOver)
                {
                    this.InvalidateRender();
                    this.AdornerSet.Update();
                }
            }
            return(base.HitTestCore(hitTestParams));
        }
        protected virtual void ComputeMarginOverrides()
        {
            bool   flag   = false;
            double left   = this.Settings.Margin.Left;
            double right  = this.Settings.Margin.Right;
            double top    = this.Settings.Margin.Top;
            double bottom = this.Settings.Margin.Bottom;

            if (!Tolerances.AreClose(this.SettingsFromElement.Margin.Left, this.Settings.Margin.Left) || !Tolerances.AreClose(this.SettingsFromElement.Margin.Right, this.Settings.Margin.Right))
            {
                this.Settings.LayoutOverrides |= LayoutOverrides.HorizontalMargin;
                left  = this.SettingsFromElement.Margin.Left;
                right = this.SettingsFromElement.Margin.Right;
                flag  = true;
            }
            if (!Tolerances.AreClose(this.SettingsFromElement.Margin.Top, this.Settings.Margin.Top) || !Tolerances.AreClose(this.SettingsFromElement.Margin.Bottom, this.Settings.Margin.Bottom))
            {
                this.Settings.LayoutOverrides |= LayoutOverrides.VerticalMargin;
                top    = this.SettingsFromElement.Margin.Top;
                bottom = this.SettingsFromElement.Margin.Bottom;
                flag   = true;
            }
            if (!flag)
            {
                return;
            }
            this.Settings.Margin = new Thickness(left, top, right, bottom);
        }
Exemple #4
0
        public static Rotation3D GetRotation3DFromDirection(Vector3D direction)
        {
            direction.Normalize();
            Vector3D axis = Vector3D.CrossProduct(Vector3DEditor.pointingDirection, direction);
            double   d    = Vector3D.DotProduct(Vector3DEditor.pointingDirection, direction);

            return(!Tolerances.AreClose(axis.LengthSquared, 0.0) ? (Rotation3D) new AxisAngleRotation3D(axis, Math.Acos(d) * 57.2957795130823) : (!Tolerances.AreClose(d, 1.0) ? (Rotation3D) new AxisAngleRotation3D(Vector3DEditor.perpendicularDirection, 180.0) : Rotation3D.Identity));
        }
Exemple #5
0
 public static bool LessThan(double value1, double value2)
 {
     if (value1 < value2)
     {
         return(!Tolerances.AreClose(value1, value2));
     }
     return(false);
 }
Exemple #6
0
 public static bool LessThanOrClose(double value1, double value2)
 {
     if (value1 >= value2)
     {
         return(Tolerances.AreClose(value1, value2));
     }
     return(true);
 }
 protected override void OnBegin(PathEditContext pathEditContext, MouseDevice mouseDevice)
 {
     if (!Tolerances.AreClose(this.LastTangent, new Vector(0.0, 0.0)))
     {
         this.LastTangent = new Vector(0.0, 0.0);
     }
     base.OnBegin(pathEditContext, mouseDevice);
 }
Exemple #8
0
 public static bool GreaterThan(double value1, double value2)
 {
     if (value1 > value2)
     {
         return(!Tolerances.AreClose(value1, value2));
     }
     return(false);
 }
Exemple #9
0
            public static bool AreClose(Point point1, Point point2)
            {
                if (Tolerances.AreClose(point1.X, point2.X) && Tolerances.AreClose(point1.Y, point2.Y))
                {
                    return(true);
                }

                return(false);
            }
 protected override void Finish()
 {
     if (Tolerances.AreClose(this.initialRenderTransformOrigin, this.EditingElementSet.RenderTransformOrigin))
     {
         return;
     }
     this.EnsureEditTransaction();
     this.EditingElement.ViewModel.Document.AddUndoUnit((IUndoUnit) new MultipleElementCenterEditUndoUnit(this.EditingElementSet, this.initialRenderTransformOrigin, this.EditingElementSet.RenderTransformOrigin));
 }
        private bool ReadCanonicalForm(Transform3D transform, bool useIfChangeable)
        {
            if (!CanonicalTransform3D.IsCanonical(transform))
            {
                return(false);
            }
            Transform3DGroup     transform3Dgroup      = (Transform3DGroup)transform;
            ScaleTransform3D     scaleTransform3D      = transform3Dgroup.Children[1] as ScaleTransform3D;
            RotateTransform3D    rotateTransform3D     = transform3Dgroup.Children[2] as RotateTransform3D;
            TranslateTransform3D translateTransform3D1 = transform3Dgroup.Children[3] as TranslateTransform3D;
            TranslateTransform3D translateTransform3D2 = transform3Dgroup.Children[4] as TranslateTransform3D;

            this.center      = new Point3D(translateTransform3D1.OffsetX, translateTransform3D1.OffsetY, translateTransform3D1.OffsetZ);
            this.scale       = new Vector3D(scaleTransform3D.ScaleX, scaleTransform3D.ScaleY, scaleTransform3D.ScaleZ);
            this.translation = new Vector3D(translateTransform3D2.OffsetX, translateTransform3D2.OffsetY, translateTransform3D2.OffsetZ);
            if (useIfChangeable && !transform3Dgroup.IsFrozen)
            {
                this.transformGroup = transform3Dgroup;
            }
            else
            {
                this.InitializeTransformGroup();
                Vector3D?           nullable            = (Vector3D?)rotateTransform3D.GetValue(CanonicalTransform3D.EulerAnglesProperty);
                bool                flag                = nullable.HasValue;
                AxisAngleRotation3D axisAngleRotation3D = rotateTransform3D.Rotation as AxisAngleRotation3D;
                Quaternion          orientation         = Quaternion.Identity;
                if (axisAngleRotation3D != null)
                {
                    orientation = new Quaternion(axisAngleRotation3D.Axis, axisAngleRotation3D.Angle);
                }
                if (flag)
                {
                    Quaternion quaternion = Helper3D.QuaternionFromEulerAngles(nullable.Value);
                    if (!Tolerances.AreClose(quaternion.Angle, orientation.Angle) || !Tolerances.AreClose(quaternion.Axis, orientation.Axis))
                    {
                        flag = false;
                    }
                }
                if (!flag)
                {
                    nullable = new Vector3D?(Helper3D.EulerAnglesFromQuaternion(orientation));
                }
                this.RotationAngles = nullable.Value;
            }
            return(true);
        }
Exemple #12
0
        public void Update(Rect rect, Thickness margin, Matrix4x4 transformToRoot, double density)
        {
            double unitsPerPixel = 1 / density;

            boundingBox = DpiHelper.RoundToPixel(rect, unitsPerPixel);

            marginZones.Clear();

            if (margin == new Thickness())
            {
                return;
            }

            // If transform to root is more than just an offset (i.e. element or
            // some of its ancestors are scaled/rotated/etc.) then no margins to
            // render. This matches WPF, UWP and WinUI adorners.
            if (!Tolerances.AreClose(transformToRoot.M11, 1) ||
                !Tolerances.AreClose(transformToRoot.M22, 1) ||
                !Tolerances.AreClose(transformToRoot.M12, 0) ||
                !Tolerances.AreClose(transformToRoot.M21, 0))
            {
                return;
            }

            // Create up to 4 rectangles for margins. Keep in mind that some of
            // margin values can be negative, e.g. Margin="-10, 20, 30, -40".

            // Left
            if (!Tolerances.NearZero(margin.Left))
            {
                Rect rc = new Rect();
                rc.Left   = Math.Min(rect.Left - margin.Left, rect.Left);
                rc.Width  = Math.Abs(margin.Left);
                rc.Top    = rect.Top;
                rc.Bottom = rect.Bottom;
                TryAddMarginZone(rc, unitsPerPixel);
            }

            // Right
            if (!Tolerances.NearZero(margin.Right))
            {
                Rect rc = new Rect();
                rc.Left   = Math.Min(rect.Right, rect.Right + margin.Right);
                rc.Width  = Math.Abs(margin.Right);
                rc.Top    = rect.Top;
                rc.Bottom = rect.Bottom;
                TryAddMarginZone(rc, unitsPerPixel);
            }

            // Top
            if (!Tolerances.NearZero(margin.Top))
            {
                Rect rc = new Rect();
                rc.Left   = rect.Left - Math.Max(0, margin.Left);
                rc.Right  = rect.Right + Math.Max(0, margin.Right);
                rc.Top    = Math.Min(rect.Top - margin.Top, rect.Top);
                rc.Height = Math.Abs(margin.Top);
                TryAddMarginZone(rc, unitsPerPixel);
            }

            // Bottom
            if (!Tolerances.NearZero(margin.Bottom))
            {
                Rect rc = new Rect();
                rc.Left   = rect.Left - Math.Max(0, margin.Left);
                rc.Right  = rect.Right + Math.Max(0, margin.Right);
                rc.Top    = Math.Min(rect.Bottom + margin.Bottom, rect.Bottom);
                rc.Height = Math.Abs(margin.Bottom);
                TryAddMarginZone(rc, unitsPerPixel);
            }
        }
Exemple #13
0
        protected static void UpdateElementTransform(SceneElement element, CanonicalDecomposition newTransform, AdornedToolBehavior.TransformPropertyFlags properties)
        {
            Transform transform = element.GetComputedValueAsWpf(Base2DElement.RenderTransformProperty) as Transform;
            CanonicalDecomposition canonicalDecomposition = new CanonicalDecomposition();

            if (transform != null)
            {
                canonicalDecomposition = new CanonicalTransform(transform).Decomposition;
            }
            double num1 = RoundingHelper.RoundScale(newTransform.ScaleX);
            double num2 = RoundingHelper.RoundScale(newTransform.ScaleY);
            double num3 = RoundingHelper.RoundLength(newTransform.TranslationX);
            double num4 = RoundingHelper.RoundLength(newTransform.TranslationY);
            double num5 = RoundingHelper.RoundLength(newTransform.SkewX);
            double num6 = RoundingHelper.RoundLength(newTransform.SkewY);
            double num7 = RoundingHelper.RoundAngle(newTransform.RotationAngle);

            if ((properties & AdornedToolBehavior.TransformPropertyFlags.ScaleX) != AdornedToolBehavior.TransformPropertyFlags.None && !Tolerances.AreClose(canonicalDecomposition.ScaleX, num1))
            {
                element.SetValue(element.Platform.Metadata.CommonProperties.RenderTransformScaleX, (object)num1);
            }
            if ((properties & AdornedToolBehavior.TransformPropertyFlags.ScaleY) != AdornedToolBehavior.TransformPropertyFlags.None && !Tolerances.AreClose(canonicalDecomposition.ScaleY, num2))
            {
                element.SetValue(element.Platform.Metadata.CommonProperties.RenderTransformScaleY, (object)num2);
            }
            if ((properties & AdornedToolBehavior.TransformPropertyFlags.TranslationX) != AdornedToolBehavior.TransformPropertyFlags.None && !Tolerances.AreClose(canonicalDecomposition.TranslationX, num3))
            {
                element.SetValue(element.Platform.Metadata.CommonProperties.RenderTransformTranslationX, (object)num3);
            }
            if ((properties & AdornedToolBehavior.TransformPropertyFlags.TranslationY) != AdornedToolBehavior.TransformPropertyFlags.None && !Tolerances.AreClose(canonicalDecomposition.TranslationY, num4))
            {
                element.SetValue(element.Platform.Metadata.CommonProperties.RenderTransformTranslationY, (object)num4);
            }
            if ((properties & AdornedToolBehavior.TransformPropertyFlags.SkewX) != AdornedToolBehavior.TransformPropertyFlags.None && !Tolerances.AreClose(canonicalDecomposition.SkewX, num5))
            {
                element.SetValue(element.Platform.Metadata.CommonProperties.RenderTransformSkewX, (object)num5);
            }
            if ((properties & AdornedToolBehavior.TransformPropertyFlags.SkewY) != AdornedToolBehavior.TransformPropertyFlags.None && !Tolerances.AreClose(canonicalDecomposition.SkewY, num6))
            {
                element.SetValue(element.Platform.Metadata.CommonProperties.RenderTransformSkewY, (object)num6);
            }
            if ((properties & AdornedToolBehavior.TransformPropertyFlags.RotatationAngle) == AdornedToolBehavior.TransformPropertyFlags.None || Tolerances.AreClose(canonicalDecomposition.RotationAngle, num7))
            {
                return;
            }
            element.SetValue(element.Platform.Metadata.CommonProperties.RenderTransformRotationAngle, (object)num7);
        }
Exemple #14
0
        protected virtual void SetMarginChanges()
        {
            bool   flag1  = false;
            bool   flag2  = false;
            double left   = this.Settings.Margin.Left;
            double right  = this.Settings.Margin.Right;
            double top    = this.Settings.Margin.Top;
            double bottom = this.Settings.Margin.Bottom;

            if (!Tolerances.AreClose(this.SettingsFromElement.Margin.Left, this.Settings.Margin.Left) || !Tolerances.AreClose(this.SettingsFromElement.Margin.Right, this.Settings.Margin.Right))
            {
                if ((this.LayoutOverrides & LayoutOverrides.HorizontalMargin) != LayoutOverrides.None && (this.OverridesToIgnore & (this.Settings.HorizontalAlignment == HorizontalAlignment.Center ? LayoutOverrides.CenterHorizontalMargin : LayoutOverrides.HorizontalMargin)) == LayoutOverrides.None)
                {
                    left  = this.SettingsFromElement.Margin.Left;
                    right = this.SettingsFromElement.Margin.Right;
                    flag1 = true;
                }
                else
                {
                    flag2 = true;
                }
                this.ExplicitOverrides &= ~LayoutOverrides.HorizontalMargin;
                if (double.IsNaN(this.Settings.Width) && (this.OverridesToIgnore & LayoutOverrides.Width) != LayoutOverrides.None && !Tolerances.AreClose(this.SettingsFromElement.Margin.Left + this.SettingsFromElement.Margin.Right, this.Settings.Margin.Left + this.Settings.Margin.Right))
                {
                    this.ExplicitOverrides &= ~LayoutOverrides.Width;
                }
            }
            else if ((this.LayoutOverrides & LayoutOverrides.HorizontalMargin) != LayoutOverrides.None && (this.SettingsFromElement.LayoutOverrides & LayoutOverrides.HorizontalMargin) == LayoutOverrides.None)
            {
                this.ExplicitOverrides |= LayoutOverrides.HorizontalMargin;
            }
            if (!Tolerances.AreClose(this.SettingsFromElement.Margin.Top, this.Settings.Margin.Top) || !Tolerances.AreClose(this.SettingsFromElement.Margin.Bottom, this.Settings.Margin.Bottom))
            {
                if ((this.LayoutOverrides & LayoutOverrides.VerticalMargin) != LayoutOverrides.None && (this.OverridesToIgnore & (this.Settings.VerticalAlignment == VerticalAlignment.Center ? LayoutOverrides.CenterVerticalMargin : LayoutOverrides.VerticalMargin)) == LayoutOverrides.None)
                {
                    top    = this.SettingsFromElement.Margin.Top;
                    bottom = this.SettingsFromElement.Margin.Bottom;
                    flag1  = true;
                }
                else
                {
                    flag2 = true;
                }
                this.ExplicitOverrides &= ~LayoutOverrides.VerticalMargin;
                if (double.IsNaN(this.Settings.Height) && (this.OverridesToIgnore & LayoutOverrides.Height) != LayoutOverrides.None && !Tolerances.AreClose(this.SettingsFromElement.Margin.Top + this.SettingsFromElement.Margin.Bottom, this.Settings.Margin.Top + this.Settings.Margin.Bottom))
                {
                    this.ExplicitOverrides &= ~LayoutOverrides.Height;
                }
            }
            else if ((this.LayoutOverrides & LayoutOverrides.VerticalMargin) != LayoutOverrides.None && (this.SettingsFromElement.LayoutOverrides & LayoutOverrides.VerticalMargin) == LayoutOverrides.None)
            {
                this.ExplicitOverrides |= LayoutOverrides.VerticalMargin;
            }
            if (flag1)
            {
                this.Settings.Margin = new Thickness(left, top, right, bottom);
            }
            if (!flag2)
            {
                return;
            }
            this.Child.SetValueAsWpf(BaseFrameworkElement.MarginProperty, (object)this.Settings.Margin);
        }
Exemple #15
0
        private CanonicalDecomposition CalculateSharedTransform(bool scaleByZoom, bool addParentToRoot)
        {
            bool flag = false;
            CanonicalDecomposition canonicalDecomposition1 = new CanonicalDecomposition();

            this.hasHomogenousRotation = true;
            this.hasHomogenousSkew     = true;
            foreach (SceneElement sceneElement in this.elements)
            {
                if (sceneElement is BaseFrameworkElement)
                {
                    if (!sceneElement.IsAttached)
                    {
                        return(new CanonicalDecomposition());
                    }
                    Transform identity  = Transform.Identity;
                    Transform transform = sceneElement.GetComputedValueAsWpf(sceneElement.Platform.Metadata.CommonProperties.RenderTransform) as Transform ?? Transform.Identity;
                    CanonicalDecomposition canonicalDecomposition2 = new CanonicalDecomposition();
                    CanonicalDecomposition canonicalDecomposition3 = !CanonicalTransform.IsCanonical(transform) ? new CanonicalDecomposition(transform.Value) : new CanonicalTransform(transform).Decomposition;
                    if (!double.IsNaN(canonicalDecomposition3.ScaleX) && !double.IsNaN(canonicalDecomposition3.ScaleY))
                    {
                        if (!flag)
                        {
                            canonicalDecomposition1        = canonicalDecomposition3;
                            canonicalDecomposition1.ScaleX = (double)Math.Sign(canonicalDecomposition1.ScaleX);
                            canonicalDecomposition1.ScaleY = (double)Math.Sign(canonicalDecomposition1.ScaleY);
                            flag = true;
                        }
                        else
                        {
                            if (Math.Sign(canonicalDecomposition3.ScaleX) != Math.Sign(canonicalDecomposition1.ScaleX))
                            {
                                canonicalDecomposition1.ScaleX = 1.0;
                            }
                            if (Math.Sign(canonicalDecomposition3.ScaleY) != Math.Sign(canonicalDecomposition1.ScaleY))
                            {
                                canonicalDecomposition1.ScaleY = 1.0;
                            }
                            if (!Tolerances.AreClose(canonicalDecomposition3.RotationAngle, canonicalDecomposition1.RotationAngle) || !Tolerances.AreClose(canonicalDecomposition3.SkewX, canonicalDecomposition1.SkewX) || !Tolerances.AreClose(canonicalDecomposition3.SkewY, canonicalDecomposition1.SkewY))
                            {
                                canonicalDecomposition1.RotationAngle = 0.0;
                                canonicalDecomposition1.SkewX         = 0.0;
                                canonicalDecomposition1.SkewY         = 0.0;
                                this.hasHomogenousSkew     = false;
                                this.hasHomogenousRotation = false;
                            }
                        }
                    }
                }
            }
            double zoom = this.DesignerContext.ActiveView.Artboard.Zoom;

            if (scaleByZoom)
            {
                canonicalDecomposition1.ScaleX = zoom * canonicalDecomposition1.ScaleX;
                canonicalDecomposition1.ScaleY = zoom * canonicalDecomposition1.ScaleY;
            }
            canonicalDecomposition1.Translation = new Vector(0.0, 0.0);
            if (addParentToRoot && this.PrimaryElement.VisualElementAncestor != null)
            {
                Matrix    computedTransformToRoot = this.ViewModel.DefaultView.GetComputedTransformToRoot(this.PrimaryElement.VisualElementAncestor.Visual);
                Transform transform = this.ViewModel.DefaultView.Artboard.CalculateTransformFromContentToArtboard();
                computedTransformToRoot.Append(transform.Value);
                computedTransformToRoot.OffsetX = 0.0;
                computedTransformToRoot.OffsetY = 0.0;
                CanonicalDecomposition canonicalDecomposition2 = new CanonicalDecomposition(computedTransformToRoot);
                canonicalDecomposition1.Scale          = new Vector(canonicalDecomposition1.ScaleX * (canonicalDecomposition2.ScaleX / zoom), canonicalDecomposition1.ScaleY * (canonicalDecomposition2.ScaleY / zoom));
                canonicalDecomposition1.Skew          += canonicalDecomposition2.Skew;
                canonicalDecomposition1.RotationAngle *= (double)(Math.Sign(canonicalDecomposition2.ScaleX) * Math.Sign(canonicalDecomposition2.ScaleY));
                canonicalDecomposition1.RotationAngle += canonicalDecomposition2.RotationAngle;
                canonicalDecomposition1.Translation   += canonicalDecomposition2.Translation;
            }
            return(canonicalDecomposition1);
        }
Exemple #16
0
        private DefinitionBase SearchForAdjustableDefinition(int index, bool searchForwards, bool shrinkingInSearchDirection)
        {
            Grid grid = this.Parent as Grid;

            if (grid == null)
            {
                return((DefinitionBase)null);
            }
            ExpandoList expandoList = grid.TemplatedParent as ExpandoList;
            IList       list        = this.IsAdjustingHorizontal ? (IList)grid.ColumnDefinitions : (IList)grid.RowDefinitions;

            while (index >= 0 && index < list.Count)
            {
                DefinitionBase definition = (DefinitionBase)list[index];
                if (expandoList != null && ((ExpandoListItemModel)expandoList.Items[index]).IsExpanded && (!shrinkingInSearchDirection || !Tolerances.AreClose(this.GetActualLength(definition), this.GetMinLength(definition))))
                {
                    return(definition);
                }
                index += searchForwards ? 1 : -1;
            }
            return((DefinitionBase)null);
        }
Exemple #17
0
        private RegistrationPointFlags FindRegistrationPointForElement(BaseFrameworkElement element)
        {
            if (!element.IsViewObjectValid)
            {
                return(RegistrationPointFlags.None);
            }
            Point elementCoordinates = element.RenderTransformOriginInElementCoordinates;
            Point point1             = elementCoordinates;

            if (this.IsRenderTransform)
            {
                Rect computedTightBounds = element.GetComputedTightBounds();
                point1 = new Point(elementCoordinates.X - computedTightBounds.Left, elementCoordinates.Y - computedTightBounds.Top);
                Point point2 = (Point)element.GetComputedValueAsWpf(Base2DElement.RenderTransformOriginProperty);
                Point point3 = new Point();
                bool  flag   = false;
                if (!Tolerances.NearZero(computedTightBounds.Width))
                {
                    point1.X /= computedTightBounds.Width;
                }
                else if (!Tolerances.NearZero(point1.X))
                {
                    point1.X = -1.0;
                }
                if (!Tolerances.NearZero(computedTightBounds.Height))
                {
                    point1.Y /= computedTightBounds.Height;
                }
                else if (!Tolerances.NearZero(point1.Y))
                {
                    point1.Y = -1.0;
                }
                if (!double.IsNaN(point2.X) && !double.IsNaN(point2.Y))
                {
                    point3.X = point2.X;
                    point3.Y = point2.Y;
                    flag     = true;
                }
                if ((Tolerances.NearZero(computedTightBounds.Width) || Tolerances.NearZero(computedTightBounds.Height)) && flag)
                {
                    if (!Tolerances.NearZero(computedTightBounds.Width) && Tolerances.AreClose(point1.X, point3.X) && Tolerances.NearZero(point1.Y))
                    {
                        point1 = point3;
                    }
                    else if (!Tolerances.NearZero(computedTightBounds.Height) && Tolerances.AreClose(point1.Y, point3.Y) && Tolerances.NearZero(point1.X))
                    {
                        point1 = point3;
                    }
                    else if (Tolerances.NearZero(computedTightBounds.Width) && Tolerances.NearZero(computedTightBounds.Height) && Tolerances.NearZero(point1))
                    {
                        point1 = point3;
                    }
                }
            }
            foreach (RegistrationPointFlags registrationPoint in Enum.GetValues(typeof(RegistrationPointFlags)))
            {
                if ((this.CenterFromRegistrationPoint(registrationPoint) - point1).LengthSquared <= RegistrationPointModel.RegistrationPointTolerance)
                {
                    return(registrationPoint);
                }
            }
            return(RegistrationPointFlags.None);
        }