private static Drawing.Point GetPinPositionForCorner(Shapes.XFormCells input_xfrm, Drawing.Point new_lower_left, SnapCornerPosition corner) { var size = new Drawing.Size(input_xfrm.Width.Result, input_xfrm.Height.Result); var locpin = new Drawing.Point(input_xfrm.LocPinX.Result, input_xfrm.LocPinY.Result); switch (corner) { case SnapCornerPosition.LowerLeft: { return new_lower_left.Add(locpin.X, locpin.Y); } case SnapCornerPosition.UpperRight: { return new_lower_left.Subtract(size.Width, size.Height).Add(locpin.X, locpin.Y); } case SnapCornerPosition.LowerRight: { return new_lower_left.Subtract(size.Width, 0).Add(locpin.X, locpin.Y); } case SnapCornerPosition.UpperLeft: { return new_lower_left.Subtract(0, size.Height).Add(locpin.X, locpin.Y); } default: { throw new System.ArgumentOutOfRangeException(nameof(corner), "Unsupported corner"); } } }