Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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<RadarChart>(chart) {
Expand Down Expand Up @@ -50,8 +50,8 @@ open class RadarHighlighter(chart: RadarChart) : PieRadarHighlighter<RadarChart>

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
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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()

Expand All @@ -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())
Expand Down Expand Up @@ -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()

Expand All @@ -150,11 +150,9 @@ open class RadarChartRenderer(
for (j in 0..<dataSet.entryCount) {
dataSet.getEntryForIndex(j)?.let { entry ->

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) {
Expand All @@ -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
Expand Down Expand Up @@ -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)
Expand All @@ -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..<labelCount) {
if (chart.isCustomLayerColorEnable) {
innerAreaPath.rewind()
Expand All @@ -257,8 +251,8 @@ open class RadarChartRenderer(
for (i in 0..<chart.getData()!!.entryCount) {
val r = (chart.yAxis.entries[j] - chart.yChartMin) * factor

Utils.getPosition(center, r, sliceAngle * i + rotationAngle, p1out)
Utils.getPosition(center, r, sliceAngle * (i + 1) + rotationAngle, p2out)
p1out = center.getPosition(r, sliceAngle * i + rotationAngle)
p2out = center.getPosition(r, sliceAngle * (i + 1) + rotationAngle)

canvas.drawLine(p1out.x, p1out.y, p2out.x, p2out.y, webPaint)
if (chart.isCustomLayerColorEnable) {
Expand Down Expand Up @@ -295,7 +289,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 radarData = chart.getData()

Expand All @@ -312,11 +306,9 @@ open class RadarChartRenderer(

val y = (radarEntry.y - chart.yChartMin)

Utils.getPosition(
center,
pOut = center.getPosition(
y * factor * animator.phaseY,
sliceAngle * high.x * animator.phaseX + chart.rotationAngle,
pOut
sliceAngle * high.x * animator.phaseX + chart.rotationAngle
)
}
high.setDraw(pOut.x, pOut.y)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import android.graphics.Canvas
import info.appdev.charting.charts.RadarChart
import info.appdev.charting.components.XAxis
import info.appdev.charting.utils.PointF
import info.appdev.charting.utils.Utils
import info.appdev.charting.utils.ViewPortHandler
import info.appdev.charting.utils.getPosition

class XAxisRendererRadarChart(viewPortHandler: ViewPortHandler, xAxis: XAxis, private val chart: RadarChart) : XAxisRenderer(viewPortHandler, xAxis, null) {
override fun renderAxisLabels(canvas: Canvas) {
Expand All @@ -26,16 +26,14 @@ class XAxisRendererRadarChart(viewPortHandler: ViewPortHandler, xAxis: XAxis, pr
val factor = chart.factor

val center = chart.centerOffsets
val pOut = PointF.getInstance(0f, 0f)
var pOut = PointF.getInstance(0f, 0f)
chart.getData()!!.maxEntryCountSet?.let { maxEntryCountSet ->
for (i in 0..<maxEntryCountSet.entryCount) {
val label = xAxis.valueFormatter?.getFormattedValue(i.toFloat(), xAxis)

val angle = (sliceAngle * i + chart.rotationAngle) % 360f

Utils.getPosition(
center, chart.yRange * factor + xAxis.mLabelWidth / 2f, angle, pOut
)
pOut = center.getPosition(chart.yRange * factor + xAxis.mLabelWidth / 2f, angle)

drawLabel(
canvas, label, pOut.x, pOut.y - xAxis.mLabelHeight / 2f,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import android.graphics.Path
import info.appdev.charting.charts.RadarChart
import info.appdev.charting.components.YAxis
import info.appdev.charting.utils.PointF
import info.appdev.charting.utils.Utils
import info.appdev.charting.utils.ViewPortHandler
import info.appdev.charting.utils.getPosition
import info.appdev.charting.utils.roundToNextSignificant
import kotlin.math.abs
import kotlin.math.ceil
Expand Down Expand Up @@ -145,7 +145,7 @@ class YAxisRendererRadarChart(viewPortHandler: ViewPortHandler, yAxis: YAxis, pr
paintAxisLabels.color = yAxis.textColor

val center = chart.centerOffsets
val pOut = PointF.getInstance(0f, 0f)
var pOut = PointF.getInstance(0f, 0f)
val factor = chart.factor

val from = if (yAxis.isDrawBottomYLabelEntryEnabled) 0 else 1
Expand All @@ -159,7 +159,7 @@ class YAxisRendererRadarChart(viewPortHandler: ViewPortHandler, yAxis: YAxis, pr
for (j in from..<to) {
val r = (yAxis.entries[j] - yAxis.mAxisMinimum) * factor

Utils.getPosition(center, r, chart.rotationAngle, pOut)
pOut = center.getPosition(r, chart.rotationAngle)

val label = yAxis.getFormattedLabel(j)

Expand All @@ -179,7 +179,7 @@ class YAxisRendererRadarChart(viewPortHandler: ViewPortHandler, yAxis: YAxis, pr
val factor = chart.factor

val center = chart.centerOffsets
val pOut = PointF.getInstance(0f, 0f)
var pOut = PointF.getInstance(0f, 0f)
for (i in limitLines.indices) {
val limitLine = limitLines[i]

Expand All @@ -196,7 +196,7 @@ class YAxisRendererRadarChart(viewPortHandler: ViewPortHandler, yAxis: YAxis, pr

chart.getData()!!.maxEntryCountSet?.let { maxEntryCountSet ->
for (j in 0..<maxEntryCountSet.entryCount) {
Utils.getPosition(center, r, sliceAngle * j + chart.rotationAngle, pOut)
pOut = center.getPosition(r, sliceAngle * j + chart.rotationAngle)

if (j == 0)
limitPath.moveTo(pOut.x, pOut.y)
Expand Down
20 changes: 20 additions & 0 deletions chartLib/src/main/kotlin/info/appdev/charting/utils/PointF.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package info.appdev.charting.utils
import android.os.Parcel
import android.os.Parcelable
import info.appdev.charting.utils.ObjectPool.Poolable
import kotlin.math.cos
import kotlin.math.sin

class PointF : Poolable<PointF> {
var x: Float = 0f
Expand Down Expand Up @@ -85,4 +87,22 @@ class PointF : Poolable<PointF> {
}
}
}
}

/**
* 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()
}
21 changes: 0 additions & 21 deletions chartLib/src/main/kotlin/info/appdev/charting/utils/Utils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
Loading