aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scalam/charting/colorSchemes.scala
blob: 62c1d39c41713d5971f2fa2c243421f0807208b9 (plain) (blame)
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
40
41
42
43
44
45
46
47
48
49
50
package scalam.charting

import scalam.DataSet

trait ColorScheme {
  def color(dataSet: DataSet): String
}

trait ColorSchemeFactory[C <: ColorScheme] {
  def create(dataSets: Seq[DataSet]): C
}

trait MatlabColorScheme extends ColorScheme {
  private final val ColorVariableName = "cc"
  
  protected val dataSets: Seq[DataSet]
  protected val function: String
  private val indices: Map[DataSet, Int] = dataSets.zipWithIndex.toMap
  
  def initial = {
    ColorVariableName + " = " + function + "(" + dataSets.length + ");"
  }
  
  def color(dataSet: DataSet) = ColorVariableName + "(" + (indices(dataSet) + 1) + ",:)"
}

case class Uniform(rgb: (Double, Double, Double) = (0, 0, 0)) extends ColorScheme {
  private val (r, g, b) = rgb
  def color(dataSet: DataSet) = "[" + r + "," + g + "," + b + "]"
}

class HSV(protected val dataSets: Seq[DataSet]) extends MatlabColorScheme {val function = "hsv"}
object HSV extends ColorSchemeFactory[HSV] {def create(dataSets: Seq[DataSet]) = new HSV(dataSets)}
class JET(protected val dataSets: Seq[DataSet]) extends MatlabColorScheme {val function = "hsv"}
object JET extends ColorSchemeFactory[JET] {def create(dataSets: Seq[DataSet]) = new JET(dataSets)}

trait Special extends ColorScheme {
  val specialDataSet: DataSet
  val rgb: (Double, Double, Double)
  
  private val (r, g, b) = rgb
  
  abstract override def color(dataSet: DataSet): String =
    if (dataSet == specialDataSet) "[" + r + "," + g + "," + b + "]" 
    else super.color(dataSet)
}

//abstract class Special(val specialDataSet: DataSet, val rgb: (Double, Double, Double)) extends SpecialImpl