/**
* @module
*/
define([
'tinycolor'
], function(tinycolor) {
/**
* @class
* @param {Object} InRGB - RGB color object
* @param {number} InRGB.r - Red value
* @param {number} InRGB.g - Green value
* @param {number} InRGB.b - Blue value
*/
ColorCHSV = function (InRGB) {
var H_1, S_1; // CHSV parameters [0-1]
var C_1, M_1, Y_1; // CMY parameters [0-1]
var MaxCMY, MinCMY, DifCMY;
C_1 = 1 - InRGB.r / 255;
M_1 = 1 - InRGB.g / 255;
Y_1 = 1 - InRGB.b / 255;
MaxCMY = this.Max(C_1, M_1, Y_1);
MinCMY = this.Min(C_1, M_1, Y_1);
DifCMY = MaxCMY - MinCMY;
if (MaxCMY !== 0) {
S_1 = DifCMY / MaxCMY;
}
else {
S_1 = 0;
}
if (S_1 === 0) {
H_1 = 0;
}
else if (C_1 === MaxCMY) {
H_1 = (M_1 - Y_1) / DifCMY;
}
else if (M_1 === MaxCMY) {
H_1 = 2 + (Y_1 - C_1) / DifCMY;
}
else {
H_1 = 4 + (C_1 - M_1) / DifCMY;
}
if (H_1 < 0) {
this.CH = (H_1 * 60 + 360) / 360 * 240;
}
else {
this.CH = H_1 * 60 / 360 * 240;
}
this.CS = S_1 * 240;
this.CV = (1 - MaxCMY) * 240;
};
ColorCHSV.prototype.getRGBColor = function () {
var sColorRGB = tinycolor({r: 0, g: 0, b: 0});
var V_1, H_1, S_1; // CHSV parameters [0-1]
var C_1, M_1, Y_1; // CMY parameters [0-1]
var k; // Hue region
var f, p, q, t; // Auxiliar vars
var R, G, B; // RGB Values
H_1 = this.CH / 240.0;
V_1 = this.CV / 240.0;
S_1 = this.CS / 240.0;
if (S_1 === 0) {
C_1 = 1.0 - V_1;
M_1 = 1.0 - V_1;
Y_1 = 1.0 - V_1;
}
else {
k = parseInt(H_1 * 6);
f = H_1 * 6.0 - k;
p = (1.0 - V_1) * (1.0 - S_1);
q = (1.0 - V_1) * (1.0 - S_1 * f);
t = (1.0 - V_1) * (1.0 - S_1 * (1-f));
switch (k) {
case 0:
C_1 = 1.0 - V_1;
M_1 = t;
Y_1 = p;
break;
case 1:
C_1 = q;
M_1 = 1.0 - V_1;
Y_1 = p;
break;
case 2:
C_1 = p;
M_1 = 1.0 - V_1;
Y_1 = t;
break;
case 3:
C_1 = p;
M_1 = q;
Y_1 = 1.0 - V_1;
break;
case 4:
C_1 = t;
M_1 = p;
Y_1 = 1.0 - V_1;
break;
default:
C_1 = 1.0 - V_1;
M_1 = p;
Y_1 = q;
break;
}
}
R = (1.0 - C_1) * 255;
G = (1.0 - M_1) * 255;
B = (1.0 - Y_1) * 255;
sColorRGB = tinycolor({r: R, g: G, b: B});
return sColorRGB.toRgb();
};
ColorCHSV.prototype.Max = function (v1, v2, v3) {
if (v2 > v1) {
if (v3 > v2) {
return v3;
}
else {
return v2;
}
}
else if (v3 > v1) {
return v3;
}
else {
return v1;
}
};
ColorCHSV.prototype.Min = function (v1, v2, v3) {
if (v2 < v1) {
if (v3 < v2) {
return v3;
}
else {
return v2;
}
}
else if (v3 < v1) {
return v3;
}
else {
return v1;
}
};
return ColorCHSV;
});