diff --git a/chartLib/src/main/kotlin/info/appdev/charting/highlight/RadarHighlighter.kt b/chartLib/src/main/kotlin/info/appdev/charting/highlight/RadarHighlighter.kt index 52a39323f..4314f58cc 100644 --- a/chartLib/src/main/kotlin/info/appdev/charting/highlight/RadarHighlighter.kt +++ b/chartLib/src/main/kotlin/info/appdev/charting/highlight/RadarHighlighter.kt @@ -3,7 +3,7 @@ package info.appdev.charting.highlight import info.appdev.charting.charts.RadarChart import info.appdev.charting.data.Entry import info.appdev.charting.utils.PointF -import info.appdev.charting.utils.Utils +import info.appdev.charting.utils.changePosition import kotlin.math.abs open class RadarHighlighter(chart: RadarChart) : PieRadarHighlighter(chart) { @@ -50,8 +50,8 @@ open class RadarHighlighter(chart: RadarChart) : PieRadarHighlighter val y = (entry!!.y - chartPieRadar.yChartMin) - Utils.getPosition( - chartPieRadar.centerOffsets, y * factor * phaseY, + chartPieRadar.centerOffsets.changePosition( + y * factor * phaseY, sliceAngle * index * phaseX + chartPieRadar.rotationAngle, pOut ) diff --git a/chartLib/src/main/kotlin/info/appdev/charting/renderer/RadarChartRenderer.kt b/chartLib/src/main/kotlin/info/appdev/charting/renderer/RadarChartRenderer.kt index 452675fd3..c16ee4162 100644 --- a/chartLib/src/main/kotlin/info/appdev/charting/renderer/RadarChartRenderer.kt +++ b/chartLib/src/main/kotlin/info/appdev/charting/renderer/RadarChartRenderer.kt @@ -14,6 +14,7 @@ import info.appdev.charting.utils.PointF import info.appdev.charting.utils.Utils import info.appdev.charting.utils.ViewPortHandler import info.appdev.charting.utils.convertDpToPixel +import info.appdev.charting.utils.getPosition open class RadarChartRenderer( protected var chart: RadarChart, animator: ChartAnimator, @@ -61,7 +62,7 @@ open class RadarChartRenderer( val factor = chart.factor val center = chart.centerOffsets - val pOut = PointF.getInstance(0f, 0f) + var pOut = PointF.getInstance(0f, 0f) val surface = drawDataSetSurfacePathBuffer surface.reset() @@ -72,10 +73,9 @@ open class RadarChartRenderer( dataSet.getEntryForIndex(j)?.let { e -> - Utils.getPosition( - center, + pOut = center.getPosition( (e.y - chart.yChartMin) * factor * phaseY, - sliceAngle * j * phaseX + chart.rotationAngle, pOut + sliceAngle * j * phaseX + chart.rotationAngle ) } if (pOut.x.isNaN()) @@ -124,8 +124,8 @@ open class RadarChartRenderer( val factor = chart.factor val center = chart.centerOffsets - val pOut = PointF.getInstance(0f, 0f) - val pIcon = PointF.getInstance(0f, 0f) + var pOut = PointF.getInstance(0f, 0f) + var pIcon = PointF.getInstance(0f, 0f) val yOffset = 5f.convertDpToPixel() @@ -150,11 +150,9 @@ open class RadarChartRenderer( for (j in 0.. - Utils.getPosition( - center, + pOut = center.getPosition( (entry.y - chart.yChartMin) * factor * phaseY, - sliceAngle * j * phaseX + chart.rotationAngle, - pOut + sliceAngle * j * phaseX + chart.rotationAngle ) if (dataSet.isDrawValues) { @@ -173,11 +171,9 @@ open class RadarChartRenderer( if (entry.icon != null && dataSet.isDrawIcons) { val icon = entry.icon - Utils.getPosition( - center, + pIcon = center.getPosition( (entry.y) * factor * phaseY + iconsOffset.y, - sliceAngle * j * phaseX + chart.rotationAngle, - pIcon + sliceAngle * j * phaseX + chart.rotationAngle ) pIcon.y += iconsOffset.x @@ -225,14 +221,12 @@ open class RadarChartRenderer( val xIncrements = 1 + chart.skipWebLineCount val maxEntryCount = chart.getData()!!.maxEntryCountSet?.entryCount ?: 0 - val p = PointF.getInstance(0f, 0f) + var p = PointF.getInstance(0f, 0f) var i = 0 while (i < maxEntryCount) { - Utils.getPosition( - center, + p = center.getPosition( chart.yRange * factor, - sliceAngle * i + rotationAngle, - p + sliceAngle * i + rotationAngle ) canvas.drawLine(center.x, center.y, p.x, p.y, webPaint) @@ -247,8 +241,8 @@ open class RadarChartRenderer( val labelCount = chart.yAxis.entryCount - val p1out = PointF.getInstance(0f, 0f) - val p2out = PointF.getInstance(0f, 0f) + var p1out = PointF.getInstance(0f, 0f) + var p2out = PointF.getInstance(0f, 0f) for (j in 0.. for (i in 0.. for (j in 0.. { var x: Float = 0f @@ -85,4 +87,22 @@ class PointF : Poolable { } } } +} + +/** + * Returns a recyclable PointF instance. + * Calculates the position around a center point, depending on the distance + * from the center, and the angle of the position around the center. + * + * @param angle in degrees, converted to radians internally + */ +fun PointF.getPosition(dist: Float, angle: Float): PointF { + val pointF = PointF.getInstance(0f, 0f) + changePosition(dist, angle, pointF) + return pointF +} + +fun PointF.changePosition(dist: Float, angle: Float, outputPoint: PointF) { + outputPoint.x = (this.x + dist * cos(Math.toRadians(angle.toDouble()))).toFloat() + outputPoint.y = (this.y + dist * sin(Math.toRadians(angle.toDouble()))).toFloat() } \ No newline at end of file diff --git a/chartLib/src/main/kotlin/info/appdev/charting/utils/Utils.kt b/chartLib/src/main/kotlin/info/appdev/charting/utils/Utils.kt index 0bdb44399..fe7f04800 100644 --- a/chartLib/src/main/kotlin/info/appdev/charting/utils/Utils.kt +++ b/chartLib/src/main/kotlin/info/appdev/charting/utils/Utils.kt @@ -56,27 +56,6 @@ object Utils { return DefaultValueFormatter(1) } - /** - * Returns a recyclable PointF instance. - * Calculates the position around a center point, depending on the distance - * from the center, and the angle of the position around the center. - * - * @param center - * @param dist - * @param angle in degrees, converted to radians internally - * @return - */ - fun getPosition(center: PointF, dist: Float, angle: Float): PointF { - val p = PointF.getInstance(0f, 0f) - getPosition(center, dist, angle, p) - return p - } - - fun getPosition(center: PointF, dist: Float, angle: Float, outputPoint: PointF) { - outputPoint.x = (center.x + dist * cos(Math.toRadians(angle.toDouble()))).toFloat() - outputPoint.y = (center.y + dist * sin(Math.toRadians(angle.toDouble()))).toFloat() - } - fun velocityTrackerPointerUpCleanUpIfNecessary(ev: MotionEvent, tracker: VelocityTracker) { // Check the dot product of current velocities. // If the pointer that left was opposing another velocity vector, clear.