Skip to content

Commit e2e2332

Browse files
authored
Merge pull request #597 from AppDevNext/MovePointF
Move PointF extension functions
2 parents 75d3ea4 + f1cc9e7 commit e2e2332

File tree

6 files changed

+51
-62
lines changed

6 files changed

+51
-62
lines changed

chartLib/src/main/kotlin/info/appdev/charting/highlight/RadarHighlighter.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package info.appdev.charting.highlight
33
import info.appdev.charting.charts.RadarChart
44
import info.appdev.charting.data.Entry
55
import info.appdev.charting.utils.PointF
6-
import info.appdev.charting.utils.Utils
6+
import info.appdev.charting.utils.changePosition
77
import kotlin.math.abs
88

99
open class RadarHighlighter(chart: RadarChart) : PieRadarHighlighter<RadarChart>(chart) {
@@ -50,8 +50,8 @@ open class RadarHighlighter(chart: RadarChart) : PieRadarHighlighter<RadarChart>
5050

5151
val y = (entry!!.y - chartPieRadar.yChartMin)
5252

53-
Utils.getPosition(
54-
chartPieRadar.centerOffsets, y * factor * phaseY,
53+
chartPieRadar.centerOffsets.changePosition(
54+
y * factor * phaseY,
5555
sliceAngle * index * phaseX + chartPieRadar.rotationAngle, pOut
5656
)
5757

chartLib/src/main/kotlin/info/appdev/charting/renderer/RadarChartRenderer.kt

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import info.appdev.charting.utils.PointF
1414
import info.appdev.charting.utils.Utils
1515
import info.appdev.charting.utils.ViewPortHandler
1616
import info.appdev.charting.utils.convertDpToPixel
17+
import info.appdev.charting.utils.getPosition
1718

1819
open class RadarChartRenderer(
1920
protected var chart: RadarChart, animator: ChartAnimator,
@@ -61,7 +62,7 @@ open class RadarChartRenderer(
6162
val factor = chart.factor
6263

6364
val center = chart.centerOffsets
64-
val pOut = PointF.getInstance(0f, 0f)
65+
var pOut = PointF.getInstance(0f, 0f)
6566
val surface = drawDataSetSurfacePathBuffer
6667
surface.reset()
6768

@@ -72,10 +73,9 @@ open class RadarChartRenderer(
7273

7374
dataSet.getEntryForIndex(j)?.let { e ->
7475

75-
Utils.getPosition(
76-
center,
76+
pOut = center.getPosition(
7777
(e.y - chart.yChartMin) * factor * phaseY,
78-
sliceAngle * j * phaseX + chart.rotationAngle, pOut
78+
sliceAngle * j * phaseX + chart.rotationAngle
7979
)
8080
}
8181
if (pOut.x.isNaN())
@@ -124,8 +124,8 @@ open class RadarChartRenderer(
124124
val factor = chart.factor
125125

126126
val center = chart.centerOffsets
127-
val pOut = PointF.getInstance(0f, 0f)
128-
val pIcon = PointF.getInstance(0f, 0f)
127+
var pOut = PointF.getInstance(0f, 0f)
128+
var pIcon = PointF.getInstance(0f, 0f)
129129

130130
val yOffset = 5f.convertDpToPixel()
131131

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

153-
Utils.getPosition(
154-
center,
153+
pOut = center.getPosition(
155154
(entry.y - chart.yChartMin) * factor * phaseY,
156-
sliceAngle * j * phaseX + chart.rotationAngle,
157-
pOut
155+
sliceAngle * j * phaseX + chart.rotationAngle
158156
)
159157

160158
if (dataSet.isDrawValues) {
@@ -173,11 +171,9 @@ open class RadarChartRenderer(
173171
if (entry.icon != null && dataSet.isDrawIcons) {
174172
val icon = entry.icon
175173

176-
Utils.getPosition(
177-
center,
174+
pIcon = center.getPosition(
178175
(entry.y) * factor * phaseY + iconsOffset.y,
179-
sliceAngle * j * phaseX + chart.rotationAngle,
180-
pIcon
176+
sliceAngle * j * phaseX + chart.rotationAngle
181177
)
182178

183179
pIcon.y += iconsOffset.x
@@ -225,14 +221,12 @@ open class RadarChartRenderer(
225221
val xIncrements = 1 + chart.skipWebLineCount
226222
val maxEntryCount = chart.getData()!!.maxEntryCountSet?.entryCount ?: 0
227223

228-
val p = PointF.getInstance(0f, 0f)
224+
var p = PointF.getInstance(0f, 0f)
229225
var i = 0
230226
while (i < maxEntryCount) {
231-
Utils.getPosition(
232-
center,
227+
p = center.getPosition(
233228
chart.yRange * factor,
234-
sliceAngle * i + rotationAngle,
235-
p
229+
sliceAngle * i + rotationAngle
236230
)
237231

238232
canvas.drawLine(center.x, center.y, p.x, p.y, webPaint)
@@ -247,8 +241,8 @@ open class RadarChartRenderer(
247241

248242
val labelCount = chart.yAxis.entryCount
249243

250-
val p1out = PointF.getInstance(0f, 0f)
251-
val p2out = PointF.getInstance(0f, 0f)
244+
var p1out = PointF.getInstance(0f, 0f)
245+
var p2out = PointF.getInstance(0f, 0f)
252246
for (j in 0..<labelCount) {
253247
if (chart.isCustomLayerColorEnable) {
254248
innerAreaPath.rewind()
@@ -257,8 +251,8 @@ open class RadarChartRenderer(
257251
for (i in 0..<chart.getData()!!.entryCount) {
258252
val r = (chart.yAxis.entries[j] - chart.yChartMin) * factor
259253

260-
Utils.getPosition(center, r, sliceAngle * i + rotationAngle, p1out)
261-
Utils.getPosition(center, r, sliceAngle * (i + 1) + rotationAngle, p2out)
254+
p1out = center.getPosition(r, sliceAngle * i + rotationAngle)
255+
p2out = center.getPosition(r, sliceAngle * (i + 1) + rotationAngle)
262256

263257
canvas.drawLine(p1out.x, p1out.y, p2out.x, p2out.y, webPaint)
264258
if (chart.isCustomLayerColorEnable) {
@@ -295,7 +289,7 @@ open class RadarChartRenderer(
295289
val factor = chart.factor
296290

297291
val center = chart.centerOffsets
298-
val pOut = PointF.getInstance(0f, 0f)
292+
var pOut = PointF.getInstance(0f, 0f)
299293

300294
val radarData = chart.getData()
301295

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

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

315-
Utils.getPosition(
316-
center,
309+
pOut = center.getPosition(
317310
y * factor * animator.phaseY,
318-
sliceAngle * high.x * animator.phaseX + chart.rotationAngle,
319-
pOut
311+
sliceAngle * high.x * animator.phaseX + chart.rotationAngle
320312
)
321313
}
322314
high.setDraw(pOut.x, pOut.y)

chartLib/src/main/kotlin/info/appdev/charting/renderer/XAxisRendererRadarChart.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import android.graphics.Canvas
44
import info.appdev.charting.charts.RadarChart
55
import info.appdev.charting.components.XAxis
66
import info.appdev.charting.utils.PointF
7-
import info.appdev.charting.utils.Utils
87
import info.appdev.charting.utils.ViewPortHandler
8+
import info.appdev.charting.utils.getPosition
99

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

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

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

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

4038
drawLabel(
4139
canvas, label, pOut.x, pOut.y - xAxis.mLabelHeight / 2f,

chartLib/src/main/kotlin/info/appdev/charting/renderer/YAxisRendererRadarChart.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import android.graphics.Path
55
import info.appdev.charting.charts.RadarChart
66
import info.appdev.charting.components.YAxis
77
import info.appdev.charting.utils.PointF
8-
import info.appdev.charting.utils.Utils
98
import info.appdev.charting.utils.ViewPortHandler
9+
import info.appdev.charting.utils.getPosition
1010
import info.appdev.charting.utils.roundToNextSignificant
1111
import kotlin.math.abs
1212
import kotlin.math.ceil
@@ -145,7 +145,7 @@ class YAxisRendererRadarChart(viewPortHandler: ViewPortHandler, yAxis: YAxis, pr
145145
paintAxisLabels.color = yAxis.textColor
146146

147147
val center = chart.centerOffsets
148-
val pOut = PointF.getInstance(0f, 0f)
148+
var pOut = PointF.getInstance(0f, 0f)
149149
val factor = chart.factor
150150

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

162-
Utils.getPosition(center, r, chart.rotationAngle, pOut)
162+
pOut = center.getPosition(r, chart.rotationAngle)
163163

164164
val label = yAxis.getFormattedLabel(j)
165165

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

181181
val center = chart.centerOffsets
182-
val pOut = PointF.getInstance(0f, 0f)
182+
var pOut = PointF.getInstance(0f, 0f)
183183
for (i in limitLines.indices) {
184184
val limitLine = limitLines[i]
185185

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

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

201201
if (j == 0)
202202
limitPath.moveTo(pOut.x, pOut.y)

chartLib/src/main/kotlin/info/appdev/charting/utils/PointF.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package info.appdev.charting.utils
33
import android.os.Parcel
44
import android.os.Parcelable
55
import info.appdev.charting.utils.ObjectPool.Poolable
6+
import kotlin.math.cos
7+
import kotlin.math.sin
68

79
class PointF : Poolable<PointF> {
810
var x: Float = 0f
@@ -85,4 +87,22 @@ class PointF : Poolable<PointF> {
8587
}
8688
}
8789
}
90+
}
91+
92+
/**
93+
* Returns a recyclable PointF instance.
94+
* Calculates the position around a center point, depending on the distance
95+
* from the center, and the angle of the position around the center.
96+
*
97+
* @param angle in degrees, converted to radians internally
98+
*/
99+
fun PointF.getPosition(dist: Float, angle: Float): PointF {
100+
val pointF = PointF.getInstance(0f, 0f)
101+
changePosition(dist, angle, pointF)
102+
return pointF
103+
}
104+
105+
fun PointF.changePosition(dist: Float, angle: Float, outputPoint: PointF) {
106+
outputPoint.x = (this.x + dist * cos(Math.toRadians(angle.toDouble()))).toFloat()
107+
outputPoint.y = (this.y + dist * sin(Math.toRadians(angle.toDouble()))).toFloat()
88108
}

chartLib/src/main/kotlin/info/appdev/charting/utils/Utils.kt

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -56,27 +56,6 @@ object Utils {
5656
return DefaultValueFormatter(1)
5757
}
5858

59-
/**
60-
* Returns a recyclable PointF instance.
61-
* Calculates the position around a center point, depending on the distance
62-
* from the center, and the angle of the position around the center.
63-
*
64-
* @param center
65-
* @param dist
66-
* @param angle in degrees, converted to radians internally
67-
* @return
68-
*/
69-
fun getPosition(center: PointF, dist: Float, angle: Float): PointF {
70-
val p = PointF.getInstance(0f, 0f)
71-
getPosition(center, dist, angle, p)
72-
return p
73-
}
74-
75-
fun getPosition(center: PointF, dist: Float, angle: Float, outputPoint: PointF) {
76-
outputPoint.x = (center.x + dist * cos(Math.toRadians(angle.toDouble()))).toFloat()
77-
outputPoint.y = (center.y + dist * sin(Math.toRadians(angle.toDouble()))).toFloat()
78-
}
79-
8059
fun velocityTrackerPointerUpCleanUpIfNecessary(ev: MotionEvent, tracker: VelocityTracker) {
8160
// Check the dot product of current velocities.
8261
// If the pointer that left was opposing another velocity vector, clear.

0 commit comments

Comments
 (0)