-
Notifications
You must be signed in to change notification settings - Fork 47
/
JitterDodgePos.kt
39 lines (33 loc) · 1.3 KB
/
JitterDodgePos.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*
* Copyright (c) 2023. JetBrains s.r.o.
* Use of this source code is governed by the MIT license that can be found in the LICENSE file.
*/
package org.jetbrains.letsPlot.core.plot.base.pos
import org.jetbrains.letsPlot.commons.geometry.DoubleVector
import org.jetbrains.letsPlot.core.plot.base.Aesthetics
import org.jetbrains.letsPlot.core.plot.base.DataPointAesthetics
import org.jetbrains.letsPlot.core.plot.base.GeomContext
import org.jetbrains.letsPlot.core.plot.base.PositionAdjustment
class JitterDodgePos(
aesthetics: Aesthetics,
groupCount: Int,
width: Double?,
jitterWidth: Double?,
jitterHeight: Double?,
jitterSeed: Long? = null
) :
PositionAdjustment {
private val myJitterPosHelper: PositionAdjustment
private val myDodgePosHelper: PositionAdjustment
init {
myJitterPosHelper = JitterPos(jitterWidth, jitterHeight, jitterSeed)
myDodgePosHelper = DodgePos(aesthetics, groupCount, width)
}
override fun translate(v: DoubleVector, p: DataPointAesthetics, ctx: GeomContext): DoubleVector {
val afterJitter = myJitterPosHelper.translate(v, p, ctx)
return myDodgePosHelper.translate(afterJitter, p, ctx)
}
override fun handlesGroups(): Boolean {
return PositionAdjustments.Meta.JITTER_DODGE.handlesGroups()
}
}