diff --git a/Source/Charts/Data/Implementations/ChartBaseDataSet.swift b/Source/Charts/Data/Implementations/ChartBaseDataSet.swift index 7136f2f04b..b78867679e 100644 --- a/Source/Charts/Data/Implementations/ChartBaseDataSet.swift +++ b/Source/Charts/Data/Implementations/ChartBaseDataSet.swift @@ -422,5 +422,3 @@ open class ChartBaseDataSet: NSObject, IChartDataSet return copy } } - - diff --git a/Source/Charts/Highlight/RadarHighlighter.swift b/Source/Charts/Highlight/RadarHighlighter.swift index 8df2d3195a..bedd95037c 100644 --- a/Source/Charts/Highlight/RadarHighlighter.swift +++ b/Source/Charts/Highlight/RadarHighlighter.swift @@ -66,10 +66,8 @@ open class RadarHighlighter: PieRadarHighlighter let y = (entry.y - chart.chartYMin) - let p = ChartUtils.getPosition( - center: chart.centerOffsets, - dist: CGFloat(y) * factor * CGFloat(phaseY), - angle: sliceangle * CGFloat(index) * CGFloat(phaseX) + chart.rotationAngle) + let p = chart.centerOffsets.moving(distance: CGFloat(y) * factor * CGFloat(phaseY), + atAngle: sliceangle * CGFloat(index) * CGFloat(phaseX) + chart.rotationAngle) vals.append(Highlight(x: Double(index), y: entry.y, xPx: p.x, yPx: p.y, dataSetIndex: i, axis: dataSet.axisDependency)) } diff --git a/Source/Charts/Renderers/RadarChartRenderer.swift b/Source/Charts/Renderers/RadarChartRenderer.swift index ab4890f646..3b9b87fbd9 100644 --- a/Source/Charts/Renderers/RadarChartRenderer.swift +++ b/Source/Charts/Renderers/RadarChartRenderer.swift @@ -76,10 +76,8 @@ open class RadarChartRenderer: LineRadarRenderer { guard let e = dataSet.entryForIndex(j) else { continue } - let p = ChartUtils.getPosition( - center: center, - dist: CGFloat((e.y - chart.chartYMin) * Double(factor) * phaseY), - angle: sliceangle * CGFloat(j) * CGFloat(phaseX) + chart.rotationAngle) + let p = center.moving(distance: CGFloat((e.y - chart.chartYMin) * Double(factor) * phaseY), + atAngle: sliceangle * CGFloat(j) * CGFloat(phaseX) + chart.rotationAngle) if p.x.isNaN { @@ -170,10 +168,8 @@ open class RadarChartRenderer: LineRadarRenderer { guard let e = dataSet.entryForIndex(j) else { continue } - let p = ChartUtils.getPosition( - center: center, - dist: CGFloat(e.y - chart.chartYMin) * factor * CGFloat(phaseY), - angle: sliceangle * CGFloat(j) * CGFloat(phaseX) + chart.rotationAngle) + let p = center.moving(distance: CGFloat(e.y - chart.chartYMin) * factor * CGFloat(phaseY), + atAngle: sliceangle * CGFloat(j) * CGFloat(phaseX) + chart.rotationAngle) let valueFont = dataSet.valueFont @@ -197,10 +193,8 @@ open class RadarChartRenderer: LineRadarRenderer if let icon = e.icon, dataSet.isDrawIconsEnabled { - var pIcon = ChartUtils.getPosition( - center: center, - dist: CGFloat(e.y) * factor * CGFloat(phaseY) + iconsOffset.y, - angle: sliceangle * CGFloat(j) * CGFloat(phaseX) + chart.rotationAngle) + var pIcon = center.moving(distance: CGFloat(e.y) * factor * CGFloat(phaseY) + iconsOffset.y, + atAngle: sliceangle * CGFloat(j) * CGFloat(phaseX) + chart.rotationAngle) pIcon.y += iconsOffset.x ChartUtils.drawImage(context: context, @@ -248,10 +242,8 @@ open class RadarChartRenderer: LineRadarRenderer for i in stride(from: 0, to: maxEntryCount, by: xIncrements) { - let p = ChartUtils.getPosition( - center: center, - dist: CGFloat(chart.yRange) * factor, - angle: sliceangle * CGFloat(i) + rotationangle) + let p = center.moving(distance: CGFloat(chart.yRange) * factor, + atAngle: sliceangle * CGFloat(i) + rotationangle) _webLineSegmentsBuffer[0].x = center.x _webLineSegmentsBuffer[0].y = center.y @@ -274,8 +266,8 @@ open class RadarChartRenderer: LineRadarRenderer { let r = CGFloat(chart.yAxis.entries[j] - chart.chartYMin) * factor - let p1 = ChartUtils.getPosition(center: center, dist: r, angle: sliceangle * CGFloat(i) + rotationangle) - let p2 = ChartUtils.getPosition(center: center, dist: r, angle: sliceangle * CGFloat(i + 1) + rotationangle) + let p1 = center.moving(distance: r, atAngle: sliceangle * CGFloat(i) + rotationangle) + let p2 = center.moving(distance: r, atAngle: sliceangle * CGFloat(i + 1) + rotationangle) _webLineSegmentsBuffer[0].x = p1.x _webLineSegmentsBuffer[0].y = p1.y @@ -336,10 +328,8 @@ open class RadarChartRenderer: LineRadarRenderer let y = e.y - chart.chartYMin - _highlightPointBuffer = ChartUtils.getPosition( - center: center, - dist: CGFloat(y) * factor * CGFloat(animator.phaseY), - angle: sliceangle * CGFloat(high.x) * CGFloat(animator.phaseX) + chart.rotationAngle) + _highlightPointBuffer = center.moving(distance: CGFloat(y) * factor * CGFloat(animator.phaseY), + atAngle: sliceangle * CGFloat(high.x) * CGFloat(animator.phaseX) + chart.rotationAngle) high.setDraw(pt: _highlightPointBuffer) diff --git a/Source/Charts/Renderers/XAxisRendererRadarChart.swift b/Source/Charts/Renderers/XAxisRendererRadarChart.swift index ab57149cce..85aeecbf44 100644 --- a/Source/Charts/Renderers/XAxisRendererRadarChart.swift +++ b/Source/Charts/Renderers/XAxisRendererRadarChart.swift @@ -58,7 +58,7 @@ open class XAxisRendererRadarChart: XAxisRenderer let angle = (sliceangle * CGFloat(i) + chart.rotationAngle).truncatingRemainder(dividingBy: 360.0) - let p = ChartUtils.getPosition(center: center, dist: CGFloat(chart.yRange) * factor + xAxis.labelRotatedWidth / 2.0, angle: angle) + let p = center.moving(distance: CGFloat(chart.yRange) * factor + xAxis.labelRotatedWidth / 2.0, atAngle: angle) drawLabel(context: context, formattedLabel: label, diff --git a/Source/Charts/Renderers/YAxisRendererRadarChart.swift b/Source/Charts/Renderers/YAxisRendererRadarChart.swift index a1afd0135d..70e72df23e 100644 --- a/Source/Charts/Renderers/YAxisRendererRadarChart.swift +++ b/Source/Charts/Renderers/YAxisRendererRadarChart.swift @@ -186,7 +186,7 @@ open class YAxisRendererRadarChart: YAxisRenderer { let r = CGFloat(yAxis.entries[j] - yAxis._axisMinimum) * factor - let p = ChartUtils.getPosition(center: center, dist: r, angle: chart.rotationAngle) + let p = center.moving(distance: r, atAngle: chart.rotationAngle) let label = yAxis.getFormattedLabel(j) @@ -252,7 +252,7 @@ open class YAxisRendererRadarChart: YAxisRenderer for j in 0 ..< (data.maxEntryCountSet?.entryCount ?? 0) { - let p = ChartUtils.getPosition(center: center, dist: r, angle: sliceangle * CGFloat(j) + chart.rotationAngle) + let p = center.moving(distance: r, atAngle: sliceangle * CGFloat(j) + chart.rotationAngle) if j == 0 { diff --git a/Source/Charts/Utils/ChartUtils.swift b/Source/Charts/Utils/ChartUtils.swift index 38603a5c60..9f73270bda 100644 --- a/Source/Charts/Utils/ChartUtils.swift +++ b/Source/Charts/Utils/ChartUtils.swift @@ -12,34 +12,37 @@ import Foundation import CoreGraphics -#if !os(OSX) - import UIKit -#endif - -extension FloatingPoint { - var DEG2RAD: Self { +extension FloatingPoint +{ + var DEG2RAD: Self + { return self * .pi / 180 } - var RAD2DEG: Self { + var RAD2DEG: Self + { return self * 180 / .pi } /// - returns: An angle between 0.0 < 360.0 (not less than zero, less than 360) /// NOTE: Value must be in degrees - var normalizedAngle: Self { + var normalizedAngle: Self + { let angle = truncatingRemainder(dividingBy: 360) return (sign == .minus) ? angle + 360 : angle } } -extension CGSize { - func rotatedBy(degrees: CGFloat) -> CGSize { +extension CGSize +{ + func rotatedBy(degrees: CGFloat) -> CGSize + { let radians = degrees.DEG2RAD return rotatedBy(radians: radians) } - func rotatedBy(radians: CGFloat) -> CGSize { + func rotatedBy(radians: CGFloat) -> CGSize + { return CGSize( width: abs(width * cos(radians)) + abs(height * sin(radians)), height: abs(width * sin(radians)) + abs(height * cos(radians)) @@ -47,9 +50,11 @@ extension CGSize { } } -extension Double { +extension Double +{ /// Rounds the number to the nearest multiple of it's order of magnitude, rounding away from zero if halfway. - func roundedToNextSignficant() -> Double { + func roundedToNextSignficant() -> Double + { guard !isInfinite, !isNaN, @@ -63,7 +68,8 @@ extension Double { return shifted / magnitude } - var decimalPlaces: Int { + var decimalPlaces: Int + { guard !isNaN, !isInfinite, @@ -81,18 +87,19 @@ extension Double { } } -open class ChartUtils +extension CGPoint { - private static var _defaultValueFormatter: IValueFormatter = ChartUtils.generateDefaultValueFormatter() - /// Calculates the position around a center point, depending on the distance from the center, and the angle of the position around the center. - internal class func getPosition(center: CGPoint, dist: CGFloat, angle: CGFloat) -> CGPoint + func moving(distance: CGFloat, atAngle angle: CGFloat) -> CGPoint { - return CGPoint( - x: center.x + dist * cos(angle.DEG2RAD), - y: center.y + dist * sin(angle.DEG2RAD) - ) + return CGPoint(x: x + distance * cos(angle.DEG2RAD), + y: y + distance * sin(angle.DEG2RAD)) } +} + +open class ChartUtils +{ + private static var _defaultValueFormatter: IValueFormatter = ChartUtils.generateDefaultValueFormatter() open class func drawImage( context: CGContext,