Skip to content

Commit cf4bca1

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

File tree

10 files changed

+72
-82
lines changed

10 files changed

+72
-82
lines changed

chartLib/src/main/kotlin/info/appdev/charting/charts/PieChart.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ import info.appdev.charting.renderer.PieChartRenderer
1414
import info.appdev.charting.utils.PointF
1515
import info.appdev.charting.utils.PointF.Companion.getInstance
1616
import info.appdev.charting.utils.PointF.Companion.recycleInstance
17-
import info.appdev.charting.utils.Utils
1817
import info.appdev.charting.utils.convertDpToPixel
18+
import info.appdev.charting.utils.getNormalizedAngle
1919
import java.util.Locale
2020
import java.util.Objects
2121
import kotlin.math.abs
@@ -346,7 +346,7 @@ class PieChart : PieRadarChartBase<PieData> {
346346
override fun getIndexForAngle(angle: Float): Int {
347347
// take the current angle of the chart into consideration
348348

349-
val a = Utils.getNormalizedAngle(angle - rotationAngle)
349+
val a = (angle - rotationAngle).getNormalizedAngle()
350350

351351
for (i in absoluteAngles.indices) {
352352
if (this.absoluteAngles[i] > a)

chartLib/src/main/kotlin/info/appdev/charting/charts/PieRadarChartBase.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ import info.appdev.charting.listener.PieRadarChartTouchListener
1616
import info.appdev.charting.utils.PointF
1717
import info.appdev.charting.utils.PointF.Companion.getInstance
1818
import info.appdev.charting.utils.PointF.Companion.recycleInstance
19-
import info.appdev.charting.utils.Utils
2019
import info.appdev.charting.utils.convertDpToPixel
20+
import info.appdev.charting.utils.getNormalizedAngle
2121
import timber.log.Timber
2222
import kotlin.math.acos
2323
import kotlin.math.cos
@@ -378,7 +378,7 @@ abstract class PieRadarChartBase<T : ChartData<out IDataSet<out Entry>>>
378378
*/
379379
set(angle) {
380380
this.rawRotationAngle = angle
381-
mRotationAngle = Utils.getNormalizedAngle(this.rawRotationAngle)
381+
mRotationAngle = this.rawRotationAngle.getNormalizedAngle()
382382
}
383383

384384
val diameter: Float

chartLib/src/main/kotlin/info/appdev/charting/charts/RadarChart.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import info.appdev.charting.highlight.RadarHighlighter
1111
import info.appdev.charting.renderer.RadarChartRenderer
1212
import info.appdev.charting.renderer.XAxisRendererRadarChart
1313
import info.appdev.charting.renderer.YAxisRendererRadarChart
14-
import info.appdev.charting.utils.Utils
1514
import info.appdev.charting.utils.convertDpToPixel
15+
import info.appdev.charting.utils.getNormalizedAngle
1616
import kotlin.math.max
1717
import kotlin.math.min
1818

@@ -203,16 +203,16 @@ class RadarChart : PieRadarChartBase<RadarData> {
203203
override fun getIndexForAngle(angle: Float): Int {
204204
// take the current angle of the chart into consideration
205205

206-
val a = Utils.getNormalizedAngle(angle - rotationAngle)
206+
val a = (angle - rotationAngle).getNormalizedAngle()
207207

208-
val sliceangle = this.sliceAngle
208+
val sliceAngle = this.sliceAngle
209209

210210
val max = mData?.maxEntryCountSet!!.entryCount
211211

212212
var index = 0
213213

214214
for (i in 0..<max) {
215-
val referenceAngle = sliceangle * (i + 1) - sliceangle / 2f
215+
val referenceAngle = sliceAngle * (i + 1) - sliceAngle / 2f
216216

217217
if (referenceAngle > a) {
218218
index = i

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)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package info.appdev.charting.utils
2+
3+
/**
4+
* returns an angle between 0.f < 360.f (not less than zero, less than 360)
5+
*/
6+
fun Float.getNormalizedAngle(): Float {
7+
var angle = this
8+
while (angle < 0f) {
9+
angle += 360f
10+
}
11+
12+
return angle % 360f
13+
}

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 & 33 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.
@@ -107,18 +86,6 @@ object Utils {
10786
}
10887
}
10988

110-
/**
111-
* returns an angle between 0.f < 360.f (not less than zero, less than 360)
112-
*/
113-
fun getNormalizedAngle(angle: Float): Float {
114-
var angle = angle
115-
while (angle < 0f) {
116-
angle += 360f
117-
}
118-
119-
return angle % 360f
120-
}
121-
12289
private val mDrawableBoundsCache = Rect()
12390

12491
fun drawImage(canvas: Canvas, drawable: Drawable, x: Int, y: Int) {

0 commit comments

Comments
 (0)