0030969: Coding Rules - refactor Quantity_Color.cxx color table definition
authorkgv <kgv@opencascade.com>
Mon, 16 Sep 2019 20:06:38 +0000 (23:06 +0300)
committerapn <apn@opencascade.com>
Tue, 22 Oct 2019 12:15:51 +0000 (15:15 +0300)
The table of named colors has been compressed and moved out
from Quantity_Color.cxx into Quantity_ColorTable.pxx.

Quantity_NameOfColor - grayscale enumeration values have been re-ordered to fix discontinuity.
Duplicating colors has been merged within enumeration:
  CHARTREUSE=CHARTREUSE1, GOLD=GOLD1, GREEN=GREEN1, ORANGE=ORANGE1,
  ORANGERED=ORANGERED1, RED=RED1, TOMATO=TOMATO1, YELLOW=YELLOW1.
Added aliases to several other common colors:
  BLUE=BLUE1, CYAN=CYAN1, LIGHTCYAN=LIGHTCYAN1, MAGENTA=MAGENTA1.

Quantity_Color class definition has been cleaned to follow OCCT coding style.
Quantity_Color now stores NCollection_Vec3<float> as class field instead of separate components.
Removed unused class Quantity_ColorDefinitionError.

New methods Quantity_Color::Convert_LinearRGB_To_sRGB() and Quantity_Color::Convert_sRGB_To_LinearRGB()
converting RGB components from linear to non-linear sRGB colorspace and vice versa.
Image_PixMap::PixelColor() and Image_PixMap::SetPixelColor() methods have been extended
with an optional argument for performing linearization/delinearization of 8-bit sRGB pixel formats.

Draw Harness command AISColor has been corrected to take color name instead of enumeration index.

444 files changed:
samples/tcl/ANC101.tcl
samples/tcl/MBBGehauseRohteil.tcl
samples/tcl/Penrose.tcl
samples/tcl/cpu.tcl
samples/tcl/dimensions.tcl
samples/tcl/logo2019.tcl
samples/tcl/markers.tcl
samples/tcl/materials.tcl
samples/tcl/pencil.tcl
samples/tcl/xde.tcl
src/DPrsStd/DPrsStd_AISPresentationCommands.cxx
src/Image/Image_PixMap.cxx
src/Image/Image_PixMap.hxx
src/QABugs/QABugs_11.cxx
src/Quantity/FILES
src/Quantity/Quantity_Color.cxx
src/Quantity/Quantity_Color.hxx
src/Quantity/Quantity_ColorDefinitionError.hxx [deleted file]
src/Quantity/Quantity_ColorRGBA.hxx
src/Quantity/Quantity_ColorTable.pxx [new file with mode: 0644]
src/Quantity/Quantity_NameOfColor.hxx
src/Quantity/Quantity_TypeOfColor.hxx
tests/3rdparty/fonts/A2
tests/3rdparty/fonts/A3
tests/3rdparty/fonts/A4
tests/3rdparty/fonts/A5
tests/3rdparty/fonts/A6
tests/3rdparty/fonts/A7
tests/3rdparty/fonts/A8
tests/3rdparty/fonts/B1
tests/3rdparty/fonts/B2
tests/3rdparty/fonts/B4
tests/3rdparty/fonts/B5
tests/3rdparty/fonts/B7
tests/bugs/caf/bug1029
tests/bugs/caf/bug1030 [deleted file]
tests/bugs/caf/bug26290_newattribute_1
tests/bugs/caf/bug26290_newattribute_2
tests/bugs/iges/bug25518
tests/bugs/modalg_5/bug24244
tests/bugs/step/bug30856
tests/bugs/vis/bug21747_1
tests/bugs/vis/bug21747_10
tests/bugs/vis/bug21747_11
tests/bugs/vis/bug21747_12
tests/bugs/vis/bug21747_13
tests/bugs/vis/bug21747_14
tests/bugs/vis/bug21747_15
tests/bugs/vis/bug21747_16
tests/bugs/vis/bug21747_17
tests/bugs/vis/bug21747_2
tests/bugs/vis/bug21747_3
tests/bugs/vis/bug21747_4
tests/bugs/vis/bug21747_5
tests/bugs/vis/bug21747_6
tests/bugs/vis/bug21747_7
tests/bugs/vis/bug21747_8
tests/bugs/vis/bug21747_9
tests/bugs/vis/bug22149
tests/bugs/vis/bug22796_1
tests/bugs/vis/bug22796_2
tests/bugs/vis/bug22879
tests/bugs/vis/bug22906
tests/bugs/vis/bug23363
tests/bugs/vis/bug23652
tests/bugs/vis/bug24391
tests/bugs/vis/bug24555
tests/bugs/vis/bug24564
tests/bugs/vis/bug24714
tests/bugs/vis/bug24717
tests/bugs/vis/bug24837_2
tests/bugs/vis/bug24867
tests/bugs/vis/bug24901
tests/bugs/vis/bug25121
tests/bugs/vis/bug25136
tests/bugs/vis/bug25369
tests/bugs/vis/bug25475
tests/bugs/vis/bug25732_1
tests/bugs/vis/bug25732_2
tests/bugs/vis/bug25775
tests/bugs/vis/bug26404
tests/bugs/vis/bug26599
tests/bugs/vis/bug26680
tests/bugs/vis/bug26719_1
tests/bugs/vis/bug26870
tests/bugs/vis/bug26959
tests/bugs/vis/bug27530
tests/bugs/vis/bug27573
tests/bugs/vis/bug27624
tests/bugs/vis/bug27739
tests/bugs/vis/bug27751_capping
tests/bugs/vis/bug27796
tests/bugs/vis/bug27836
tests/bugs/vis/bug27958
tests/bugs/vis/bug28004
tests/bugs/vis/bug28036_1
tests/bugs/vis/bug28036_2
tests/bugs/vis/bug28061
tests/bugs/vis/bug28099_text_core
tests/bugs/vis/bug28127
tests/bugs/vis/bug28361
tests/bugs/vis/bug30076
tests/bugs/vis/bug30630_1
tests/bugs/vis/bug30630_2
tests/bugs/vis/bug30630_3
tests/bugs/vis/bug5990
tests/bugs/vis/bug6897_1
tests/bugs/vis/bug74
tests/bugs/vis/bug85_1
tests/bugs/vis/bug85_2
tests/bugs/xde/bug26216
tests/bugs/xde/bug28641
tests/bugs/xde/bug29436_1
tests/caf/bugs/D2
tests/caf/parse.rules
tests/caf/presentation/B2
tests/caf/presentation/B3
tests/caf/presentation/B4
tests/caf/presentation/C1
tests/caf/presentation/F2
tests/caf/presentation/F3
tests/caf/presentation/F4
tests/caf/presentation/G1
tests/caf/presentation/H1
tests/caf/presentation/H2
tests/caf/presentation/I1
tests/caf/presentation/I2
tests/caf/presentation/J1
tests/caf/presentation/J2
tests/caf/presentation/K1
tests/caf/presentation/K2
tests/de/iges_1/C7
tests/de/iges_1/E1
tests/de/iges_1/G2
tests/de/iges_1/H1
tests/de/iges_1/H5
tests/de/iges_1/H6
tests/de/iges_1/H7
tests/de/iges_1/H8
tests/de/iges_1/H9
tests/de/iges_1/I1
tests/de/iges_1/I2
tests/de/iges_1/I4
tests/de/iges_1/I6
tests/de/iges_1/I8
tests/de/iges_1/J5
tests/de/iges_1/J6
tests/de/iges_1/J7
tests/de/iges_1/J8
tests/de/iges_1/K1
tests/de/iges_1/K3
tests/de/iges_1/K4
tests/de/iges_1/K8
tests/de/iges_1/K9
tests/de/iges_1/L2
tests/de/iges_1/L8
tests/de/iges_1/L9
tests/de/iges_1/M1
tests/de/iges_1/M6
tests/de/iges_1/N1
tests/de/iges_1/N2
tests/de/iges_1/O1
tests/de/iges_1/O4
tests/de/iges_1/O6
tests/de/iges_1/O7
tests/de/iges_1/O8
tests/de/iges_1/O9
tests/de/iges_1/P1
tests/de/iges_1/P2
tests/de/iges_1/P5
tests/de/iges_1/P6
tests/de/iges_1/Q7
tests/de/iges_1/R3
tests/de/iges_1/R4
tests/de/iges_1/R5
tests/de/iges_1/R6
tests/de/iges_1/R7
tests/de/iges_1/R8
tests/de/iges_2/A3
tests/de/iges_2/A5
tests/de/iges_2/A6
tests/de/iges_2/A7
tests/de/iges_2/A8
tests/de/iges_2/A9
tests/de/iges_2/B1
tests/de/iges_2/B2
tests/de/iges_2/B8
tests/de/iges_2/B9
tests/de/iges_2/C1
tests/de/iges_2/C3
tests/de/iges_2/C4
tests/de/iges_2/C5
tests/de/iges_2/C6
tests/de/iges_2/C7
tests/de/iges_2/D1
tests/de/iges_2/D3
tests/de/iges_2/D4
tests/de/iges_2/D7
tests/de/iges_2/D8
tests/de/iges_2/D9
tests/de/iges_2/E3
tests/de/iges_2/E4
tests/de/iges_2/E6
tests/de/iges_2/E7
tests/de/iges_2/E8
tests/de/iges_2/F1
tests/de/iges_2/F2
tests/de/iges_2/F3
tests/de/iges_2/F4
tests/de/iges_2/F5
tests/de/iges_2/F6
tests/de/iges_2/F8
tests/de/iges_2/G2
tests/de/iges_2/G3
tests/de/iges_2/G4
tests/de/iges_2/G5
tests/de/iges_2/G7
tests/de/iges_2/G8
tests/de/iges_2/G9
tests/de/iges_2/H2
tests/de/iges_2/H3
tests/de/iges_2/H4
tests/de/iges_2/H5
tests/de/iges_2/H7
tests/de/iges_2/H8
tests/de/iges_2/H9
tests/de/iges_2/I1
tests/de/iges_2/I2
tests/de/iges_2/I4
tests/de/iges_2/I5
tests/de/iges_2/I6
tests/de/iges_2/I7
tests/de/iges_2/I8
tests/de/iges_2/I9
tests/de/iges_2/J1
tests/de/iges_3/A1
tests/de/iges_3/A2
tests/de/iges_3/A4
tests/de/iges_3/A7
tests/de/iges_3/A8
tests/de/step_1/A5
tests/de/step_1/A6
tests/de/step_1/A7
tests/de/step_1/A8
tests/de/step_1/B4
tests/de/step_1/B6
tests/de/step_1/B7
tests/de/step_1/B8
tests/de/step_1/C1
tests/de/step_1/F5
tests/de/step_1/F7
tests/de/step_1/G5
tests/de/step_1/G6
tests/de/step_1/G7
tests/de/step_1/M3
tests/de/step_1/M4
tests/de/step_1/M5
tests/de/step_1/M6
tests/de/step_1/N4
tests/de/step_1/N5
tests/de/step_1/N6
tests/de/step_1/N7
tests/de/step_1/N8
tests/de/step_1/N9
tests/de/step_1/Q4
tests/de/step_1/Q5
tests/de/step_1/R8
tests/de/step_1/S2
tests/de/step_1/S9
tests/de/step_1/T7
tests/de/step_1/T8
tests/de/step_1/T9
tests/de/step_1/U1
tests/de/step_1/U4
tests/de/step_1/U6
tests/de/step_1/U8
tests/de/step_1/U9
tests/de/step_1/V1
tests/de/step_1/V2
tests/de/step_1/V3
tests/de/step_1/V4
tests/de/step_1/V5
tests/de/step_1/V8
tests/de/step_1/W4
tests/de/step_1/W6
tests/de/step_1/X3
tests/de/step_1/X8
tests/de/step_1/X9
tests/de/step_1/Y2
tests/de/step_1/Z2
tests/de/step_1/Z3
tests/de/step_1/ZB7
tests/de/step_1/ZD8
tests/de/step_1/ZD9
tests/de/step_1/ZE3
tests/de/step_1/ZE5
tests/de/step_1/ZE6
tests/de/step_1/ZE8
tests/de/step_1/ZE9
tests/de/step_1/ZF3
tests/de/step_1/ZF4
tests/de/step_1/ZF5
tests/de/step_1/ZF8
tests/de/step_1/ZF9
tests/de/step_1/ZG3
tests/de/step_1/ZG7
tests/de/step_1/ZG8
tests/de/step_1/ZH2
tests/de/step_1/ZH5
tests/de/step_1/ZH6
tests/de/step_1/ZH8
tests/de/step_1/ZH9
tests/de/step_1/ZI1
tests/de/step_1/ZI4
tests/de/step_1/ZI5
tests/de/step_1/ZM6
tests/de/step_1/ZM7
tests/de/step_1/ZM8
tests/de/step_1/ZM9
tests/de/step_1/ZN2
tests/de/step_1/ZO1
tests/de/step_1/ZO6
tests/de/step_1/ZP5
tests/de/step_1/ZQ2
tests/de/step_1/ZQ4
tests/de/step_1/ZQ5
tests/de/step_1/ZQ6
tests/de/step_1/ZQ9
tests/de/step_1/ZR1
tests/de/step_1/ZR2
tests/de/step_1/ZR4
tests/de/step_1/ZR7
tests/de/step_1/ZR8
tests/de/step_1/ZR9
tests/de/step_1/ZT2
tests/de/step_1/ZT3
tests/de/step_1/ZT6
tests/de/step_1/ZT7
tests/de/step_1/ZT8
tests/de/step_1/ZT9
tests/de/step_1/ZU5
tests/de/step_1/ZU6
tests/de/step_1/ZU8
tests/de/step_1/ZU9
tests/de/step_1/ZV2
tests/de/step_1/ZV3
tests/de/step_1/ZV4
tests/de/step_1/ZV5
tests/de/step_1/ZV7
tests/de/step_1/ZV8
tests/de/step_1/ZV9
tests/de/step_1/ZW1
tests/de/step_1/ZW6
tests/de/step_1/ZY4
tests/de/step_2/A3
tests/de/step_2/A4
tests/de/step_2/A7
tests/de/step_2/C5
tests/de/step_2/C8
tests/de/step_2/D5
tests/de/step_2/E1
tests/de/step_2/E2
tests/de/step_2/E3
tests/de/step_2/E4
tests/de/step_2/F1
tests/de/step_2/F2
tests/de/step_2/F3
tests/de/step_2/H1
tests/de/step_2/H4
tests/de/step_2/H8
tests/de/step_2/J3
tests/de/step_2/J4
tests/de/step_2/J6
tests/de/step_2/J7
tests/de/step_2/K1
tests/de/step_2/K4
tests/de/step_2/K5
tests/de/step_2/K8
tests/de/step_2/L5
tests/de/step_2/L6
tests/de/step_2/M4
tests/de/step_2/S1
tests/de/step_2/S4
tests/de/step_2/T8
tests/de/step_2/U6
tests/de/step_2/U7
tests/de/step_2/X3
tests/de/step_2/X5
tests/de/step_3/B1
tests/de/step_3/B4
tests/de/step_3/C9
tests/de/step_3/E1
tests/de/step_3/E3
tests/de/step_3/E7
tests/de/step_3/E8
tests/de/step_3/F4
tests/de/step_4/A4
tests/de/step_4/A5
tests/de/step_4/C7
tests/de/step_4/D8
tests/de/step_4/E2
tests/de/step_4/E5
tests/de/step_4/F3
tests/de/step_4/G3
tests/de/step_4/G4
tests/de/step_4/H2
tests/de/step_4/H3
tests/de/step_4/H4
tests/de/step_4/H5
tests/de/step_4/H8
tests/de/step_5/A2
tests/de/step_5/A3
tests/de/step_5/A5
tests/de/step_5/B1
tests/de/step_5/B2
tests/de/step_5/B3
tests/de/step_5/B5
tests/de/step_5/B7
tests/demo/draw/bug23745
tests/tools/dfbrowser/A4
tests/v3d/edge/A10
tests/v3d/face/F3
tests/v3d/glsl/clipping1
tests/v3d/glsl/culldist
tests/v3d/glsl/cullsize
tests/v3d/glsl/interior1
tests/v3d/glsl/interior2
tests/v3d/glsl/msaa
tests/v3d/glsl/outline1
tests/v3d/glsl/phong_pos2
tests/v3d/glsl/phong_pos3
tests/v3d/glsl/phong_pos4
tests/v3d/glsl/tiles
tests/v3d/materials/bug24855
tests/v3d/raytrace/bug24130
tests/v3d/raytrace/bug24819
tests/v3d/raytrace/bug25201
tests/v3d/raytrace/bug26617
tests/v3d/raytrace/refraction
tests/v3d/raytrace/textures
tests/v3d/transparency/blend
tests/v3d/viewcube/default
tests/v3d/viewcube/style
tests/xcaf/end

index 42852eb..570b84b 100644 (file)
@@ -276,7 +276,7 @@ blend result _model 2 _model_161
 # Show result
 pload VISUALIZATION
 vinit Driver1/Viewer1/View1
-vbackground -color 0.784314 0.784314 1
+vbackground -color C8C8FF
 vdisplay -dispMode 1 result
 vfit
 vaspects result -setFaceBoundaryDraw 1 -mostContinuity c2
index 7d61a04..d150cfa 100644 (file)
@@ -262,7 +262,7 @@ unifysamedom result  p_1
 # Show result
 pload VISUALIZATION
 vinit Driver1/Viewer1/View1
-vbackground -color 0.784314 0.784314 1
+vbackground -color C8C8FF
 vdisplay -dispMode 1 result
 vfit
 vaspects result -setFaceBoundaryDraw 1
index 4b284a5..21a94aa 100644 (file)
@@ -68,18 +68,18 @@ vlight add directional direction 0 -10 0 head 1 color white
 vdisplay b1 b2 b3 b4 b5 b6 b7 b8 b9 b10
 
 # set colors like in boxes of on OCC logo
-vsetcolor b1 0.8671875 0 0.16015625
-vsetcolor b2 0.96484375 0.8671875 0
-vsetcolor b3 0.609375 0.97734375 0.09375
-vsetcolor b4 0.90234375 0 0.48046875
-vsetcolor b5 0 0.48046875 0.73828125
-vsetcolor b6 0.578125 0 0.48046875
-vsetcolor b7 0.93359375 0.609375 0
-vsetcolor b8 0 0.70703125 0.9296875
-vsetcolor b9 0 0.64453125 0.48046875
-vsetcolor b10 0 0.48046875 0.73828125
+vsetcolor b1  DD0029
+vsetcolor b2  F6DD00
+vsetcolor b3  98F918
+vsetcolor b4  E9007A
+vsetcolor b5  007ABC
+vsetcolor b6  93007A
+vsetcolor b7  EE9800
+vsetcolor b8  00B489
+vsetcolor b9  00A47A
+vsetcolor b10 007ABC
 
 # set material to plastic for better look
 for {set i 1} {$i <= 10} {incr i} {vsetmaterial b$i plastic}
 
-vdrawtext label "Which\nbox\nis\ncloser\nto\nyou?" -pos 0 -6 -2 -color 0 0 0 -halign left -valign bottom -angle 0 -zoom 0 -height 40
+vdrawtext label "Which\nbox\nis\ncloser\nto\nyou?" -pos 0 -6 -2 -color BLACK -halign left -valign bottom -angle 0 -zoom 0 -height 40
index c756de8..4b46725 100644 (file)
@@ -255,27 +255,27 @@ if [info exists i7_show_3dview] {
   vlight add directional direction 1 -1 -2 head 1
 
   vdisplay case
-  vsetcolor case 0.7 0.7 0.7
+  vsetcolor case GRAY70
 
   vdisplay title
-  vsetcolor title 0.1 0.1 0.1
+  vsetcolor title GRAY10
 
   # board is mostly yellow (edges, triangle markers)
-  foreach f [explode board f] { vdisplay $f; vsetcolor $f 0.7 0.5 0.3 }
+  foreach f [explode board f] { vdisplay $f; vsetcolor $f B3803D }
   # top and bottom faces are light-green (outside) and dark-green (inside)
-  vsetcolor board_4 0 0.6 0.55
-  vsetcolor board_5 0 0.6 0.55
-  vsetcolor board_12 0 0.3 0.33
-  vsetcolor board_14 0 0.3 0.33
+  vsetcolor board_4  00998C
+  vsetcolor board_5  00998C
+  vsetcolor board_12 004D54
+  vsetcolor board_14 004D54
 
   vdisplay rpads
-  vsetcolor rpads 0.7 0.6 0.4
+  vsetcolor rpads B39966
 
   vdisplay bpads
-  vsetcolor bpads 0.7 0.6 0.4
+  vsetcolor bpads B39966
 
   vdisplay brpk
-  vsetcolor brpk 0.5 0.4 0.3
+  vsetcolor brpk 80664D
 
   donly board case rpads brpk; fit
 }
@@ -287,17 +287,17 @@ pload OCAF XDE
 NewDocument D MDTV-XCAF
 
 SetName D [XAddShape D board 0] "Board"
-foreach f [explode board f] { XSetColor D $f 0.7 0.5 0.3 }
-XSetColor D board_4 0 0.6 0.55
-XSetColor D board_5 0 0.6 0.55
-XSetColor D board_12 0 0.3 0.33
-XSetColor D board_14 0 0.3 0.33
+foreach f [explode board f] { XSetColor D $f B3803D }
+XSetColor D board_4  00998C
+XSetColor D board_5  00998C
+XSetColor D board_12 004D54
+XSetColor D board_14 004D54
 
 SetName D [XAddShape D case 0] "Case"
-XSetColor D case 0.7 0.7 0.7
+XSetColor D case GRAY70
 
 SetName D [XAddShape D title 0] "Case title"
-XSetColor D title 0.1 0.1 0.1
+XSetColor D title GRAY10
 
 SetName D [XAddShape D rpads 1] "Top side contact pads"
 SetName D [XAddShape D bpads 1] "Bottom contact pads"
@@ -306,17 +306,17 @@ SetName D [XFindShape D rpad] "Round pad"
 SetName D [XFindShape D Rpad] "Big round pad"
 SetName D [XFindShape D spad_1] "Square pad 1"
 SetName D [XFindShape D spad_2] "Square pad 2"
-XSetColor D rpad 0.7 0.6 0.4
-XSetColor D Rpad 0.7 0.6 0.4
-XSetColor D bpad 0.7 0.6 0.4
-XSetColor D spad_1 0.7 0.6 0.4
-XSetColor D spad_2 0.7 0.6 0.4
+XSetColor D rpad   B39966
+XSetColor D Rpad   B39966
+XSetColor D bpad   B39966
+XSetColor D spad_1 B39966
+XSetColor D spad_2 B39966
 
 SetName D [XAddShape D brpk 1] "Bottom packages"
 SetName D [XFindShape D rpk] "Bottom package"
-XSetColor D rpk1 0.7 0.7 0.7
-XSetColor D rpk2 0.5 0.4 0.3
-XSetColor D rpk3 0.7 0.7 0.7
+XSetColor D rpk1 GRAY70
+XSetColor D rpk2 80664D
+XSetColor D rpk3 GRAY70
 
 XShow D
 vlight clear
index e13b49b..2c651b1 100644 (file)
@@ -36,9 +36,7 @@ set anArrAngle [expr 3.14 * 12.0 / 180.0]
 
 # Form dimension names list to set parameters with vdimparam command
 set aList {rd_1 rd_2 ad_1 ad_2 ad_3}
-for {set i 1} {$i <= 10} {incr i} {
-lappend aList ld_$i
-}
+for {set i 1} {$i <= 10} {incr i} { lappend aList ld_$i }
 
 puts "Creating dimensions..."
 vdimension ld_1 -length -shapes bs_27 -plane xoy -color black -flyout -15
@@ -67,29 +65,14 @@ foreach i $aList {
 vfit
 
 puts "Displaying exported shapes..."
-vdisplay a b
-vsetdispmode a 1
-vsetdispmode b 1
+vdisplay -dispMode 1 a b
 vaspects a -setmaterial steel
 vaspects b -setmaterial bronze
 
 puts "Clipping shapes for better view..."
-vclipplane create pa
-vclipplane change pa equation 0 0 1 0
-vclipplane change pa capping on
-vclipplane change pa capping color 0.9 0.9 0.9
-vclipplane set    pa object a
-
-vclipplane create pb
-vclipplane change pb equation 0 0 1 0
-vclipplane change pb capping on
-vclipplane change pb capping color 1.0 0.8 0.0
-vclipplane set    pb object b
-
-vclipplane change pa capping texname $aHatch
-vclipplane change pa capping texscale 0.05 -0.05
-vclipplane change pb capping texname $aHatch
-vclipplane change pb capping texscale 0.05  0.05
+
+vclipplane pa -set a -equation 0 0 1 0 -capping on -color GRAY90 -texName $aHatch -texScale 0.05 -0.05
+vclipplane pb -set b -equation 0 0 1 0 -capping on -color GOLD   -texName $aHatch -texScale 0.05 -0.05
 
 vbottom
 vrotate -0.3 -0.3 0
index 2d279e6..a620a05 100644 (file)
@@ -77,14 +77,13 @@ SetName D $main "OCC Logo 2019"
 SetName D [XFindShape D sb] "Core"
 SetName D [XFindShape D tp] "Loop"
 SetName D [XFindShape D rs] "Connector"
-XSetColor D sb 1 0.21 0.32
-XSetColor D tp 0 0.667 0.855
-XSetColor D rs 0 0.45 0.69
+XSetColor D sb FF3652
+XSetColor D tp 00AADA
+XSetColor D rs 0073B0
 
 # display
-vinit
-vsetcolorbg 1 1 1
-vsetdispmode 1
-XDisplay D
+vinit View1
+vbackground -color WHITE
+XDisplay -dispMode 1 D
 vtop
 vfit
index af18729..2313a1a 100644 (file)
@@ -56,7 +56,7 @@ for { set aMarkerType 0 } { $aMarkerType <= 13 } { incr aMarkerType } {
   set aRow [expr $aMarkerType - 7]
   set aCol 5
   set aName [lindex $aMarkerTypeNames $aMarkerType]
-  vdrawtext "$aName" "$aName" -pos 0 [expr $aRow + 0.5] 0 -color 0.5 1.0 1.0 -halign center -valign center -angle 000 -zoom 0 -height 12 -aspect bold -font $aLabelFont -noupdate
+  vdrawtext "$aName" "$aName" -pos 0 [expr $aRow + 0.5] 0 -color 7FFFFF -halign center -valign center -angle 000 -zoom 0 -height 12 -aspect bold -font $aLabelFont -noupdate
   vdisplay -top -noupdate "$aName"
   if { $aMarkerType == 13 } {
     vmarkerstest m${aMarkerType}_${aCol} $aCol $aRow 0 PointsOnSide=1 FileName=$aCustom1
index e377752..7919192 100644 (file)
@@ -4,36 +4,22 @@
 #Title: Material properties in viewer
 
 set THE_MATERIALS {brass bronze copper gold jade neon_phc pewter obsidian plaster plastic satin silver steel stone chrome aluminium water glass diamond charcoal}
-set THE_COLORS    {default red green blue1}
+set THE_COLORS    {default red green blue}
 set THE_ROW_DIST  35
 
 proc drawLabels {} {
   set x 20
   set y 15
-  set r 0.098
-  set g 0.098
-  set b 0.098
   foreach aMatIter $::THE_MATERIALS {
-    vdrawtext "$aMatIter" "$aMatIter" -pos $x $y 0 -color $r $g $b -halign right -valign center -angle 000 -zoom 0 -height 14 -aspect regular -font Arial
+    vdrawtext "$aMatIter" "$aMatIter" -pos $x $y 0 -color GRAY10 -halign right -valign center -angle 000 -zoom 0 -height 14 -aspect regular -font Arial
     incr y 10
   }
   set x 40
   set y  5
   foreach aColIter $::THE_COLORS {
-    if { $aColIter == "red" } {
-      set r 1.0
-      set g 0.0
-      set b 0
-    } elseif { $aColIter == "green" } {
-      set r 0.0
-      set g 1.0
-      set b 0.0
-    } elseif { $aColIter == "blue1" } {
-      set r 0.0
-      set g 0.0
-      set b 1.0
-    }
-    vdrawtext "$aColIter" "$aColIter" -pos $x $y 0 -color $r $g $b -halign center -valign center -angle 000 -zoom 0 -height 14 -aspect regular -font Arial
+    set aLabColor "$aColIter"
+    if { "$aColIter" == "default" } { set aLabColor BLACK }
+    vdrawtext "$aColIter" "$aColIter" -pos $x $y 0 -color "$aLabColor" -halign center -valign center -angle 000 -zoom 0 -height 14 -aspect regular -font Arial
     incr x $::THE_ROW_DIST
   }
 }
@@ -69,7 +55,7 @@ vclose ALL
 vinit View1 w=768 h=768
 vtop
 vglinfo
-vbackground -gradient 0.705882 0.784314 1  0.705882 0.705882 0.705882 -gradientMode VERTICAL
+vbackground -gradient B4C8FF B4B4B4 -gradientMode VERTICAL
 
 vlight -change 0 -dir 0.577 -0.577 -0.577
 vrenderparams -msaa 8
index 904cadd..92ad26c 100644 (file)
@@ -46,18 +46,17 @@ NewDocument D
 XAddShape D body_1
 XAddShape D core_1
 
-#XSetColor D body_1   0. 0. 1.
-for {set i 1} {$i <= 26} {incr i} {XSetColor D body_1_$i 0. 0. 1.}
-XSetColor D body_1_1 0.9 0.5 0.4
-XSetColor D body_1_9 0.9 0.5 0.4
-for {set i 10} {$i <= 22} {incr i} {XSetColor D body_1_$i 0.6 0.7 0.0}
-XSetColor D core_1 0.1 0.1 1.
-foreach ff [explode core_1 f] { XSetColor D $ff 0.1 0.1 1. ; puts "set color $ff" }
-
-XShow D
-
+for {set i 1} {$i <= 26} {incr i} {XSetColor D body_1_$i BLUE}
+XSetColor D body_1_1 E68066
+XSetColor D body_1_9 E68066
+for {set i 10} {$i <= 22} {incr i} {XSetColor D body_1_$i 99B300}
+XSetColor D core_1 1A1AFF
+foreach ff [explode core_1 f] { XSetColor D $ff 1A1AFF ; puts "set color $ff" }
+
+vclear
+vinit View1
+XDisplay -dispMode 1 D -explore
 vfit
-vsetdispmode 1
 vrenderparams -msaa 8
 vbackground -color WHITE
 
index 63f120a..452f643 100644 (file)
@@ -28,19 +28,20 @@ SetName D [XFindShape D link]:2 "Nut instance 1"
 SetName D [XFindShape D link]:3 "Nut instance 2"
 
 puts "- Pin will be white"
-XSetColor D [XFindShape D pin] 1 1 1
+XSetColor D [XFindShape D pin] WHITE
 puts "- Nut itself will be dark gray"
-XSetColor D [XFindShape D nut] 0.1 0.1 0.1
+XSetColor D [XFindShape D nut] GRAY10
 puts "- Nut instance #1 will be red"
-XSetColor D [XFindShape D link]:2 1 0 0
+XSetColor D [XFindShape D link]:2 RED
 puts "- Nut instance #2 will be green"
-XSetColor D [XFindShape D link]:3 0 1 0
+XSetColor D [XFindShape D link]:3 GREEN
 
 puts "Starting DF browser..."
 DFBrowse D
 puts "Expand the document tree to see its structure and assigned names"
 
 puts "Showing assembly in 3d view..."
-XShow D
+vclear
+vinit View1
+XDisplay -dispMode 1 D -explore
 vfit
-vsetdispmode 1
index c1ea69b..0ae5914 100644 (file)
@@ -367,35 +367,57 @@ static Standard_Integer DPrsStd_AISColor (Draw_Interpretor& di,
                                          Standard_Integer nb, 
                                          const char** arg) 
 {
-  if (nb >= 3) {     
-    Handle(TDocStd_Document) D;
-    if (!DDocStd::GetDocument(arg[1],D)) return 1;  
-    TDF_Label L;
-    if (!DDF::FindLabel(D->GetData(),arg[2],L)) return 1;  
+  if (nb != 3 && nb != 4)
+  {
+    std::cout << "Syntax error: wrong number of arguments\n";
+    return 1;
+  }
 
-    Handle(TPrsStd_AISViewer) viewer;
-    if( !TPrsStd_AISViewer::Find(L, viewer) ) return 1;  
+  Handle(TDocStd_Document) D;
+  if (!DDocStd::GetDocument (arg[1], D))
+  {
+    std::cout << "Syntax error: '" << arg[1] << "' is not a document\n";
+    return 1;
+  }
 
-    Handle(TPrsStd_AISPresentation) prs;
-    if(L.FindAttribute( TPrsStd_AISPresentation::GetID(), prs) ) {   
-      if( nb == 4 ) {
-       prs->SetColor((Quantity_NameOfColor)Draw::Atoi(arg[3]));
-       TPrsStd_AISViewer::Update(L);
-      }
-      else
-       if (prs->HasOwnColor()){ 
-         di << "Color = " << prs->Color() << "\n";
-         di<<prs->Color();
-       }
-       else{
-         di << "DPrsStd_AISColor: Warning : Color wasn't set\n";
-         di<<(-1);
-       }
-      return 0; 
+  TDF_Label L;
+  if (!DDF::FindLabel (D->GetData(), arg[2], L))
+  {
+    std::cout << "Syntax error: '" << arg[2] << "' label cannot be found in the document\n";
+    return 1;
+  }
+
+  Handle(TPrsStd_AISViewer) viewer;
+  Handle(TPrsStd_AISPresentation) prs;
+  if (!TPrsStd_AISViewer::Find (L, viewer)
+    ||!L.FindAttribute (TPrsStd_AISPresentation::GetID(), prs))
+  {
+    std::cout << "Syntax error: '" << arg[2] << "' label has no presentation\n";
+    return 1;
+  }
+
+  if (nb == 4)
+  {
+    Quantity_NameOfColor aColor = Quantity_NOC_BLACK;
+    if (!Quantity_Color::ColorFromName (arg[3], aColor))
+    {
+      std::cout << "Syntax error: unknown color '" << arg[3] << "'\n";
+      return 1;
     }
+    prs->SetColor (aColor);
+    TPrsStd_AISViewer::Update (L);
   }
-  di << "DPrsStd_AISColor : Error"   << "\n";
-  return 1;
+  else if (prs->HasOwnColor())
+  {
+    di << "Color = " << Quantity_Color::StringName (prs->Color()) << "\n";
+    di << Quantity_Color::StringName (prs->Color());
+  }
+  else
+  {
+    di << "DPrsStd_AISColor: Warning : Color wasn't set\n";
+    di << (-1);
+  }
+  return 0;
 }
 
 //=======================================================================
index 638324d..ffbac02 100644 (file)
@@ -192,7 +192,8 @@ void Image_PixMap::Clear()
 // purpose  :
 // =======================================================================
 Quantity_ColorRGBA Image_PixMap::PixelColor (const Standard_Integer theX,
-                                             const Standard_Integer theY) const
+                                             const Standard_Integer theY,
+                                             const Standard_Boolean theToLinearize) const
 {
   if (IsEmpty()
    || theX < 0 || (Standard_Size )theX >= SizeX()
@@ -236,32 +237,58 @@ Quantity_ColorRGBA Image_PixMap::PixelColor (const Standard_Integer theX,
     case Image_Format_RGBA:
     {
       const Image_ColorRGBA& aPixel = Value<Image_ColorRGBA> (theY, theX);
-      return Quantity_ColorRGBA (float(aPixel.r()) / 255.0f, float(aPixel.g()) / 255.0f, float(aPixel.b()) / 255.0f, float(aPixel.a()) / 255.0f);
+      return theToLinearize
+           ? Quantity_ColorRGBA (Quantity_Color::Convert_sRGB_To_LinearRGB (float(aPixel.r()) / 255.0f),
+                                 Quantity_Color::Convert_sRGB_To_LinearRGB (float(aPixel.g()) / 255.0f),
+                                 Quantity_Color::Convert_sRGB_To_LinearRGB (float(aPixel.b()) / 255.0f),
+                                 float(aPixel.a()) / 255.0f)
+           : Quantity_ColorRGBA (float(aPixel.r()) / 255.0f, float(aPixel.g()) / 255.0f, float(aPixel.b()) / 255.0f, float(aPixel.a()) / 255.0f);
     }
     case Image_Format_BGRA:
     {
       const Image_ColorBGRA& aPixel = Value<Image_ColorBGRA> (theY, theX);
-      return Quantity_ColorRGBA (float(aPixel.r()) / 255.0f, float(aPixel.g()) / 255.0f, float(aPixel.b()) / 255.0f, float(aPixel.a()) / 255.0f);
+      return theToLinearize
+           ? Quantity_ColorRGBA (Quantity_Color::Convert_sRGB_To_LinearRGB (float(aPixel.r()) / 255.0f),
+                                 Quantity_Color::Convert_sRGB_To_LinearRGB (float(aPixel.g()) / 255.0f),
+                                 Quantity_Color::Convert_sRGB_To_LinearRGB (float(aPixel.b()) / 255.0f),
+                                 float(aPixel.a()) / 255.0f)
+           : Quantity_ColorRGBA (float(aPixel.r()) / 255.0f, float(aPixel.g()) / 255.0f, float(aPixel.b()) / 255.0f, float(aPixel.a()) / 255.0f);
     }
     case Image_Format_RGB32:
     {
       const Image_ColorRGB32& aPixel = Value<Image_ColorRGB32> (theY, theX);
-      return Quantity_ColorRGBA (float(aPixel.r()) / 255.0f, float(aPixel.g()) / 255.0f, float(aPixel.b()) / 255.0f, 1.0f); // opaque
+      return theToLinearize
+           ? Quantity_ColorRGBA (Quantity_Color::Convert_sRGB_To_LinearRGB (float(aPixel.r()) / 255.0f),
+                                 Quantity_Color::Convert_sRGB_To_LinearRGB (float(aPixel.g()) / 255.0f),
+                                 Quantity_Color::Convert_sRGB_To_LinearRGB (float(aPixel.b()) / 255.0f), 1.0f)
+           : Quantity_ColorRGBA (float(aPixel.r()) / 255.0f, float(aPixel.g()) / 255.0f, float(aPixel.b()) / 255.0f, 1.0f);
     }
     case Image_Format_BGR32:
     {
       const Image_ColorBGR32& aPixel = Value<Image_ColorBGR32> (theY, theX);
-      return Quantity_ColorRGBA (float(aPixel.r()) / 255.0f, float(aPixel.g()) / 255.0f, float(aPixel.b()) / 255.0f, 1.0f); // opaque
+      return theToLinearize
+           ? Quantity_ColorRGBA (Quantity_Color::Convert_sRGB_To_LinearRGB (float(aPixel.r()) / 255.0f),
+                                 Quantity_Color::Convert_sRGB_To_LinearRGB (float(aPixel.g()) / 255.0f),
+                                 Quantity_Color::Convert_sRGB_To_LinearRGB (float(aPixel.b()) / 255.0f), 1.0f)
+           : Quantity_ColorRGBA (float(aPixel.r()) / 255.0f, float(aPixel.g()) / 255.0f, float(aPixel.b()) / 255.0f, 1.0f);
     }
     case Image_Format_RGB:
     {
       const Image_ColorRGB& aPixel = Value<Image_ColorRGB> (theY, theX);
-      return Quantity_ColorRGBA (float(aPixel.r()) / 255.0f, float(aPixel.g()) / 255.0f, float(aPixel.b()) / 255.0f, 1.0f); // opaque
+      return theToLinearize
+           ? Quantity_ColorRGBA (Quantity_Color::Convert_sRGB_To_LinearRGB (float(aPixel.r()) / 255.0f),
+                                 Quantity_Color::Convert_sRGB_To_LinearRGB (float(aPixel.g()) / 255.0f),
+                                 Quantity_Color::Convert_sRGB_To_LinearRGB (float(aPixel.b()) / 255.0f), 1.0f)
+           : Quantity_ColorRGBA (float(aPixel.r()) / 255.0f, float(aPixel.g()) / 255.0f, float(aPixel.b()) / 255.0f, 1.0f);
     }
     case Image_Format_BGR:
     {
       const Image_ColorBGR& aPixel = Value<Image_ColorBGR> (theY, theX);
-      return Quantity_ColorRGBA (float(aPixel.r()) / 255.0f, float(aPixel.g()) / 255.0f, float(aPixel.b()) / 255.0f, 1.0f); // opaque
+      return theToLinearize
+           ? Quantity_ColorRGBA (Quantity_Color::Convert_sRGB_To_LinearRGB (float(aPixel.r()) / 255.0f),
+                                 Quantity_Color::Convert_sRGB_To_LinearRGB (float(aPixel.g()) / 255.0f),
+                                 Quantity_Color::Convert_sRGB_To_LinearRGB (float(aPixel.b()) / 255.0f), 1.0f)
+           : Quantity_ColorRGBA (float(aPixel.r()) / 255.0f, float(aPixel.g()) / 255.0f, float(aPixel.b()) / 255.0f, 1.0f);
     }
     case Image_Format_Gray:
     {
@@ -289,7 +316,8 @@ Quantity_ColorRGBA Image_PixMap::PixelColor (const Standard_Integer theX,
 // =======================================================================
 void Image_PixMap::SetPixelColor (const Standard_Integer theX,
                                   const Standard_Integer theY,
-                                  const Quantity_ColorRGBA& theColor)
+                                  const Quantity_ColorRGBA& theColor,
+                                  const Standard_Boolean theToDeLinearize)
 {
   if (IsEmpty()
    || theX < 0 || Standard_Size(theX) >= SizeX()
@@ -348,53 +376,107 @@ void Image_PixMap::SetPixelColor (const Standard_Integer theX,
     case Image_Format_RGBA:
     {
       Image_ColorRGBA& aPixel = ChangeValue<Image_ColorRGBA> (theY, theX);
-      aPixel.r() = Standard_Byte(aColor.r() * 255.0f);
-      aPixel.g() = Standard_Byte(aColor.g() * 255.0f);
-      aPixel.b() = Standard_Byte(aColor.b() * 255.0f);
+      if (theToDeLinearize)
+      {
+        aPixel.r() = Standard_Byte(Quantity_Color::Convert_LinearRGB_To_sRGB (aColor.r()) * 255.0f);
+        aPixel.g() = Standard_Byte(Quantity_Color::Convert_LinearRGB_To_sRGB (aColor.g()) * 255.0f);
+        aPixel.b() = Standard_Byte(Quantity_Color::Convert_LinearRGB_To_sRGB (aColor.b()) * 255.0f);
+      }
+      else
+      {
+        aPixel.r() = Standard_Byte(aColor.r() * 255.0f);
+        aPixel.g() = Standard_Byte(aColor.g() * 255.0f);
+        aPixel.b() = Standard_Byte(aColor.b() * 255.0f);
+      }
       aPixel.a() = Standard_Byte(aColor.a() * 255.0f);
       return;
     }
     case Image_Format_BGRA:
     {
       Image_ColorBGRA& aPixel = ChangeValue<Image_ColorBGRA> (theY, theX);
-      aPixel.r() = Standard_Byte(aColor.r() * 255.0f);
-      aPixel.g() = Standard_Byte(aColor.g() * 255.0f);
-      aPixel.b() = Standard_Byte(aColor.b() * 255.0f);
+      if (theToDeLinearize)
+      {
+        aPixel.r() = Standard_Byte(Quantity_Color::Convert_LinearRGB_To_sRGB (aColor.r()) * 255.0f);
+        aPixel.g() = Standard_Byte(Quantity_Color::Convert_LinearRGB_To_sRGB (aColor.g()) * 255.0f);
+        aPixel.b() = Standard_Byte(Quantity_Color::Convert_LinearRGB_To_sRGB (aColor.b()) * 255.0f);
+      }
+      else
+      {
+        aPixel.r() = Standard_Byte(aColor.r() * 255.0f);
+        aPixel.g() = Standard_Byte(aColor.g() * 255.0f);
+        aPixel.b() = Standard_Byte(aColor.b() * 255.0f);
+      }
       aPixel.a() = Standard_Byte(aColor.a() * 255.0f);
       return;
     }
     case Image_Format_RGB32:
     {
       Image_ColorRGB32& aPixel = ChangeValue<Image_ColorRGB32> (theY, theX);
-      aPixel.r()  = Standard_Byte(aColor.r() * 255.0f);
-      aPixel.g()  = Standard_Byte(aColor.g() * 255.0f);
-      aPixel.b()  = Standard_Byte(aColor.b() * 255.0f);
+      if (theToDeLinearize)
+      {
+        aPixel.r()  = Standard_Byte(Quantity_Color::Convert_LinearRGB_To_sRGB (aColor.r()) * 255.0f);
+        aPixel.g()  = Standard_Byte(Quantity_Color::Convert_LinearRGB_To_sRGB (aColor.g()) * 255.0f);
+        aPixel.b()  = Standard_Byte(Quantity_Color::Convert_LinearRGB_To_sRGB (aColor.b()) * 255.0f);
+      }
+      else
+      {
+        aPixel.r()  = Standard_Byte(aColor.r() * 255.0f);
+        aPixel.g()  = Standard_Byte(aColor.g() * 255.0f);
+        aPixel.b()  = Standard_Byte(aColor.b() * 255.0f);
+      }
       aPixel.a_() = 255;
       return;
     }
     case Image_Format_BGR32:
     {
       Image_ColorBGR32& aPixel = ChangeValue<Image_ColorBGR32> (theY, theX);
-      aPixel.r()  = Standard_Byte(aColor.r() * 255.0f);
-      aPixel.g()  = Standard_Byte(aColor.g() * 255.0f);
-      aPixel.b()  = Standard_Byte(aColor.b() * 255.0f);
+      if (theToDeLinearize)
+      {
+        aPixel.r()  = Standard_Byte(Quantity_Color::Convert_LinearRGB_To_sRGB (aColor.r()) * 255.0f);
+        aPixel.g()  = Standard_Byte(Quantity_Color::Convert_LinearRGB_To_sRGB (aColor.g()) * 255.0f);
+        aPixel.b()  = Standard_Byte(Quantity_Color::Convert_LinearRGB_To_sRGB (aColor.b()) * 255.0f);
+      }
+      else
+      {
+        aPixel.r()  = Standard_Byte(aColor.r() * 255.0f);
+        aPixel.g()  = Standard_Byte(aColor.g() * 255.0f);
+        aPixel.b()  = Standard_Byte(aColor.b() * 255.0f);
+      }
       aPixel.a_() = 255;
       return;
     }
     case Image_Format_RGB:
     {
       Image_ColorRGB& aPixel = ChangeValue<Image_ColorRGB> (theY, theX);
-      aPixel.r() = Standard_Byte(aColor.r() * 255.0f);
-      aPixel.g() = Standard_Byte(aColor.g() * 255.0f);
-      aPixel.b() = Standard_Byte(aColor.b() * 255.0f);
+      if (theToDeLinearize)
+      {
+        aPixel.r() = Standard_Byte(Quantity_Color::Convert_LinearRGB_To_sRGB (aColor.r()) * 255.0f);
+        aPixel.g() = Standard_Byte(Quantity_Color::Convert_LinearRGB_To_sRGB (aColor.g()) * 255.0f);
+        aPixel.b() = Standard_Byte(Quantity_Color::Convert_LinearRGB_To_sRGB (aColor.b()) * 255.0f);
+      }
+      else
+      {
+        aPixel.r() = Standard_Byte(aColor.r() * 255.0f);
+        aPixel.g() = Standard_Byte(aColor.g() * 255.0f);
+        aPixel.b() = Standard_Byte(aColor.b() * 255.0f);
+      }
       return;
     }
     case Image_Format_BGR:
     {
       Image_ColorBGR& aPixel = ChangeValue<Image_ColorBGR> (theY, theX);
-      aPixel.r() = Standard_Byte(aColor.r() * 255.0f);
-      aPixel.g() = Standard_Byte(aColor.g() * 255.0f);
-      aPixel.b() = Standard_Byte(aColor.b() * 255.0f);
+      if (theToDeLinearize)
+      {
+        aPixel.r() = Standard_Byte(Quantity_Color::Convert_LinearRGB_To_sRGB (aColor.r()) * 255.0f);
+        aPixel.g() = Standard_Byte(Quantity_Color::Convert_LinearRGB_To_sRGB (aColor.g()) * 255.0f);
+        aPixel.b() = Standard_Byte(Quantity_Color::Convert_LinearRGB_To_sRGB (aColor.b()) * 255.0f);
+      }
+      else
+      {
+        aPixel.r() = Standard_Byte(aColor.r() * 255.0f);
+        aPixel.g() = Standard_Byte(aColor.g() * 255.0f);
+        aPixel.b() = Standard_Byte(aColor.b() * 255.0f);
+      }
       return;
     }
     case Image_Format_Gray:
index a87ac62..6323445 100644 (file)
@@ -102,26 +102,38 @@ public: // high-level API
 
   //! Returns the pixel color. This function is relatively slow.
   //! Beware that this method takes coordinates in opposite order in contrast to ::Value() and ::ChangeValue().
-  //! @param theX column index from left
-  //! @param theY row    index from top
+  //! @param theX [in] column index from left
+  //! @param theY [in] row    index from top
+  //! @param theToLinearize [in] when TRUE, the color stored in non-linear color space (e.g. Image_Format_RGB) will be linearized
   //! @return the pixel color
   Standard_EXPORT Quantity_ColorRGBA PixelColor (const Standard_Integer theX,
-                                                 const Standard_Integer theY) const;
+                                                 const Standard_Integer theY,
+                                                 const Standard_Boolean theToLinearize = Standard_False) const;
 
   //! Sets the pixel color. This function is relatively slow.
   //! Beware that this method takes coordinates in opposite order in contrast to ::Value() and ::ChangeValue().
+  //! @param theX [in] column index from left
+  //! @param theY [in] row    index from top
+  //! @param theColor [in] color to store
+  //! @param theToDeLinearize [in] when TRUE, the gamma correction will be applied for storing in non-linear color space (e.g. Image_Format_RGB)
   void SetPixelColor (const Standard_Integer theX,
                       const Standard_Integer theY,
-                      const Quantity_Color&  theColor)
+                      const Quantity_Color&  theColor,
+                      const Standard_Boolean theToDeLinearize = Standard_False)
   {
-    SetPixelColor (theX, theY, Quantity_ColorRGBA (theColor, 1.0f));
+    SetPixelColor (theX, theY, Quantity_ColorRGBA (theColor, 1.0f), theToDeLinearize);
   }
 
   //! Sets the pixel color. This function is relatively slow.
   //! Beware that this method takes coordinates in opposite order in contrast to ::Value() and ::ChangeValue().
+  //! @param theX [in] column index from left
+  //! @param theY [in] row    index from top
+  //! @param theColor [in] color to store
+  //! @param theToDeLinearize [in] when TRUE, the gamma correction will be applied for storing in non-linear color space (e.g. Image_Format_RGB)
   Standard_EXPORT void SetPixelColor (const Standard_Integer theX,
                                       const Standard_Integer theY,
-                                      const Quantity_ColorRGBA& theColor);
+                                      const Quantity_ColorRGBA& theColor,
+                                      const Standard_Boolean theToDeLinearize = Standard_False);
 
   //! Initialize image plane as wrapper over alien data.
   //! Data will not be copied! Notice that caller should ensure
index 983cc5a..2d403e2 100644 (file)
@@ -1742,39 +1742,6 @@ static Standard_Integer OCC1029_AISTransparency (Draw_Interpretor& di,
 }
 
 //=======================================================================
-//function : OCC1030_AISColor 
-//purpose  : OCC1030_AISColor (DOC,entry,[color])
-//=======================================================================
-
-static Standard_Integer OCC1030_AISColor (Draw_Interpretor& di,
-                                     Standard_Integer nb, 
-                                     const char ** arg) 
-{
-  if (nb >= 3) {     
-    Handle(TDocStd_Document) D;
-    if (!DDocStd::GetDocument(arg[1],D)) return 1;  
-    TDF_Label L;
-    if (!DDF::FindLabel(D->GetData(),arg[2],L)) return 1;  
-
-    Handle(TPrsStd_AISViewer) viewer;
-    if( !TPrsStd_AISViewer::Find(L, viewer) ) return 1;  
-
-    Handle(TPrsStd_AISPresentation) prs;
-    if(L.FindAttribute( TPrsStd_AISPresentation::GetID(), prs) ) {   
-      if( nb == 4 ) {
-       prs->SetColor((Quantity_NameOfColor)Draw::Atoi(arg[3]));
-       TPrsStd_AISViewer::Update(L);
-      }
-      else
-         di << "Color = " << prs->Color() << "\n";
-      return 0; 
-    }
-  }
-  di << arg[0] << " : Error\n";
-  return 1;
-}
-
-//=======================================================================
 //function : OCC1031_AISMaterial
 //purpose  : OCC1031_AISMaterial (DOC,entry,[material])
 //=======================================================================
@@ -4866,7 +4833,6 @@ void QABugs::Commands_11(Draw_Interpretor& theCommands) {
   theCommands.Add("OCC902", "OCC902 expression", __FILE__, OCC902, group);
 
   theCommands.Add ("OCC1029_AISTransparency","OCC1029_AISTransparency (DOC, entry, [real])",__FILE__, OCC1029_AISTransparency, group);
-  theCommands.Add ("OCC1030_AISColor", "OCC1030_AISColor (DOC, entry, [color])", __FILE__, OCC1030_AISColor, group);
   theCommands.Add ("OCC1031_AISMaterial", "OCC1031_AISMaterial (DOC, entry, [material])", __FILE__, OCC1031_AISMaterial, group); 
   theCommands.Add ("OCC1032_AISWidth", "OCC1032_AISWidth (DOC, entry, [width])", __FILE__, OCC1032_AISWidth, group); 
   theCommands.Add ("OCC1033_AISMode", "OCC1033_AISMode (DOC, entry, [mode])", __FILE__, OCC1033_AISMode, group); 
index fa0ce01..1be1ffd 100755 (executable)
@@ -13,11 +13,11 @@ Quantity_Coefficient.hxx
 Quantity_CoefficientOfExpansion.hxx
 Quantity_Color.cxx
 Quantity_Color.hxx
+Quantity_ColorTable.pxx
 Quantity_ColorHasher.hxx
 Quantity_ColorRGBA.cxx
 Quantity_ColorRGBA.hxx
 Quantity_ColorRGBAHasher.hxx
-Quantity_ColorDefinitionError.hxx
 Quantity_Concentration.hxx
 Quantity_Conductivity.hxx
 Quantity_Constant.hxx
index 69e94fd..d29b651 100644 (file)
@@ -15,7 +15,6 @@
 
 #include <Quantity_Color.hxx>
 
-#include <Quantity_ColorDefinitionError.hxx>
 #include <Quantity_ColorRGBA.hxx>
 #include <Standard_ErrorHandler.hxx>
 #include <Standard_OutOfRange.hxx>
 #include <TCollection_AsciiString.hxx>
 
 #include <string.h>
-// for Test method (suite et fin)
-void call_hlsrgb(float h, float l, float s, float& r, float& g, float& b);
-void call_rgbhls(float r, float g, float b, float& h, float& l, float& s);
-
-//-Aliases
-
-//-Global data definitions
 
 #define RGBHLS_H_UNDEFINED -1.0
 
 static Standard_Real TheEpsilon = 0.0001;
 
-//     -- les composantes RGB
-//     MyRed           :       Standard_ShortReal;
-//     MyGreen         :       Standard_ShortReal;
-//     MyBlue          :       Standard_ShortReal;
+// Throw exception if RGB values are out of range.
+#define Quantity_ColorValidateRgbRange(theR, theG, theB) \
+  if (theR < 0.0 || theR > 1.0 \
+   || theG < 0.0 || theG > 1.0 \
+   || theB < 0.0 || theB > 1.0) { throw Standard_OutOfRange("Color out"); }
+
+// Throw exception if HLS values are out of range.
+#define Quantity_ColorValidateHlsRange(theH, theL, theS) \
+  if ((theH < 0.0 && theH != RGBHLS_H_UNDEFINED && theS != 0.0) \
+   || (theH > 360.0) \
+    || theL < 0.0 || theL > 1.0 \
+    || theS < 0.0 || theS > 1.0) { throw Standard_OutOfRange("Color out"); }
+
+namespace
+{
+  //! Raw color for defining list of standard color
+  struct Quantity_StandardColor
+  {
+    const char*             StringName;
+    NCollection_Vec3<float> RgbValues;
+    Quantity_NameOfColor    EnumName;
+
+    Quantity_StandardColor (Quantity_NameOfColor theName, const char* theStringName, const NCollection_Vec3<float>& theVec3)
+    : StringName (theStringName), RgbValues (theVec3), EnumName (theName) {}
+  };
+}
 
-//-Constructors
+// Note that HTML/hex sRGB representation is ignored
+#define RawColor(theName, theHex, theR, theG, theB) Quantity_StandardColor(Quantity_NOC_##theName, #theName, NCollection_Vec3<float>(theR##f, theG##f, theB##f))
 
-//-Destructors
+//! Name list of standard materials (defined within enumeration).
+static const Quantity_StandardColor THE_COLORS[] =
+{
+#include "Quantity_ColorTable.pxx"
+};
 
-//-Methods, in order
+// =======================================================================
+// function : Epsilon
+// purpose  :
+// =======================================================================
+Standard_Real Quantity_Color::Epsilon()
+{
+  return TheEpsilon;
+}
+
+// =======================================================================
+// function : SetEpsilon
+// purpose  :
+// =======================================================================
+void Quantity_Color::SetEpsilon (const Standard_Real theEpsilon)
+{
+  TheEpsilon = theEpsilon;
+}
 
+// =======================================================================
+// function : valuesOf
+// purpose  :
+// =======================================================================
+NCollection_Vec3<float> Quantity_Color::valuesOf (const Quantity_NameOfColor theName,
+                                                  const Quantity_TypeOfColor theType)
+{
+  if ((Standard_Integer )theName < 0 || (Standard_Integer )theName > Quantity_NOC_WHITE)
+  {
+    throw Standard_OutOfRange("Bad name");
+  }
+
+  const NCollection_Vec3<float>& anRgb = THE_COLORS[theName].RgbValues;
+  switch (theType)
+  {
+    case Quantity_TOC_RGB: return anRgb;
+    case Quantity_TOC_HLS: return Convert_sRGB_To_HLS (anRgb);
+  }
+  throw Standard_ProgramError("Internal error");
+}
+
+// =======================================================================
+// function : StringName
+// purpose  :
+// =======================================================================
+Standard_CString Quantity_Color::StringName (const Quantity_NameOfColor theName)
+{
+  if ((Standard_Integer )theName < 0 || (Standard_Integer )theName > Quantity_NOC_WHITE)
+  {
+    throw Standard_OutOfRange("Bad name");
+  }
+  return THE_COLORS[theName].StringName;
+}
+
+// =======================================================================
+// function : ColorFromName
+// purpose  :
+// =======================================================================
 Standard_Boolean Quantity_Color::ColorFromName (const Standard_CString theName,
                                                 Quantity_NameOfColor&  theColor)
 {
@@ -58,21 +131,41 @@ Standard_Boolean Quantity_Color::ColorFromName (const Standard_CString theName,
 
   for (Standard_Integer anIter = Quantity_NOC_BLACK; anIter <= Quantity_NOC_WHITE; ++anIter)
   {
-    Standard_CString aColorName = Quantity_Color::StringName (Quantity_NameOfColor (anIter));
+    Standard_CString aColorName = THE_COLORS[anIter].StringName;
     if (aName == aColorName)
     {
       theColor = (Quantity_NameOfColor )anIter;
       return Standard_True;
     }
   }
-  return Standard_False;
+
+  // aliases
+  if      (aName == "BLUE1")       { theColor = Quantity_NOC_BLUE1; }
+  else if (aName == "CHARTREUSE1") { theColor = Quantity_NOC_CHARTREUSE1; }
+  else if (aName == "CYAN1")       { theColor = Quantity_NOC_CYAN1; }
+  else if (aName == "GOLD1")       { theColor = Quantity_NOC_GOLD1; }
+  else if (aName == "GREEN1")      { theColor = Quantity_NOC_GREEN1; }
+  else if (aName == "LIGHTCYAN1")  { theColor = Quantity_NOC_LIGHTCYAN1; }
+  else if (aName == "MAGENTA1")    { theColor = Quantity_NOC_MAGENTA1; }
+  else if (aName == "ORANGE1")     { theColor = Quantity_NOC_ORANGE1; }
+  else if (aName == "ORANGERED1")  { theColor = Quantity_NOC_ORANGERED1; }
+  else if (aName == "RED1")        { theColor = Quantity_NOC_RED1; }
+  else if (aName == "TOMATO1")     { theColor = Quantity_NOC_TOMATO1; }
+  else if (aName == "YELLOW1")     { theColor = Quantity_NOC_YELLOW1; }
+  else
+  {
+    return Standard_False;
+  }
+
+  return Standard_True;
 }
 
 //=======================================================================
 // function : ColorFromHex
 // purpose  :
 //=======================================================================
-bool Quantity_Color::ColorFromHex (const Standard_CString theHexColorString, Quantity_Color& theColor)
+bool Quantity_Color::ColorFromHex (const Standard_CString theHexColorString,
+                                   Quantity_Color& theColor)
 {
   Quantity_ColorRGBA aColorRGBA;
   if (!Quantity_ColorRGBA::ColorFromHex (theHexColorString, aColorRGBA, true))
@@ -83,3847 +176,394 @@ bool Quantity_Color::ColorFromHex (const Standard_CString theHexColorString, Qua
   return true;
 }
 
-Quantity_Color::Quantity_Color () {
-
-       Quantity_Color::ValuesOf
-               (Quantity_NOC_YELLOW, Quantity_TOC_RGB, MyRed, MyGreen, MyBlue);
-}
-
-Quantity_Color::Quantity_Color (const Quantity_NameOfColor AName) {
-
-       Quantity_Color::ValuesOf
-               (AName, Quantity_TOC_RGB, MyRed, MyGreen, MyBlue);
-}
-
-Quantity_Color::Quantity_Color (const Standard_Real R1, const Standard_Real R2, const Standard_Real R3, const Quantity_TypeOfColor AType) {
-
-       switch (AType) {
-
-               case Quantity_TOC_RGB :
-                       if ( R1 < 0. || R1 > 1. ||
-                            R2 < 0. || R2 > 1. ||
-                            R3 < 0. || R3 > 1. )
-                               throw Standard_OutOfRange("Color out");
-                       MyRed   = Standard_ShortReal (R1);
-                       MyGreen = Standard_ShortReal (R2);
-                       MyBlue  = Standard_ShortReal (R3);
-               break;
-
-               case Quantity_TOC_HLS :
-                       if ( (R1 < 0. && R1 != RGBHLS_H_UNDEFINED && R3 != 0.0)
-                         || (R1 > 360.) ||
-                            R2 < 0. || R2 > 1. ||
-                            R3 < 0. || R3 > 1. )
-                               throw Standard_OutOfRange("Color out");
-                       Quantity_Color::hlsrgb
-                               (Standard_ShortReal (R1),
-                                Standard_ShortReal (R2),
-                                Standard_ShortReal (R3),
-                                MyRed, MyGreen, MyBlue);
-               break;
-       }
-
-}
-
-Quantity_Color::Quantity_Color (const NCollection_Vec3<float>& theRgb)
-: MyRed  (theRgb.r()),
-  MyGreen(theRgb.g()),
-  MyBlue (theRgb.b())
+// =======================================================================
+// function : Quantity_Color
+// purpose  :
+// =======================================================================
+Quantity_Color::Quantity_Color (const Standard_Real theR1, const Standard_Real theR2, const Standard_Real theR3,
+                                const Quantity_TypeOfColor theType)
 {
-  if (theRgb.r() < 0.0f || theRgb.r() > 1.0f
-   || theRgb.g() < 0.0f || theRgb.g() > 1.0f
-   || theRgb.b() < 0.0f || theRgb.b() > 1.0f)
+  switch (theType)
   {
-    throw Standard_OutOfRange("Color out");
+    case Quantity_TOC_RGB:
+    {
+      Quantity_ColorValidateRgbRange(theR1, theR2, theR3);
+      myRgb.SetValues (float(theR1), float(theR2), float(theR3));
+      break;
+    }
+    case Quantity_TOC_HLS:
+    {
+      Quantity_ColorValidateHlsRange(theR1, theR2, theR3);
+      myRgb = Convert_HLS_To_sRGB (NCollection_Vec3<float> (float(theR1), float(theR2), float(theR3)));
+      break;
+    }
   }
 }
 
-void Quantity_Color::ChangeContrast (const Standard_Real ADelta) {
-
-Standard_ShortReal MyHue, MyLight, MySaturation;
-
-       Quantity_Color::rgbhls
-                       (MyRed, MyGreen, MyBlue, MyHue, MyLight, MySaturation);
-
-       MySaturation    += MySaturation * Standard_ShortReal (ADelta) / (float ) 100.0;
-
-       if ( !((MySaturation > 1.0) || (MySaturation < 0.0) )) {
-               Quantity_Color::hlsrgb
-                       (MyHue, MyLight, MySaturation, MyRed, MyGreen, MyBlue);
-       }
-}
-
-void Quantity_Color::ChangeIntensity (const Standard_Real ADelta) {
-
-Standard_ShortReal MyHue, MyLight, MySaturation;
-
-       Quantity_Color::rgbhls
-                       (MyRed, MyGreen, MyBlue, MyHue, MyLight, MySaturation);
-
-
-       MyLight         += MyLight * Standard_ShortReal (ADelta) / (float ) 100.0;
-       if ( !((MyLight > 1.0) || (MyLight < 0.0) )) {
-               Quantity_Color::hlsrgb
-                       (MyHue, MyLight, MySaturation, MyRed, MyGreen, MyBlue);
-       }
-
-}
-
-void Quantity_Color::SetValues (const Quantity_NameOfColor AName) {
-
-       Quantity_Color::ValuesOf
-               (AName, Quantity_TOC_RGB, MyRed, MyGreen, MyBlue);
-
-}
-
-void Quantity_Color::SetValues (const Standard_Real R1, const Standard_Real R2, const Standard_Real R3, const Quantity_TypeOfColor AType) {
-
-       switch (AType) {
-
-               case Quantity_TOC_RGB :
-                       if ( R1 < 0. || R1 > 1. ||
-                            R2 < 0. || R2 > 1. ||
-                            R3 < 0. || R3 > 1. )
-                               throw Standard_OutOfRange("Color out");
-                       else {
-                               MyRed   = Standard_ShortReal (R1);
-                               MyGreen = Standard_ShortReal (R2);
-                               MyBlue  = Standard_ShortReal (R3);
-                       }
-               break;
-
-               case Quantity_TOC_HLS :
-                       if ( R1 < 0. || R1 > 360. ||
-                            R2 < 0. || R2 > 1. ||
-                            R3 < 0. || R3 > 1. )
-                               throw Standard_OutOfRange("Color out");
-                       else {
-                               Quantity_Color::hlsrgb
-                                       (Standard_ShortReal (R1),
-                                        Standard_ShortReal (R2),
-                                        Standard_ShortReal (R3),
-                                        MyRed, MyGreen, MyBlue);
-                       }
-               break;
-       }
-
-}
-
-Standard_Real Quantity_Color::Distance (const Quantity_Color& AColor) const {
-
-Standard_Real R1, G1, B1;
-Standard_Real R2, G2, B2;
-
-       R1      = Standard_Real (MyRed);
-       G1      = Standard_Real (MyGreen);
-       B1      = Standard_Real (MyBlue);
-
-       R2      = Standard_Real (AColor.MyRed);
-       G2      = Standard_Real (AColor.MyGreen);
-       B2      = Standard_Real (AColor.MyBlue);
-
-       return  Sqrt (
-                       ((R1 - R2) * (R1 - R2)) +
-                       ((G1 - G2) * (G1 - G2)) +
-                       ((B1 - B2) * (B1 - B2))
-                    );
-
-}
-
-Standard_Real Quantity_Color::SquareDistance (const Quantity_Color& AColor) const {
-
-Standard_Real R1, G1, B1;
-Standard_Real R2, G2, B2;
-
-       R1      = Standard_Real (MyRed);
-       G1      = Standard_Real (MyGreen);
-       B1      = Standard_Real (MyBlue);
-
-       R2      = Standard_Real (AColor.MyRed);
-       G2      = Standard_Real (AColor.MyGreen);
-       B2      = Standard_Real (AColor.MyBlue);
-
-       return  (
-                       ((R1 - R2) * (R1 - R2)) +
-                       ((G1 - G2) * (G1 - G2)) +
-                       ((B1 - B2) * (B1 - B2))
-               );
-
-}
-
-void Quantity_Color::Delta (const Quantity_Color& AColor, Standard_Real& DC, Standard_Real& DI) const {
-
-Standard_ShortReal MyHue, MyLight, MySaturation;
-
-       Quantity_Color::rgbhls
-                       (MyRed, MyGreen, MyBlue, MyHue, MyLight, MySaturation);
-
-       DC      = Standard_Real (MySaturation   - AColor.Saturation ());
-       DI      = Standard_Real (MyLight                - AColor.Light ());
-
-}
-
-Standard_Boolean Quantity_Color::IsDifferent (const Quantity_Color& Other) const {
-
-       return (Distance (Other) > Epsilon ());
-
-}
-
-Standard_Boolean Quantity_Color::IsEqual (const Quantity_Color& Other) const {
-
-       return (Distance (Other) <= Epsilon ());
-
-}
-
-Quantity_NameOfColor Quantity_Color::Name () const {
-
-Quantity_NameOfColor MyNewName = Quantity_NOC_BLACK;   // Nom courant.
-Quantity_Color Col;                            // Couleur courante.
-Standard_Real NewDist = 4.0;                   // Distance courante.
-Standard_Real Dist = 4.0;                      // Distance la plus courte.
-
-Standard_Integer Begin, End, Current;
-
-               //
-               // Parcours de l'enumeration
-               //
-               Begin   = Standard_Integer (Quantity_NOC_BLACK);
-               End     = Standard_Integer (Quantity_NOC_WHITE);
-
-               for (Current = Begin;
-                       ((Current <= End) && (NewDist != 0.0)); Current++) {
-
-                       Col.SetValues (Quantity_NameOfColor (Current));
-                       NewDist = 
-                       ((MyRed   - Col.MyRed)   * (MyRed - Col.MyRed))     +
-                       ((MyGreen - Col.MyGreen) * (MyGreen - Col.MyGreen)) +
-                       ((MyBlue  - Col.MyBlue)  * (MyBlue - Col.MyBlue));
-
-                       if (NewDist < Dist) {
-                               MyNewName = Quantity_NameOfColor (Current);
-                               Dist = NewDist;
-                       }
-               } // Fin de boucle for
-
-               return (MyNewName);
-
-}
-
-Standard_Real Quantity_Color::Epsilon()
+// =======================================================================
+// function : Quantity_Color
+// purpose  :
+// =======================================================================
+Quantity_Color::Quantity_Color (const NCollection_Vec3<float>& theRgb)
+: myRgb (theRgb)
 {
-  return TheEpsilon;
-}
-
-void Quantity_Color::SetEpsilon (const Standard_Real AnEpsilon) {
-
-       TheEpsilon      = AnEpsilon;
-
-}
-
-Quantity_NameOfColor Quantity_Color::Name (const Standard_Real R, const Standard_Real G, const Standard_Real B) {
-
-       if ( R < 0. || R > 1. ||
-            G < 0. || G > 1. ||
-            B < 0. || B > 1. )
-               throw Standard_OutOfRange("Color out");
-
-Quantity_Color AColor (R, G, B, Quantity_TOC_RGB);     // Couleur definie en RGB.
-
-       return (AColor.Name ());
-
-}
-
-Standard_Real Quantity_Color::Red () const {
-
-       return (Standard_Real (MyRed));
-
-}
-
-Standard_Real Quantity_Color::Green () const {
-
-       return (Standard_Real (MyGreen));
-
-}
-
-Standard_Real Quantity_Color::Blue () const {
-
-       return (Standard_Real (MyBlue));
-
-}
-
-Standard_Real Quantity_Color::Hue () const {
-
-Standard_ShortReal MyHue, MyLight, MySaturation;
-
-       Quantity_Color::rgbhls
-                       (MyRed, MyGreen, MyBlue, MyHue, MyLight, MySaturation);
-
-       return (Standard_Real (MyHue));
-
-}
-
-Standard_Real Quantity_Color::Light () const {
-
-Standard_ShortReal MyHue, MyLight, MySaturation;
-
-       Quantity_Color::rgbhls
-                       (MyRed, MyGreen, MyBlue, MyHue, MyLight, MySaturation);
-
-       return (Standard_Real (MyLight));
-
+  Quantity_ColorValidateRgbRange(theRgb.r(), theRgb.g(), theRgb.b());
 }
 
-Standard_Real Quantity_Color::Saturation () const {
-
-Standard_ShortReal MyHue, MyLight, MySaturation;
-
-       Quantity_Color::rgbhls
-                       (MyRed, MyGreen, MyBlue, MyHue, MyLight, MySaturation);
-
-       return (Standard_Real (MySaturation));
-
+// =======================================================================
+// function : ChangeContrast
+// purpose  :
+// =======================================================================
+void Quantity_Color::ChangeContrast (const Standard_Real theDelta)
+{
+  NCollection_Vec3<float> aHls = Convert_sRGB_To_HLS (myRgb);
+  aHls[2] += aHls[2] * Standard_ShortReal (theDelta) / 100.0f; // saturation
+  if (!((aHls[2] > 1.0f) || (aHls[2] < 0.0f)))
+  {
+    myRgb = Convert_HLS_To_sRGB (aHls);
+  }
 }
 
-void Quantity_Color::Values (Standard_Real& R1, Standard_Real& R2, Standard_Real& R3, const Quantity_TypeOfColor AType) const {
-
-
-       switch (AType) {
-
-               case Quantity_TOC_RGB :
-                       R1      = Standard_Real (MyRed);
-                       R2      = Standard_Real (MyGreen);
-                       R3      = Standard_Real (MyBlue);
-               break;
-
-               case Quantity_TOC_HLS :
-                     { Standard_ShortReal MyHue, MyLight, MySaturation;
-
-                       Quantity_Color::rgbhls
-                        (MyRed, MyGreen, MyBlue, MyHue, MyLight, MySaturation);
-
-                       R1      = Standard_Real (MyHue);
-                       R2      = Standard_Real (MyLight);
-                       R3      = Standard_Real (MySaturation);
-                     }
-               break;
-       }
-
+// =======================================================================
+// function : ChangeIntensity
+// purpose  :
+// =======================================================================
+void Quantity_Color::ChangeIntensity (const Standard_Real theDelta)
+{
+  NCollection_Vec3<float> aHls = Convert_sRGB_To_HLS (myRgb);
+  aHls[1] += aHls[1] * Standard_ShortReal (theDelta) / 100.0f; // light
+  if (!((aHls[1] > 1.0f) || (aHls[1] < 0.0f)))
+  {
+    myRgb = Convert_HLS_To_sRGB (aHls);
+  }
 }
 
-void Quantity_Color::RgbHls (const Standard_Real R, const Standard_Real G, const Standard_Real B, Standard_Real& H, Standard_Real& L, Standard_Real& S) {
-
-Standard_ShortReal HH, LL, SS;
-
-       call_rgbhls (Standard_ShortReal (R),
-                       Standard_ShortReal (G),
-                       Standard_ShortReal (B),
-                       HH, LL, SS);
-
-       H       = Standard_Real (HH);
-       L       = Standard_Real (LL);
-       S       = Standard_Real (SS);
-
+// =======================================================================
+// function : SetValues
+// purpose  :
+// =======================================================================
+void Quantity_Color::SetValues (const Standard_Real theR1, const Standard_Real theR2, const Standard_Real theR3,
+                                const Quantity_TypeOfColor theType)
+{
+  switch (theType)
+  {
+    case Quantity_TOC_RGB:
+    {
+      Quantity_ColorValidateRgbRange(theR1, theR2, theR3);
+      myRgb.SetValues (float(theR1), float(theR2), float(theR3));
+      break;
+    }
+    case Quantity_TOC_HLS:
+    {
+      Quantity_ColorValidateHlsRange(theR1, theR2, theR3);
+      myRgb = Convert_HLS_To_sRGB (NCollection_Vec3<float> (float(theR1), float(theR2), float(theR3)));
+      break;
+    }
+  }
 }
 
-void Quantity_Color::HlsRgb (const Standard_Real H, const Standard_Real L, const Standard_Real S, Standard_Real& R, Standard_Real& G, Standard_Real& B) {
-
-Standard_ShortReal RR, GG, BB;
-
-       call_hlsrgb (Standard_ShortReal (H),
-                       Standard_ShortReal (L),
-                       Standard_ShortReal (S),
-                       RR, GG, BB);
-
-       R       = Standard_Real (RR);
-       G       = Standard_Real (GG);
-       B       = Standard_Real (BB);
-
+// =======================================================================
+// function : Delta
+// purpose  :
+// =======================================================================
+void Quantity_Color::Delta (const Quantity_Color& theColor,
+                            Standard_Real& theDC,
+                            Standard_Real& theDI) const
+{
+  const NCollection_Vec3<float> aHls1 = Convert_sRGB_To_HLS (myRgb);
+  const NCollection_Vec3<float> aHls2 = Convert_sRGB_To_HLS (theColor.myRgb);
+  theDC = Standard_Real (aHls1[2] - aHls2[2]); // saturation
+  theDI = Standard_Real (aHls1[1] - aHls2[1]); // light
 }
 
-void Quantity_Color::rgbhls (const Standard_ShortReal R, const Standard_ShortReal G, const Standard_ShortReal B, Standard_ShortReal& H, Standard_ShortReal& L, Standard_ShortReal& S) {
-
-       call_rgbhls (R, G, B, H, L, S);
-
+// =======================================================================
+// function : Name
+// purpose  :
+// =======================================================================
+Quantity_NameOfColor Quantity_Color::Name() const
+{
+  Standard_ShortReal aDist2 = 4.0f;
+  Quantity_NameOfColor aResName = Quantity_NOC_BLACK;
+  for (Standard_Integer aColIter = Quantity_NOC_BLACK; aColIter <= Quantity_NOC_WHITE; ++aColIter)
+  {
+    const Standard_ShortReal aNewDist2 = (myRgb - THE_COLORS[aColIter].RgbValues).SquareModulus();
+    if (aNewDist2 < aDist2)
+    {
+      aResName = Quantity_NameOfColor (aColIter);
+      aDist2 = aNewDist2;
+      if (aNewDist2 == 0.0f)
+      {
+        break;
+      }
+    }
+  }
+  return aResName;
 }
 
-void Quantity_Color::hlsrgb (const Standard_ShortReal H, const Standard_ShortReal L, const Standard_ShortReal S, Standard_ShortReal& R, Standard_ShortReal& G, Standard_ShortReal& B) {
-
-       call_hlsrgb (H, L, S, R, G, B);
-
+// =======================================================================
+// function : Values
+// purpose  :
+// =======================================================================
+void Quantity_Color::Values (Standard_Real& theR1, Standard_Real& theR2, Standard_Real& theR3,
+                             const Quantity_TypeOfColor theType) const
+{
+  switch (theType)
+  {
+    case Quantity_TOC_RGB:
+    {
+      theR1 = myRgb.r();
+      theR2 = myRgb.g();
+      theR3 = myRgb.b();
+      break;
+    }
+    case Quantity_TOC_HLS:
+    {
+      const NCollection_Vec3<float> aHls = Convert_sRGB_To_HLS (myRgb);
+      theR1 = aHls[0];
+      theR2 = aHls[1];
+      theR3 = aHls[2];
+      break;
+    }
+  }
 }
 
-//=======================================================================
-//function : Color2argb
-//purpose  : 
-//=======================================================================
-
-void Quantity_Color::Color2argb (const Quantity_Color& theColor,
-                                 Standard_Integer& theARGB)
+// =======================================================================
+// function : Convert_HLS_To_sRGB
+// purpose  : Reference: La synthese d'images, Collection Hermes
+// =======================================================================
+NCollection_Vec3<float> Quantity_Color::Convert_HLS_To_sRGB (const NCollection_Vec3<float>& theHls)
 {
-  const Standard_Integer aColor[3] = {
-    static_cast<Standard_Integer> (255 * theColor.MyRed),
-    static_cast<Standard_Integer> (255 * theColor.MyGreen),
-    static_cast<Standard_Integer> (255 * theColor.MyBlue)
-  };
-  theARGB = (((aColor[0] & 0xff) << 16) |
-             ((aColor[1] & 0xff) << 8)  |
-             (aColor[2] & 0xff));
-}
+  float aHue = theHls[0];
+  const float aLight = theHls[1];
+  const float aSaturation = theHls[2];
+  if (aSaturation == 0.0f
+   && aHue == RGBHLS_H_UNDEFINED)
+  {
+    return NCollection_Vec3<float> (aLight, aLight, aLight);
+  }
 
-//=======================================================================
-//function : Argb2color
-//purpose  : 
-//=======================================================================
+  int aHueIndex = 0;
+  float lmuls = aLight * aSaturation;
+  if (aHue == 360.0f)
+  {
+    aHue = 0.0;
+    aHueIndex = 0;
+  }
+  else
+  {
+    aHue /= 60.0f;
+    aHueIndex = (int )aHue;
+  }
 
-void Quantity_Color::Argb2color (const Standard_Integer theARGB,
-                                 Quantity_Color& theColor)
-{
-  const Standard_Real aColor[3] = {
-    static_cast <Standard_Real> ((theARGB & 0xff0000) >> 16),
-    static_cast <Standard_Real> ((theARGB & 0x00ff00) >> 8),
-    static_cast <Standard_Real> ((theARGB & 0x0000ff))
-  };
-  theColor.SetValues(aColor[0] / 255.0, aColor[1] / 255.0, aColor[2] / 255.0,
-                     Quantity_TOC_RGB);
+  switch (aHueIndex)
+  {
+    case 0: return NCollection_Vec3<float> (aLight,
+                                            aLight - lmuls + lmuls * aHue,
+                                            aLight - lmuls);
+    case 1: return NCollection_Vec3<float> (aLight + lmuls - lmuls * aHue,
+                                            aLight,
+                                            aLight - lmuls);
+    case 2: return NCollection_Vec3<float> (aLight - lmuls,
+                                            aLight,
+                                            aLight - 3 * lmuls + lmuls * aHue);
+    case 3: return NCollection_Vec3<float> (aLight - lmuls,
+                                            aLight + 3 * lmuls - lmuls * aHue,
+                                            aLight);
+    case 4: return NCollection_Vec3<float> (aLight - 5 * lmuls + lmuls * aHue,
+                                            aLight - lmuls,
+                                            aLight);
+    case 5 : return NCollection_Vec3<float> (aLight,
+                                             aLight - lmuls,
+                                             aLight + 5 * lmuls - lmuls * aHue);
+  }
+  throw Standard_OutOfRange("Color out");
 }
 
-void Quantity_Color::ValuesOf (const Quantity_NameOfColor AName, const Quantity_TypeOfColor AType, Standard_ShortReal& R1, Standard_ShortReal& R2, Standard_ShortReal& R3) {
+// =======================================================================
+// function : Convert_sRGB_To_HLS
+// purpose  : Reference: La synthese d'images, Collection Hermes
+// =======================================================================
+NCollection_Vec3<float> Quantity_Color::Convert_sRGB_To_HLS (const NCollection_Vec3<float>& theRgb)
+{
+  float aPlus = 0.0f;
+  float aDiff = theRgb.g() - theRgb.b();
 
-Standard_ShortReal RR = 0 ;
-Standard_ShortReal RG = 0 ;
-Standard_ShortReal RB = 0 ;
+  // compute maximum from RGB components, which will be a luminance
+  float aMax = theRgb.r();
+  if (theRgb.g() > aMax) { aPlus = 2.0; aDiff = theRgb.b() - theRgb.r(); aMax = theRgb.g(); }
+  if (theRgb.b() > aMax) { aPlus = 4.0; aDiff = theRgb.r() - theRgb.g(); aMax = theRgb.b(); }
 
-switch (AName) {
+  // compute minimum from RGB components
+  float min = theRgb.r();
+  if (theRgb.g() < min) min = theRgb.g();
+  if (theRgb.b() < min) min = theRgb.b();
 
-       case Quantity_NOC_BLACK :
-               RR = R1 = 0.000000; RG = R2 = 0.000000; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_MATRAGRAY :
-               RR = R1 = (float ) 0.600000; RG = R2 = (float ) 0.600000; RB = R3 = (float ) 0.600000;
-       break;
-       case Quantity_NOC_MATRABLUE :
-               RR = R1 = 0.000000; RG = R2 = 0.000000; RB = R3 = 0.750000;
-       break;
-       case Quantity_NOC_ALICEBLUE :
-               RR = R1 = (float ) 0.941176; RG = R2 = (float ) 0.972549; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_ANTIQUEWHITE :
-               RR = R1 = (float ) 0.980392; RG = R2 = (float ) 0.921569; RB = R3 = (float ) 0.843137;
-       break;
-       case Quantity_NOC_ANTIQUEWHITE1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.937255; RB = R3 = (float ) 0.858824;
-       break;
-       case Quantity_NOC_ANTIQUEWHITE2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.874510; RB = R3 = (float ) 0.800000;
-       break;
-       case Quantity_NOC_ANTIQUEWHITE3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.752941; RB = R3 = (float ) 0.690196;
-       break;
-       case Quantity_NOC_ANTIQUEWHITE4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.513725; RB = R3 = (float ) 0.470588;
-       break;
-       case Quantity_NOC_AQUAMARINE1 :
-               RR = R1 = (float ) 0.498039; RG = R2 = 1.000000; RB = R3 = (float ) 0.831373;
-       break;
-       case Quantity_NOC_AQUAMARINE2 :
-               RR = R1 = (float ) 0.462745; RG = R2 = (float ) 0.933333; RB = R3 = (float ) 0.776471;
-       break;
-       case Quantity_NOC_AQUAMARINE4 :
-               RR = R1 = (float ) 0.270588; RG = R2 = (float ) 0.545098; RB = R3 = (float ) 0.454902;
-       break;
-       case Quantity_NOC_AZURE :
-               RR = R1 = (float ) 0.941176; RG = R2 = 1.000000; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_AZURE2 :
-               RR = R1 = (float ) 0.878431; RG = R2 = (float ) 0.933333; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_AZURE3 :
-               RR = R1 = (float ) 0.756863; RG = R2 = (float ) 0.803922; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_AZURE4 :
-               RR = R1 = (float ) 0.513725; RG = R2 = (float ) 0.545098; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_BEIGE :
-               RR = R1 = (float ) 0.960784; RG = R2 = (float ) 0.960784; RB = R3 = (float ) 0.862745;
-       break;
-       case Quantity_NOC_BISQUE :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.894118; RB = R3 = (float ) 0.768627;
-       break;
-       case Quantity_NOC_BISQUE2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.835294; RB = R3 = (float ) 0.717647;
-       break;
-       case Quantity_NOC_BISQUE3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.717647; RB = R3 = (float ) 0.619608;
-       break;
-       case Quantity_NOC_BISQUE4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.490196; RB = R3 = (float ) 0.419608;
-       break;
-       case Quantity_NOC_BLANCHEDALMOND :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.921569; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_BLUE1 :
-               RR = R1 = 0.000000; RG = R2 = 0.000000; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_BLUE2 :
-               RR = R1 = 0.000000; RG = R2 = 0.000000; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_BLUE3 :
-               RR = R1 = 0.000000; RG = R2 = 0.000000; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_BLUE4 :
-               RR = R1 = 0.000000; RG = R2 = 0.000000; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_BLUEVIOLET :
-               RR = R1 = (float ) 0.541176; RG = R2 = (float ) 0.168627; RB = R3 = (float ) 0.886275;
-       break;
-       case Quantity_NOC_BROWN :
-               RR = R1 = (float ) 0.647059; RG = R2 = (float ) 0.164706; RB = R3 = (float ) 0.164706;
-       break;
-       case Quantity_NOC_BROWN1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.250980; RB = R3 = (float ) 0.250980;
-       break;
-       case Quantity_NOC_BROWN2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.231373; RB = R3 = (float ) 0.231373;
-       break;
-       case Quantity_NOC_BROWN3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.200000; RB = R3 = (float ) 0.200000;
-       break;
-       case Quantity_NOC_BROWN4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.137255; RB = R3 = (float ) 0.137255;
-       break;
-       case Quantity_NOC_BURLYWOOD :
-               RR = R1 = (float ) 0.870588; RG = R2 = (float ) 0.721569; RB = R3 = (float ) 0.529412;
-       break;
-       case Quantity_NOC_BURLYWOOD1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.827451; RB = R3 = (float ) 0.607843;
-       break;
-       case Quantity_NOC_BURLYWOOD2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.772549; RB = R3 = (float ) 0.568627;
-       break;
-       case Quantity_NOC_BURLYWOOD3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.666667; RB = R3 = (float ) 0.490196;
-       break;
-       case Quantity_NOC_BURLYWOOD4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.450980; RB = R3 = (float ) 0.333333;
-       break;
-       case Quantity_NOC_CADETBLUE :
-               RR = R1 = (float ) 0.372549; RG = R2 = (float ) 0.619608; RB = R3 = (float ) 0.627451;
-       break;
-       case Quantity_NOC_CADETBLUE1 :
-               RR = R1 = (float ) 0.596078; RG = R2 = (float ) 0.960784; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_CADETBLUE2 :
-               RR = R1 = (float ) 0.556863; RG = R2 = (float ) 0.898039; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_CADETBLUE3 :
-               RR = R1 = (float ) 0.478431; RG = R2 = (float ) 0.772549; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_CADETBLUE4 :
-               RR = R1 = (float ) 0.325490; RG = R2 = (float ) 0.525490; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_CHARTREUSE :
-               RR = R1 = (float ) 0.498039; RG = R2 = 1.000000; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_CHARTREUSE1 :
-               RR = R1 = (float ) 0.498039; RG = R2 = 1.000000; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_CHARTREUSE2 :
-               RR = R1 = (float ) 0.462745; RG = R2 = (float ) 0.933333; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_CHARTREUSE3 :
-               RR = R1 = (float ) 0.400000; RG = R2 = (float ) 0.803922; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_CHARTREUSE4 :
-               RR = R1 = (float ) 0.270588; RG = R2 = (float ) 0.545098; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_CHOCOLATE :
-               RR = R1 = (float ) 0.823529; RG = R2 = (float ) 0.411765; RB = R3 = (float ) 0.117647;
-       break;
-       case Quantity_NOC_CHOCOLATE1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.498039; RB = R3 = (float ) 0.141176;
-       break;
-       case Quantity_NOC_CHOCOLATE2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.462745; RB = R3 = (float ) 0.129412;
-       break;
-       case Quantity_NOC_CHOCOLATE3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.400000; RB = R3 = (float ) 0.113725;
-       break;
-       case Quantity_NOC_CHOCOLATE4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.270588; RB = R3 = (float ) 0.074510;
-       break;
-       case Quantity_NOC_CORAL :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.498039; RB = R3 = (float ) 0.313725;
-       break;
-       case Quantity_NOC_CORAL1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.447059; RB = R3 = (float ) 0.337255;
-       break;
-       case Quantity_NOC_CORAL2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.415686; RB = R3 = (float ) 0.313725;
-       break;
-       case Quantity_NOC_CORAL3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.356863; RB = R3 = (float ) 0.270588;
-       break;
-       case Quantity_NOC_CORAL4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.243137; RB = R3 = (float ) 0.184314;
-       break;
-       case Quantity_NOC_CORNFLOWERBLUE :
-               RR = R1 = (float ) 0.392157; RG = R2 = (float ) 0.584314; RB = R3 = (float ) 0.929412;
-       break;
-       case Quantity_NOC_CORNSILK1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.972549; RB = R3 = (float ) 0.862745;
-       break;
-       case Quantity_NOC_CORNSILK2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.909804; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_CORNSILK3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.784314; RB = R3 = (float ) 0.694118;
-       break;
-       case Quantity_NOC_CORNSILK4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.533333; RB = R3 = (float ) 0.470588;
-       break;
-       case Quantity_NOC_CYAN1 :
-               RR = R1 = 0.000000; RG = R2 = 1.000000; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_CYAN2 :
-               RR = R1 = 0.000000; RG = R2 = (float ) 0.933333; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_CYAN3 :
-               RR = R1 = 0.000000; RG = R2 = (float ) 0.803922; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_CYAN4 :
-               RR = R1 = 0.000000; RG = R2 = (float ) 0.545098; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_DARKGOLDENROD :
-               RR = R1 = (float ) 0.721569; RG = R2 = (float ) 0.525490; RB = R3 = (float ) 0.043137;
-       break;
-       case Quantity_NOC_DARKGOLDENROD1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.725490; RB = R3 = (float ) 0.058824;
-       break;
-       case Quantity_NOC_DARKGOLDENROD2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.678431; RB = R3 = (float ) 0.054902;
-       break;
-       case Quantity_NOC_DARKGOLDENROD3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.584314; RB = R3 = (float ) 0.047059;
-       break;
-       case Quantity_NOC_DARKGOLDENROD4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.396078; RB = R3 = (float ) 0.031373;
-       break;
-       case Quantity_NOC_DARKGREEN :
-               RR = R1 = 0.000000; RG = R2 = (float ) 0.392157; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_DARKKHAKI :
-               RR = R1 = (float ) 0.741176; RG = R2 = (float ) 0.717647; RB = R3 = (float ) 0.419608;
-       break;
-       case Quantity_NOC_DARKOLIVEGREEN :
-               RR = R1 = (float ) 0.333333; RG = R2 = (float ) 0.419608; RB = R3 = (float ) 0.184314;
-       break;
-       case Quantity_NOC_DARKOLIVEGREEN1 :
-               RR = R1 = (float ) 0.792157; RG = R2 = 1.000000; RB = R3 = (float ) 0.439216;
-       break;
-       case Quantity_NOC_DARKOLIVEGREEN2 :
-               RR = R1 = (float ) 0.737255; RG = R2 = (float ) 0.933333; RB = R3 = (float ) 0.407843;
-       break;
-       case Quantity_NOC_DARKOLIVEGREEN3 :
-               RR = R1 = (float ) 0.635294; RG = R2 = (float ) 0.803922; RB = R3 = (float ) 0.352941;
-       break;
-       case Quantity_NOC_DARKOLIVEGREEN4 :
-               RR = R1 = (float ) 0.431373; RG = R2 = (float ) 0.545098; RB = R3 = (float ) 0.239216;
-       break;
-       case Quantity_NOC_DARKORANGE :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.549020; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_DARKORANGE1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.498039; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_DARKORANGE2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.462745; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_DARKORANGE3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.400000; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_DARKORANGE4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.270588; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_DARKORCHID :
-               RR = R1 = (float ) 0.600000; RG = R2 = (float ) 0.196078; RB = R3 = (float ) 0.800000;
-       break;
-       case Quantity_NOC_DARKORCHID1 :
-               RR = R1 = (float ) 0.749020; RG = R2 = (float ) 0.243137; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_DARKORCHID2 :
-               RR = R1 = (float ) 0.698039; RG = R2 = (float ) 0.227451; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_DARKORCHID3 :
-               RR = R1 = (float ) 0.603922; RG = R2 = (float ) 0.196078; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_DARKORCHID4 :
-               RR = R1 = (float ) 0.407843; RG = R2 = (float ) 0.133333; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_DARKSALMON :
-               RR = R1 = (float ) 0.913725; RG = R2 = (float ) 0.588235; RB = R3 = (float ) 0.478431;
-       break;
-       case Quantity_NOC_DARKSEAGREEN :
-               RR = R1 = (float ) 0.560784; RG = R2 = (float ) 0.737255; RB = R3 = (float ) 0.560784;
-       break;
-       case Quantity_NOC_DARKSEAGREEN1 :
-               RR = R1 = (float ) 0.756863; RG = R2 = 1.000000; RB = R3 = (float ) 0.756863;
-       break;
-       case Quantity_NOC_DARKSEAGREEN2 :
-               RR = R1 = (float ) 0.705882; RG = R2 = (float ) 0.933333; RB = R3 = (float ) 0.705882;
-       break;
-       case Quantity_NOC_DARKSEAGREEN3 :
-               RR = R1 = (float ) 0.607843; RG = R2 = (float ) 0.803922; RB = R3 = (float ) 0.607843;
-       break;
-       case Quantity_NOC_DARKSEAGREEN4 :
-               RR = R1 = (float ) 0.411765; RG = R2 = (float ) 0.545098; RB = R3 = (float ) 0.411765;
-       break;
-       case Quantity_NOC_DARKSLATEBLUE :
-               RR = R1 = (float ) 0.282353; RG = R2 = (float ) 0.239216; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_DARKSLATEGRAY1 :
-               RR = R1 = (float ) 0.592157; RG = R2 = 1.000000; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_DARKSLATEGRAY2 :
-               RR = R1 = (float ) 0.552941; RG = R2 = (float ) 0.933333; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_DARKSLATEGRAY3 :
-               RR = R1 = (float ) 0.474510; RG = R2 = (float ) 0.803922; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_DARKSLATEGRAY4 :
-               RR = R1 = (float ) 0.321569; RG = R2 = (float ) 0.545098; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_DARKSLATEGRAY :
-               RR = R1 = (float ) 0.184314; RG = R2 = (float ) 0.309804; RB = R3 = (float ) 0.309804;
-       break;
-       case Quantity_NOC_DARKTURQUOISE :
-               RR = R1 = 0.000000; RG = R2 = (float ) 0.807843; RB = R3 = (float ) 0.819608;
-       break;
-       case Quantity_NOC_DARKVIOLET :
-               RR = R1 = (float ) 0.580392; RG = R2 = 0.000000; RB = R3 = (float ) 0.827451;
-       break;
-       case Quantity_NOC_DEEPPINK :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.078431; RB = R3 = (float ) 0.576471;
-       break;
-       case Quantity_NOC_DEEPPINK2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.070588; RB = R3 = (float ) 0.537255;
-       break;
-       case Quantity_NOC_DEEPPINK3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.062745; RB = R3 = (float ) 0.462745;
-       break;
-       case Quantity_NOC_DEEPPINK4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.039216; RB = R3 = (float ) 0.313725;
-       break;
-       case Quantity_NOC_DEEPSKYBLUE1 :
-               RR = R1 = 0.000000; RG = R2 = (float ) 0.749020; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_DEEPSKYBLUE2 :
-               RR = R1 = 0.000000; RG = R2 = (float ) 0.698039; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_DEEPSKYBLUE3 :
-               RR = R1 = 0.000000; RG = R2 = (float ) 0.603922; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_DEEPSKYBLUE4 :
-               RR = R1 = 0.000000; RG = R2 = (float ) 0.407843; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_DODGERBLUE1 :
-               RR = R1 = (float ) 0.117647; RG = R2 = (float ) 0.564706; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_DODGERBLUE2 :
-               RR = R1 = (float ) 0.109804; RG = R2 = (float ) 0.525490; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_DODGERBLUE3 :
-               RR = R1 = (float ) 0.094118; RG = R2 = (float ) 0.454902; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_DODGERBLUE4 :
-               RR = R1 = (float ) 0.062745; RG = R2 = (float ) 0.305882; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_FIREBRICK :
-               RR = R1 = (float ) 0.698039; RG = R2 = (float ) 0.133333; RB = R3 = (float ) 0.133333;
-       break;
-       case Quantity_NOC_FIREBRICK1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.188235; RB = R3 = (float ) 0.188235;
-       break;
-       case Quantity_NOC_FIREBRICK2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.172549; RB = R3 = (float ) 0.172549;
-       break;
-       case Quantity_NOC_FIREBRICK3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.149020; RB = R3 = (float ) 0.149020;
-       break;
-       case Quantity_NOC_FIREBRICK4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.101961; RB = R3 = (float ) 0.101961;
-       break;
-       case Quantity_NOC_FLORALWHITE :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.980392; RB = R3 = (float ) 0.941176;
-       break;
-       case Quantity_NOC_FORESTGREEN :
-               RR = R1 = (float ) 0.133333; RG = R2 = (float ) 0.545098; RB = R3 = (float ) 0.133333;
-       break;
-       case Quantity_NOC_GAINSBORO :
-               RR = R1 = (float ) 0.862745; RG = R2 = (float ) 0.862745; RB = R3 = (float ) 0.862745;
-       break;
-       case Quantity_NOC_GHOSTWHITE :
-               RR = R1 = (float ) 0.972549; RG = R2 = (float ) 0.972549; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_GOLD :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.843137; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_GOLD1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.843137; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_GOLD2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.788235; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_GOLD3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.678431; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_GOLD4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.458824; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_GOLDENROD :
-               RR = R1 = (float ) 0.854902; RG = R2 = (float ) 0.647059; RB = R3 = (float ) 0.125490;
-       break;
-       case Quantity_NOC_GOLDENROD1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.756863; RB = R3 = (float ) 0.145098;
-       break;
-       case Quantity_NOC_GOLDENROD2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.705882; RB = R3 = (float ) 0.133333;
-       break;
-       case Quantity_NOC_GOLDENROD3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.607843; RB = R3 = (float ) 0.113725;
-       break;
-       case Quantity_NOC_GOLDENROD4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.411765; RB = R3 = (float ) 0.078431;
-       break;
-       case Quantity_NOC_GRAY :
-               RR = R1 = (float ) 0.752941; RG = R2 = (float ) 0.752941; RB = R3 = (float ) 0.752941;
-       break;
-       case Quantity_NOC_GRAY0 :
-               RR = R1 = 0.000000; RG = R2 = 0.000000; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_GRAY1 :
-               RR = R1 = (float ) 0.011765; RG = R2 = (float ) 0.011765; RB = R3 = (float ) 0.011765;
-       break;
-       case Quantity_NOC_GRAY10 :
-               RR = R1 = (float ) 0.101961; RG = R2 = (float ) 0.101961; RB = R3 = (float ) 0.101961;
-       break;
-       case Quantity_NOC_GRAY11 :
-               RR = R1 = (float ) 0.109804; RG = R2 = (float ) 0.109804; RB = R3 = (float ) 0.109804;
-       break;
-       case Quantity_NOC_GRAY12 :
-               RR = R1 = (float ) 0.121569; RG = R2 = (float ) 0.121569; RB = R3 = (float ) 0.121569;
-       break;
-       case Quantity_NOC_GRAY13 :
-               RR = R1 = (float ) 0.129412; RG = R2 = (float ) 0.129412; RB = R3 = (float ) 0.129412;
-       break;
-       case Quantity_NOC_GRAY14 :
-               RR = R1 = (float ) 0.141176; RG = R2 = (float ) 0.141176; RB = R3 = (float ) 0.141176;
-       break;
-       case Quantity_NOC_GRAY15 :
-               RR = R1 = (float ) 0.149020; RG = R2 = (float ) 0.149020; RB = R3 = (float ) 0.149020;
-       break;
-       case Quantity_NOC_GRAY16 :
-               RR = R1 = (float ) 0.160784; RG = R2 = (float ) 0.160784; RB = R3 = (float ) 0.160784;
-       break;
-       case Quantity_NOC_GRAY17 :
-               RR = R1 = (float ) 0.168627; RG = R2 = (float ) 0.168627; RB = R3 = (float ) 0.168627;
-       break;
-       case Quantity_NOC_GRAY18 :
-               RR = R1 = (float ) 0.180392; RG = R2 = (float ) 0.180392; RB = R3 = (float ) 0.180392;
-       break;
-       case Quantity_NOC_GRAY19 :
-               RR = R1 = (float ) 0.188235; RG = R2 = (float ) 0.188235; RB = R3 = (float ) 0.188235;
-       break;
-       case Quantity_NOC_GRAY2 :
-               RR = R1 = (float ) 0.019608; RG = R2 = (float ) 0.019608; RB = R3 = (float ) 0.019608;
-       break;
-       case Quantity_NOC_GRAY20 :
-               RR = R1 = (float ) 0.200000; RG = R2 = (float ) 0.200000; RB = R3 = (float ) 0.200000;
-       break;
-       case Quantity_NOC_GRAY21 :
-               RR = R1 = (float ) 0.211765; RG = R2 = (float ) 0.211765; RB = R3 = (float ) 0.211765;
-       break;
-       case Quantity_NOC_GRAY22 :
-               RR = R1 = (float ) 0.219608; RG = R2 = (float ) 0.219608; RB = R3 = (float ) 0.219608;
-       break;
-       case Quantity_NOC_GRAY23 :
-               RR = R1 = (float ) 0.231373; RG = R2 = (float ) 0.231373; RB = R3 = (float ) 0.231373;
-       break;
-       case Quantity_NOC_GRAY24 :
-               RR = R1 = (float ) 0.239216; RG = R2 = (float ) 0.239216; RB = R3 = (float ) 0.239216;
-       break;
-       case Quantity_NOC_GRAY25 :
-               RR = R1 = (float ) 0.250980; RG = R2 = (float ) 0.250980; RB = R3 = (float ) 0.250980;
-       break;
-       case Quantity_NOC_GRAY26 :
-               RR = R1 = (float ) 0.258824; RG = R2 = (float ) 0.258824; RB = R3 = (float ) 0.258824;
-       break;
-       case Quantity_NOC_GRAY27 :
-               RR = R1 = (float ) 0.270588; RG = R2 = (float ) 0.270588; RB = R3 = (float ) 0.270588;
-       break;
-       case Quantity_NOC_GRAY28 :
-               RR = R1 = (float ) 0.278431; RG = R2 = (float ) 0.278431; RB = R3 = (float ) 0.278431;
-       break;
-       case Quantity_NOC_GRAY29 :
-               RR = R1 = (float ) 0.290196; RG = R2 = (float ) 0.290196; RB = R3 = (float ) 0.290196;
-       break;
-       case Quantity_NOC_GRAY3 :
-               RR = R1 = (float ) 0.031373; RG = R2 = (float ) 0.031373; RB = R3 = (float ) 0.031373;
-       break;
-       case Quantity_NOC_GRAY30 :
-               RR = R1 = (float ) 0.301961; RG = R2 = (float ) 0.301961; RB = R3 = (float ) 0.301961;
-       break;
-       case Quantity_NOC_GRAY31 :
-               RR = R1 = (float ) 0.309804; RG = R2 = (float ) 0.309804; RB = R3 = (float ) 0.309804;
-       break;
-       case Quantity_NOC_GRAY32 :
-               RR = R1 = (float ) 0.321569; RG = R2 = (float ) 0.321569; RB = R3 = (float ) 0.321569;
-       break;
-       case Quantity_NOC_GRAY33 :
-               RR = R1 = (float ) 0.329412; RG = R2 = (float ) 0.329412; RB = R3 = (float ) 0.329412;
-       break;
-       case Quantity_NOC_GRAY34 :
-               RR = R1 = (float ) 0.341176; RG = R2 = (float ) 0.341176; RB = R3 = (float ) 0.341176;
-       break;
-       case Quantity_NOC_GRAY35 :
-               RR = R1 = (float ) 0.349020; RG = R2 = (float ) 0.349020; RB = R3 = (float ) 0.349020;
-       break;
-       case Quantity_NOC_GRAY36 :
-               RR = R1 = (float ) 0.360784; RG = R2 = (float ) 0.360784; RB = R3 = (float ) 0.360784;
-       break;
-       case Quantity_NOC_GRAY37 :
-               RR = R1 = (float ) 0.368627; RG = R2 = (float ) 0.368627; RB = R3 = (float ) 0.368627;
-       break;
-       case Quantity_NOC_GRAY38 :
-               RR = R1 = (float ) 0.380392; RG = R2 = (float ) 0.380392; RB = R3 = (float ) 0.380392;
-       break;
-       case Quantity_NOC_GRAY39 :
-               RR = R1 = (float ) 0.388235; RG = R2 = (float ) 0.388235; RB = R3 = (float ) 0.388235;
-       break;
-       case Quantity_NOC_GRAY4 :
-               RR = R1 = (float ) 0.039216; RG = R2 = (float ) 0.039216; RB = R3 = (float ) 0.039216;
-       break;
-       case Quantity_NOC_GRAY40 :
-               RR = R1 = (float ) 0.400000; RG = R2 = (float ) 0.400000; RB = R3 = (float ) 0.400000;
-       break;
-       case Quantity_NOC_GRAY41 :
-               RR = R1 = (float ) 0.411765; RG = R2 = (float ) 0.411765; RB = R3 = (float ) 0.411765;
-       break;
-       case Quantity_NOC_GRAY42 :
-               RR = R1 = (float ) 0.419608; RG = R2 = (float ) 0.419608; RB = R3 = (float ) 0.419608;
-       break;
-       case Quantity_NOC_GRAY43 :
-               RR = R1 = (float ) 0.431373; RG = R2 = (float ) 0.431373; RB = R3 = (float ) 0.431373;
-       break;
-       case Quantity_NOC_GRAY44 :
-               RR = R1 = (float ) 0.439216; RG = R2 = (float ) 0.439216; RB = R3 = (float ) 0.439216;
-       break;
-       case Quantity_NOC_GRAY45 :
-               RR = R1 = (float ) 0.450980; RG = R2 = (float ) 0.450980; RB = R3 = (float ) 0.450980;
-       break;
-       case Quantity_NOC_GRAY46 :
-               RR = R1 = (float ) 0.458824; RG = R2 = (float ) 0.458824; RB = R3 = (float ) 0.458824;
-       break;
-       case Quantity_NOC_GRAY47 :
-               RR = R1 = (float ) 0.470588; RG = R2 = (float ) 0.470588; RB = R3 = (float ) 0.470588;
-       break;
-       case Quantity_NOC_GRAY48 :
-               RR = R1 = (float ) 0.478431; RG = R2 = (float ) 0.478431; RB = R3 = (float ) 0.478431;
-       break;
-       case Quantity_NOC_GRAY49 :
-               RR = R1 = (float ) 0.490196; RG = R2 = (float ) 0.490196; RB = R3 = (float ) 0.490196;
-       break;
-       case Quantity_NOC_GRAY5 :
-               RR = R1 = (float ) 0.050980; RG = R2 = (float ) 0.050980; RB = R3 = (float ) 0.050980;
-       break;
-       case Quantity_NOC_GRAY50 :
-               RR = R1 = (float ) 0.498039; RG = R2 = (float ) 0.498039; RB = R3 = (float ) 0.498039;
-       break;
-       case Quantity_NOC_GRAY51 :
-               RR = R1 = (float ) 0.509804; RG = R2 = (float ) 0.509804; RB = R3 = (float ) 0.509804;
-       break;
-       case Quantity_NOC_GRAY52 :
-               RR = R1 = (float ) 0.521569; RG = R2 = (float ) 0.521569; RB = R3 = (float ) 0.521569;
-       break;
-       case Quantity_NOC_GRAY53 :
-               RR = R1 = (float ) 0.529412; RG = R2 = (float ) 0.529412; RB = R3 = (float ) 0.529412;
-       break;
-       case Quantity_NOC_GRAY54 :
-               RR = R1 = (float ) 0.541176; RG = R2 = (float ) 0.541176; RB = R3 = (float ) 0.541176;
-       break;
-       case Quantity_NOC_GRAY55 :
-               RR = R1 = (float ) 0.549020; RG = R2 = (float ) 0.549020; RB = R3 = (float ) 0.549020;
-       break;
-       case Quantity_NOC_GRAY56 :
-               RR = R1 = (float ) 0.560784; RG = R2 = (float ) 0.560784; RB = R3 = (float ) 0.560784;
-       break;
-       case Quantity_NOC_GRAY57 :
-               RR = R1 = (float ) 0.568627; RG = R2 = (float ) 0.568627; RB = R3 = (float ) 0.568627;
-       break;
-       case Quantity_NOC_GRAY58 :
-               RR = R1 = (float ) 0.580392; RG = R2 = (float ) 0.580392; RB = R3 = (float ) 0.580392;
-       break;
-       case Quantity_NOC_GRAY59 :
-               RR = R1 = (float ) 0.588235; RG = R2 = (float ) 0.588235; RB = R3 = (float ) 0.588235;
-       break;
-       case Quantity_NOC_GRAY6 :
-               RR = R1 = (float ) 0.058824; RG = R2 = (float ) 0.058824; RB = R3 = (float ) 0.058824;
-       break;
-       case Quantity_NOC_GRAY60 :
-               RR = R1 = (float ) 0.600000; RG = R2 = (float ) 0.600000; RB = R3 = (float ) 0.600000;
-       break;
-       case Quantity_NOC_GRAY61 :
-               RR = R1 = (float ) 0.611765; RG = R2 = (float ) 0.611765; RB = R3 = (float ) 0.611765;
-       break;
-       case Quantity_NOC_GRAY62 :
-               RR = R1 = (float ) 0.619608; RG = R2 = (float ) 0.619608; RB = R3 = (float ) 0.619608;
-       break;
-       case Quantity_NOC_GRAY63 :
-               RR = R1 = (float ) 0.631373; RG = R2 = (float ) 0.631373; RB = R3 = (float ) 0.631373;
-       break;
-       case Quantity_NOC_GRAY64 :
-               RR = R1 = (float ) 0.639216; RG = R2 = (float ) 0.639216; RB = R3 = (float ) 0.639216;
-       break;
-       case Quantity_NOC_GRAY65 :
-               RR = R1 = (float ) 0.650980; RG = R2 = (float ) 0.650980; RB = R3 = (float ) 0.650980;
-       break;
-       case Quantity_NOC_GRAY66 :
-               RR = R1 = (float ) 0.658824; RG = R2 = (float ) 0.658824; RB = R3 = (float ) 0.658824;
-       break;
-       case Quantity_NOC_GRAY67 :
-               RR = R1 = (float ) 0.670588; RG = R2 = (float ) 0.670588; RB = R3 = (float ) 0.670588;
-       break;
-       case Quantity_NOC_GRAY68 :
-               RR = R1 = (float ) 0.678431; RG = R2 = (float ) 0.678431; RB = R3 = (float ) 0.678431;
-       break;
-       case Quantity_NOC_GRAY69 :
-               RR = R1 = (float ) 0.690196; RG = R2 = (float ) 0.690196; RB = R3 = (float ) 0.690196;
-       break;
-       case Quantity_NOC_GRAY7 :
-               RR = R1 = (float ) 0.070588; RG = R2 = (float ) 0.070588; RB = R3 = (float ) 0.070588;
-       break;
-       case Quantity_NOC_GRAY70 :
-               RR = R1 = (float ) 0.701961; RG = R2 = (float ) 0.701961; RB = R3 = (float ) 0.701961;
-       break;
-       case Quantity_NOC_GRAY71 :
-               RR = R1 = (float ) 0.709804; RG = R2 = (float ) 0.709804; RB = R3 = (float ) 0.709804;
-       break;
-       case Quantity_NOC_GRAY72 :
-               RR = R1 = (float ) 0.721569; RG = R2 = (float ) 0.721569; RB = R3 = (float ) 0.721569;
-       break;
-       case Quantity_NOC_GRAY73 :
-               RR = R1 = (float ) 0.729412; RG = R2 = (float ) 0.729412; RB = R3 = (float ) 0.729412;
-       break;
-       case Quantity_NOC_GRAY74 :
-               RR = R1 = (float ) 0.741176; RG = R2 = (float ) 0.741176; RB = R3 = (float ) 0.741176;
-       break;
-       case Quantity_NOC_GRAY75 :
-               RR = R1 = (float ) 0.749020; RG = R2 = (float ) 0.749020; RB = R3 = (float ) 0.749020;
-       break;
-       case Quantity_NOC_GRAY76 :
-               RR = R1 = (float ) 0.760784; RG = R2 = (float ) 0.760784; RB = R3 = (float ) 0.760784;
-       break;
-       case Quantity_NOC_GRAY77 :
-               RR = R1 = (float ) 0.768627; RG = R2 = (float ) 0.768627; RB = R3 = (float ) 0.768627;
-       break;
-       case Quantity_NOC_GRAY78 :
-               RR = R1 = (float ) 0.780392; RG = R2 = (float ) 0.780392; RB = R3 = (float ) 0.780392;
-       break;
-       case Quantity_NOC_GRAY79 :
-               RR = R1 = (float ) 0.788235; RG = R2 = (float ) 0.788235; RB = R3 = (float ) 0.788235;
-       break;
-       case Quantity_NOC_GRAY8 :
-               RR = R1 = (float ) 0.078431; RG = R2 = (float ) 0.078431; RB = R3 = (float ) 0.078431;
-       break;
-       case Quantity_NOC_GRAY80 :
-               RR = R1 = (float ) 0.800000; RG = R2 = (float ) 0.800000; RB = R3 = (float ) 0.800000;
-       break;
-       case Quantity_NOC_GRAY81 :
-               RR = R1 = (float ) 0.811765; RG = R2 = (float ) 0.811765; RB = R3 = (float ) 0.811765;
-       break;
-       case Quantity_NOC_GRAY82 :
-               RR = R1 = (float ) 0.819608; RG = R2 = (float ) 0.819608; RB = R3 = (float ) 0.819608;
-       break;
-       case Quantity_NOC_GRAY83 :
-               RR = R1 = (float ) 0.831373; RG = R2 = (float ) 0.831373; RB = R3 = (float ) 0.831373;
-       break;
-       case Quantity_NOC_GRAY85 :
-               RR = R1 = (float ) 0.850980; RG = R2 = (float ) 0.850980; RB = R3 = (float ) 0.850980;
-       break;
-       case Quantity_NOC_GRAY86 :
-               RR = R1 = (float ) 0.858824; RG = R2 = (float ) 0.858824; RB = R3 = (float ) 0.858824;
-       break;
-       case Quantity_NOC_GRAY87 :
-               RR = R1 = (float ) 0.870588; RG = R2 = (float ) 0.870588; RB = R3 = (float ) 0.870588;
-       break;
-       case Quantity_NOC_GRAY88 :
-               RR = R1 = (float ) 0.878431; RG = R2 = (float ) 0.878431; RB = R3 = (float ) 0.878431;
-       break;
-       case Quantity_NOC_GRAY89 :
-               RR = R1 = (float ) 0.890196; RG = R2 = (float ) 0.890196; RB = R3 = (float ) 0.890196;
-       break;
-       case Quantity_NOC_GRAY9 :
-               RR = R1 = (float ) 0.090196; RG = R2 = (float ) 0.090196; RB = R3 = (float ) 0.090196;
-       break;
-       case Quantity_NOC_GRAY90 :
-               RR = R1 = (float ) 0.898039; RG = R2 = (float ) 0.898039; RB = R3 = (float ) 0.898039;
-       break;
-       case Quantity_NOC_GRAY91 :
-               RR = R1 = (float ) 0.909804; RG = R2 = (float ) 0.909804; RB = R3 = (float ) 0.909804;
-       break;
-       case Quantity_NOC_GRAY92 :
-               RR = R1 = (float ) 0.921569; RG = R2 = (float ) 0.921569; RB = R3 = (float ) 0.921569;
-       break;
-       case Quantity_NOC_GRAY93 :
-               RR = R1 = (float ) 0.929412; RG = R2 = (float ) 0.929412; RB = R3 = (float ) 0.929412;
-       break;
-       case Quantity_NOC_GRAY94 :
-               RR = R1 = (float ) 0.941176; RG = R2 = (float ) 0.941176; RB = R3 = (float ) 0.941176;
-       break;
-       case Quantity_NOC_GRAY95 :
-               RR = R1 = (float ) 0.949020; RG = R2 = (float ) 0.949020; RB = R3 = (float ) 0.949020;
-       break;
-       case Quantity_NOC_GREEN :
-               RR = R1 = 0.000000; RG = R2 = 1.000000; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_GREEN1 :
-               RR = R1 = 0.000000; RG = R2 = 1.000000; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_GREEN2 :
-               RR = R1 = 0.000000; RG = R2 = (float ) 0.933333; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_GREEN3 :
-               RR = R1 = 0.000000; RG = R2 = (float ) 0.803922; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_GREEN4 :
-               RR = R1 = 0.000000; RG = R2 = (float ) 0.545098; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_GREENYELLOW :
-               RR = R1 = (float ) 0.678431; RG = R2 = 1.000000; RB = R3 = (float ) 0.184314;
-       break;
-       case Quantity_NOC_GRAY97 :
-               RR = R1 = (float ) 0.968627; RG = R2 = (float ) 0.968627; RB = R3 = (float ) 0.968627;
-       break;
-       case Quantity_NOC_GRAY98 :
-               RR = R1 = (float ) 0.980392; RG = R2 = (float ) 0.980392; RB = R3 = (float ) 0.980392;
-       break;
-       case Quantity_NOC_GRAY99 :
-               RR = R1 = (float ) 0.988235; RG = R2 = (float ) 0.988235; RB = R3 = (float ) 0.988235;
-       break;
-       case Quantity_NOC_HONEYDEW :
-               RR = R1 = (float ) 0.941176; RG = R2 = 1.000000; RB = R3 = (float ) 0.941176;
-       break;
-       case Quantity_NOC_HONEYDEW2 :
-               RR = R1 = (float ) 0.878431; RG = R2 = (float ) 0.933333; RB = R3 = (float ) 0.878431;
-       break;
-       case Quantity_NOC_HONEYDEW3 :
-               RR = R1 = (float ) 0.756863; RG = R2 = (float ) 0.803922; RB = R3 = (float ) 0.756863;
-       break;
-       case Quantity_NOC_HONEYDEW4 :
-               RR = R1 = (float ) 0.513725; RG = R2 = (float ) 0.545098; RB = R3 = (float ) 0.513725;
-       break;
-       case Quantity_NOC_HOTPINK :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.411765; RB = R3 = (float ) 0.705882;
-       break;
-       case Quantity_NOC_HOTPINK1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.431373; RB = R3 = (float ) 0.705882;
-       break;
-       case Quantity_NOC_HOTPINK2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.415686; RB = R3 = (float ) 0.654902;
-       break;
-       case Quantity_NOC_HOTPINK3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.376471; RB = R3 = (float ) 0.564706;
-       break;
-       case Quantity_NOC_HOTPINK4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.227451; RB = R3 = (float ) 0.384314;
-       break;
-       case Quantity_NOC_INDIANRED :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.360784; RB = R3 = (float ) 0.360784;
-       break;
-       case Quantity_NOC_INDIANRED1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.415686; RB = R3 = (float ) 0.415686;
-       break;
-       case Quantity_NOC_INDIANRED2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.388235; RB = R3 = (float ) 0.388235;
-       break;
-       case Quantity_NOC_INDIANRED3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.333333; RB = R3 = (float ) 0.333333;
-       break;
-       case Quantity_NOC_INDIANRED4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.227451; RB = R3 = (float ) 0.227451;
-       break;
-       case Quantity_NOC_IVORY :
-               RR = R1 = 1.000000; RG = R2 = 1.000000; RB = R3 = (float ) 0.941176;
-       break;
-       case Quantity_NOC_IVORY2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.933333; RB = R3 = (float ) 0.878431;
-       break;
-       case Quantity_NOC_IVORY3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.803922; RB = R3 = (float ) 0.756863;
-       break;
-       case Quantity_NOC_IVORY4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.545098; RB = R3 = (float ) 0.513725;
-       break;
-       case Quantity_NOC_KHAKI :
-               RR = R1 = (float ) 0.941176; RG = R2 = (float ) 0.901961; RB = R3 = (float ) 0.549020;
-       break;
-       case Quantity_NOC_KHAKI1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.964706; RB = R3 = (float ) 0.560784;
-       break;
-       case Quantity_NOC_KHAKI2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.901961; RB = R3 = (float ) 0.521569;
-       break;
-       case Quantity_NOC_KHAKI3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.776471; RB = R3 = (float ) 0.450980;
-       break;
-       case Quantity_NOC_KHAKI4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.525490; RB = R3 = (float ) 0.305882;
-       break;
-       case Quantity_NOC_LAVENDER :
-               RR = R1 = (float ) 0.901961; RG = R2 = (float ) 0.901961; RB = R3 = (float ) 0.980392;
-       break;
-       case Quantity_NOC_LAVENDERBLUSH1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.941176; RB = R3 = (float ) 0.960784;
-       break;
-       case Quantity_NOC_LAVENDERBLUSH2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.878431; RB = R3 = (float ) 0.898039;
-       break;
-       case Quantity_NOC_LAVENDERBLUSH3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.756863; RB = R3 = (float ) 0.772549;
-       break;
-       case Quantity_NOC_LAVENDERBLUSH4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.513725; RB = R3 = (float ) 0.525490;
-       break;
-       case Quantity_NOC_LAWNGREEN :
-               RR = R1 = (float ) 0.486275; RG = R2 = (float ) 0.988235; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_LEMONCHIFFON1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.980392; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_LEMONCHIFFON2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.913725; RB = R3 = (float ) 0.749020;
-       break;
-       case Quantity_NOC_LEMONCHIFFON3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.788235; RB = R3 = (float ) 0.647059;
-       break;
-       case Quantity_NOC_LEMONCHIFFON4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.537255; RB = R3 = (float ) 0.439216;
-       break;
-       case Quantity_NOC_LIGHTBLUE :
-               RR = R1 = (float ) 0.678431; RG = R2 = (float ) 0.847059; RB = R3 = (float ) 0.901961;
-       break;
-       case Quantity_NOC_LIGHTBLUE1 :
-               RR = R1 = (float ) 0.749020; RG = R2 = (float ) 0.937255; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_LIGHTBLUE2 :
-               RR = R1 = (float ) 0.698039; RG = R2 = (float ) 0.874510; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_LIGHTBLUE3 :
-               RR = R1 = (float ) 0.603922; RG = R2 = (float ) 0.752941; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_LIGHTBLUE4 :
-               RR = R1 = (float ) 0.407843; RG = R2 = (float ) 0.513725; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_LIGHTCORAL :
-               RR = R1 = (float ) 0.941176; RG = R2 = (float ) 0.501961; RB = R3 = (float ) 0.501961;
-       break;
-       case Quantity_NOC_LIGHTCYAN1 :
-               RR = R1 = (float ) 0.878431; RG = R2 = 1.000000; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_LIGHTCYAN2 :
-               RR = R1 = (float ) 0.819608; RG = R2 = (float ) 0.933333; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_LIGHTCYAN3 :
-               RR = R1 = (float ) 0.705882; RG = R2 = (float ) 0.803922; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_LIGHTCYAN4 :
-               RR = R1 = (float ) 0.478431; RG = R2 = (float ) 0.545098; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_LIGHTGOLDENROD :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.866667; RB = R3 = (float ) 0.509804;
-       break;
-       case Quantity_NOC_LIGHTGOLDENROD1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.925490; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_LIGHTGOLDENROD2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.862745; RB = R3 = (float ) 0.509804;
-       break;
-       case Quantity_NOC_LIGHTGOLDENROD3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.745098; RB = R3 = (float ) 0.439216;
-       break;
-       case Quantity_NOC_LIGHTGOLDENROD4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.505882; RB = R3 = (float ) 0.298039;
-       break;
-       case Quantity_NOC_LIGHTGOLDENRODYELLOW :
-               RR = R1 = (float ) 0.980392; RG = R2 = (float ) 0.980392; RB = R3 = (float ) 0.823529;
-       break;
-       case Quantity_NOC_LIGHTGRAY :
-               RR = R1 = (float ) 0.827451; RG = R2 = (float ) 0.827451; RB = R3 = (float ) 0.827451;
-       break;
-       case Quantity_NOC_LIGHTPINK :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.713725; RB = R3 = (float ) 0.756863;
-       break;
-       case Quantity_NOC_LIGHTPINK1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.682353; RB = R3 = (float ) 0.725490;
-       break;
-       case Quantity_NOC_LIGHTPINK2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.635294; RB = R3 = (float ) 0.678431;
-       break;
-       case Quantity_NOC_LIGHTPINK3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.549020; RB = R3 = (float ) 0.584314;
-       break;
-       case Quantity_NOC_LIGHTPINK4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.372549; RB = R3 = (float ) 0.396078;
-       break;
-       case Quantity_NOC_LIGHTSALMON1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.627451; RB = R3 = (float ) 0.478431;
-       break;
-       case Quantity_NOC_LIGHTSALMON2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.584314; RB = R3 = (float ) 0.447059;
-       break;
-       case Quantity_NOC_LIGHTSALMON3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.505882; RB = R3 = (float ) 0.384314;
-       break;
-       case Quantity_NOC_LIGHTSALMON4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.341176; RB = R3 = (float ) 0.258824;
-       break;
-       case Quantity_NOC_LIGHTSEAGREEN :
-               RR = R1 = (float ) 0.125490; RG = R2 = (float ) 0.698039; RB = R3 = (float ) 0.666667;
-       break;
-       case Quantity_NOC_LIGHTSKYBLUE :
-               RR = R1 = (float ) 0.529412; RG = R2 = (float ) 0.807843; RB = R3 = (float ) 0.980392;
-       break;
-       case Quantity_NOC_LIGHTSKYBLUE1 :
-               RR = R1 = (float ) 0.690196; RG = R2 = (float ) 0.886275; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_LIGHTSKYBLUE2 :
-               RR = R1 = (float ) 0.643137; RG = R2 = (float ) 0.827451; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_LIGHTSKYBLUE3 :
-               RR = R1 = (float ) 0.552941; RG = R2 = (float ) 0.713725; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_LIGHTSKYBLUE4 :
-               RR = R1 = (float ) 0.376471; RG = R2 = (float ) 0.482353; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_LIGHTSLATEBLUE :
-               RR = R1 = (float ) 0.517647; RG = R2 = (float ) 0.439216; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_LIGHTSLATEGRAY :
-               RR = R1 = (float ) 0.466667; RG = R2 = (float ) 0.533333; RB = R3 = (float ) 0.600000;
-       break;
-       case Quantity_NOC_LIGHTSTEELBLUE :
-               RR = R1 = (float ) 0.690196; RG = R2 = (float ) 0.768627; RB = R3 = (float ) 0.870588;
-       break;
-       case Quantity_NOC_LIGHTSTEELBLUE1 :
-               RR = R1 = (float ) 0.792157; RG = R2 = (float ) 0.882353; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_LIGHTSTEELBLUE2 :
-               RR = R1 = (float ) 0.737255; RG = R2 = (float ) 0.823529; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_LIGHTSTEELBLUE3 :
-               RR = R1 = (float ) 0.635294; RG = R2 = (float ) 0.709804; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_LIGHTSTEELBLUE4 :
-               RR = R1 = (float ) 0.431373; RG = R2 = (float ) 0.482353; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_LIGHTYELLOW :
-               RR = R1 = 1.000000; RG = R2 = 1.000000; RB = R3 = (float ) 0.878431;
-       break;
-       case Quantity_NOC_LIGHTYELLOW2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.933333; RB = R3 = (float ) 0.819608;
-       break;
-       case Quantity_NOC_LIGHTYELLOW3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.803922; RB = R3 = (float ) 0.705882;
-       break;
-       case Quantity_NOC_LIGHTYELLOW4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.545098; RB = R3 = (float ) 0.478431;
-       break;
-       case Quantity_NOC_LIMEGREEN :
-               RR = R1 = (float ) 0.196078; RG = R2 = (float ) 0.803922; RB = R3 = (float ) 0.196078;
-       break;
-       case Quantity_NOC_LINEN :
-               RR = R1 = (float ) 0.980392; RG = R2 = (float ) 0.941176; RB = R3 = (float ) 0.901961;
-       break;
-       case Quantity_NOC_MAGENTA1 :
-               RR = R1 = 1.000000; RG = R2 = 0.000000; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_MAGENTA2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = 0.000000; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_MAGENTA3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = 0.000000; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_MAGENTA4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = 0.000000; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_MAROON :
-               RR = R1 = (float ) 0.690196; RG = R2 = (float ) 0.188235; RB = R3 = (float ) 0.376471;
-       break;
-       case Quantity_NOC_MAROON1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.203922; RB = R3 = (float ) 0.701961;
-       break;
-       case Quantity_NOC_MAROON2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.188235; RB = R3 = (float ) 0.654902;
-       break;
-       case Quantity_NOC_MAROON3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.160784; RB = R3 = (float ) 0.564706;
-       break;
-       case Quantity_NOC_MAROON4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.109804; RB = R3 = (float ) 0.384314;
-       break;
-       case Quantity_NOC_MEDIUMAQUAMARINE :
-               RR = R1 = (float ) 0.400000; RG = R2 = (float ) 0.803922; RB = R3 = (float ) 0.666667;
-       break;
-       case Quantity_NOC_MEDIUMORCHID :
-               RR = R1 = (float ) 0.729412; RG = R2 = (float ) 0.333333; RB = R3 = (float ) 0.827451;
-       break;
-       case Quantity_NOC_MEDIUMORCHID1 :
-               RR = R1 = (float ) 0.878431; RG = R2 = (float ) 0.400000; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_MEDIUMORCHID2 :
-               RR = R1 = (float ) 0.819608; RG = R2 = (float ) 0.372549; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_MEDIUMORCHID3 :
-               RR = R1 = (float ) 0.705882; RG = R2 = (float ) 0.321569; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_MEDIUMORCHID4 :
-               RR = R1 = (float ) 0.478431; RG = R2 = (float ) 0.215686; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_MEDIUMPURPLE :
-               RR = R1 = (float ) 0.576471; RG = R2 = (float ) 0.439216; RB = R3 = (float ) 0.858824;
-       break;
-       case Quantity_NOC_MEDIUMPURPLE1 :
-               RR = R1 = (float ) 0.670588; RG = R2 = (float ) 0.509804; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_MEDIUMPURPLE2 :
-               RR = R1 = (float ) 0.623529; RG = R2 = (float ) 0.474510; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_MEDIUMPURPLE3 :
-               RR = R1 = (float ) 0.537255; RG = R2 = (float ) 0.407843; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_MEDIUMPURPLE4 :
-               RR = R1 = (float ) 0.364706; RG = R2 = (float ) 0.278431; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_MEDIUMSEAGREEN :
-               RR = R1 = (float ) 0.235294; RG = R2 = (float ) 0.701961; RB = R3 = (float ) 0.443137;
-       break;
-       case Quantity_NOC_MEDIUMSLATEBLUE :
-               RR = R1 = (float ) 0.482353; RG = R2 = (float ) 0.407843; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_MEDIUMSPRINGGREEN :
-               RR = R1 = 0.000000; RG = R2 = (float ) 0.980392; RB = R3 = (float ) 0.603922;
-       break;
-       case Quantity_NOC_MEDIUMTURQUOISE :
-               RR = R1 = (float ) 0.282353; RG = R2 = (float ) 0.819608; RB = R3 = (float ) 0.800000;
-       break;
-       case Quantity_NOC_MEDIUMVIOLETRED :
-               RR = R1 = (float ) 0.780392; RG = R2 = (float ) 0.082353; RB = R3 = (float ) 0.521569;
-       break;
-       case Quantity_NOC_MIDNIGHTBLUE :
-               RR = R1 = (float ) 0.098039; RG = R2 = (float ) 0.098039; RB = R3 = (float ) 0.439216;
-       break;
-       case Quantity_NOC_MINTCREAM :
-               RR = R1 = (float ) 0.960784; RG = R2 = 1.000000; RB = R3 = (float ) 0.980392;
-       break;
-       case Quantity_NOC_MISTYROSE :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.894118; RB = R3 = (float ) 0.882353;
-       break;
-       case Quantity_NOC_MISTYROSE2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.835294; RB = R3 = (float ) 0.823529;
-       break;
-       case Quantity_NOC_MISTYROSE3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.717647; RB = R3 = (float ) 0.709804;
-       break;
-       case Quantity_NOC_MISTYROSE4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.490196; RB = R3 = (float ) 0.482353;
-       break;
-       case Quantity_NOC_MOCCASIN :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.894118; RB = R3 = (float ) 0.709804;
-       break;
-       case Quantity_NOC_NAVAJOWHITE1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.870588; RB = R3 = (float ) 0.678431;
-       break;
-       case Quantity_NOC_NAVAJOWHITE2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.811765; RB = R3 = (float ) 0.631373;
-       break;
-       case Quantity_NOC_NAVAJOWHITE3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.701961; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_NAVAJOWHITE4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.474510; RB = R3 = (float ) 0.368627;
-       break;
-       case Quantity_NOC_NAVYBLUE :
-               RR = R1 = 0.000000; RG = R2 = 0.000000; RB = R3 = (float ) 0.501961;
-       break;
-       case Quantity_NOC_OLDLACE :
-               RR = R1 = (float ) 0.992157; RG = R2 = (float ) 0.960784; RB = R3 = (float ) 0.901961;
-       break;
-       case Quantity_NOC_OLIVEDRAB :
-               RR = R1 = (float ) 0.419608; RG = R2 = (float ) 0.556863; RB = R3 = (float ) 0.137255;
-       break;
-       case Quantity_NOC_OLIVEDRAB1 :
-               RR = R1 = (float ) 0.752941; RG = R2 = 1.000000; RB = R3 = (float ) 0.243137;
-       break;
-       case Quantity_NOC_OLIVEDRAB2 :
-               RR = R1 = (float ) 0.701961; RG = R2 = (float ) 0.933333; RB = R3 = (float ) 0.227451;
-       break;
-       case Quantity_NOC_OLIVEDRAB3 :
-               RR = R1 = (float ) 0.603922; RG = R2 = (float ) 0.803922; RB = R3 = (float ) 0.196078;
-       break;
-       case Quantity_NOC_OLIVEDRAB4 :
-               RR = R1 = (float ) 0.411765; RG = R2 = (float ) 0.545098; RB = R3 = (float ) 0.133333;
-       break;
-       case Quantity_NOC_ORANGE :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.647059; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_ORANGE1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.647059; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_ORANGE2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.603922; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_ORANGE3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.521569; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_ORANGE4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.352941; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_ORANGERED :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.270588; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_ORANGERED1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.270588; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_ORANGERED2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.250980; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_ORANGERED3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.215686; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_ORANGERED4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.145098; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_ORCHID :
-               RR = R1 = (float ) 0.854902; RG = R2 = (float ) 0.439216; RB = R3 = (float ) 0.839216;
-       break;
-       case Quantity_NOC_ORCHID1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.513725; RB = R3 = (float ) 0.980392;
-       break;
-       case Quantity_NOC_ORCHID2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.478431; RB = R3 = (float ) 0.913725;
-       break;
-       case Quantity_NOC_ORCHID3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.411765; RB = R3 = (float ) 0.788235;
-       break;
-       case Quantity_NOC_ORCHID4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.278431; RB = R3 = (float ) 0.537255;
-       break;
-       case Quantity_NOC_PALEGOLDENROD :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.909804; RB = R3 = (float ) 0.666667;
-       break;
-       case Quantity_NOC_PALEGREEN :
-               RR = R1 = (float ) 0.596078; RG = R2 = (float ) 0.984314; RB = R3 = (float ) 0.596078;
-       break;
-       case Quantity_NOC_PALEGREEN1 :
-               RR = R1 = (float ) 0.603922; RG = R2 = 1.000000; RB = R3 = (float ) 0.603922;
-       break;
-       case Quantity_NOC_PALEGREEN2 :
-               RR = R1 = (float ) 0.564706; RG = R2 = (float ) 0.933333; RB = R3 = (float ) 0.564706;
-       break;
-       case Quantity_NOC_PALEGREEN3 :
-               RR = R1 = (float ) 0.486275; RG = R2 = (float ) 0.803922; RB = R3 = (float ) 0.486275;
-       break;
-       case Quantity_NOC_PALEGREEN4 :
-               RR = R1 = (float ) 0.329412; RG = R2 = (float ) 0.545098; RB = R3 = (float ) 0.329412;
-       break;
-       case Quantity_NOC_PALETURQUOISE :
-               RR = R1 = (float ) 0.686275; RG = R2 = (float ) 0.933333; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_PALETURQUOISE1 :
-               RR = R1 = (float ) 0.733333; RG = R2 = 1.000000; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_PALETURQUOISE2 :
-               RR = R1 = (float ) 0.682353; RG = R2 = (float ) 0.933333; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_PALETURQUOISE3 :
-               RR = R1 = (float ) 0.588235; RG = R2 = (float ) 0.803922; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_PALETURQUOISE4 :
-               RR = R1 = (float ) 0.400000; RG = R2 = (float ) 0.545098; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_PALEVIOLETRED :
-               RR = R1 = (float ) 0.858824; RG = R2 = (float ) 0.439216; RB = R3 = (float ) 0.576471;
-       break;
-       case Quantity_NOC_PALEVIOLETRED1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.509804; RB = R3 = (float ) 0.670588;
-       break;
-       case Quantity_NOC_PALEVIOLETRED2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.474510; RB = R3 = (float ) 0.623529;
-       break;
-       case Quantity_NOC_PALEVIOLETRED3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.407843; RB = R3 = (float ) 0.537255;
-       break;
-       case Quantity_NOC_PALEVIOLETRED4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.278431; RB = R3 = (float ) 0.364706;
-       break;
-       case Quantity_NOC_PAPAYAWHIP :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.937255; RB = R3 = (float ) 0.835294;
-       break;
-       case Quantity_NOC_PEACHPUFF :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.854902; RB = R3 = (float ) 0.725490;
-       break;
-       case Quantity_NOC_PEACHPUFF2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.796078; RB = R3 = (float ) 0.678431;
-       break;
-       case Quantity_NOC_PEACHPUFF3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.686275; RB = R3 = (float ) 0.584314;
-       break;
-       case Quantity_NOC_PEACHPUFF4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.466667; RB = R3 = (float ) 0.396078;
-       break;
-       case Quantity_NOC_PERU :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.521569; RB = R3 = (float ) 0.247059;
-       break;
-       case Quantity_NOC_PINK :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.752941; RB = R3 = (float ) 0.796078;
-       break;
-       case Quantity_NOC_PINK1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.709804; RB = R3 = (float ) 0.772549;
-       break;
-       case Quantity_NOC_PINK2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.662745; RB = R3 = (float ) 0.721569;
-       break;
-       case Quantity_NOC_PINK3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.568627; RB = R3 = (float ) 0.619608;
-       break;
-       case Quantity_NOC_PINK4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.388235; RB = R3 = (float ) 0.423529;
-       break;
-       case Quantity_NOC_PLUM :
-               RR = R1 = (float ) 0.866667; RG = R2 = (float ) 0.627451; RB = R3 = (float ) 0.866667;
-       break;
-       case Quantity_NOC_PLUM1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.733333; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_PLUM2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.682353; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_PLUM3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.588235; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_PLUM4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.400000; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_POWDERBLUE :
-               RR = R1 = (float ) 0.690196; RG = R2 = (float ) 0.878431; RB = R3 = (float ) 0.901961;
-       break;
-       case Quantity_NOC_PURPLE :
-               RR = R1 = (float ) 0.627451; RG = R2 = (float ) 0.125490; RB = R3 = (float ) 0.941176;
-       break;
-       case Quantity_NOC_PURPLE1 :
-               RR = R1 = (float ) 0.607843; RG = R2 = (float ) 0.188235; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_PURPLE2 :
-               RR = R1 = (float ) 0.568627; RG = R2 = (float ) 0.172549; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_PURPLE3 :
-               RR = R1 = (float ) 0.490196; RG = R2 = (float ) 0.149020; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_PURPLE4 :
-               RR = R1 = (float ) 0.333333; RG = R2 = (float ) 0.101961; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_RED :
-               RR = R1 = 1.000000; RG = R2 = 0.000000; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_RED1 :
-               RR = R1 = 1.000000; RG = R2 = 0.000000; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_RED2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = 0.000000; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_RED3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = 0.000000; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_RED4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = 0.000000; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_ROSYBROWN :
-               RR = R1 = (float ) 0.737255; RG = R2 = (float ) 0.560784; RB = R3 = (float ) 0.560784;
-       break;
-       case Quantity_NOC_ROSYBROWN1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.756863; RB = R3 = (float ) 0.756863;
-       break;
-       case Quantity_NOC_ROSYBROWN2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.705882; RB = R3 = (float ) 0.705882;
-       break;
-       case Quantity_NOC_ROSYBROWN3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.607843; RB = R3 = (float ) 0.607843;
-       break;
-       case Quantity_NOC_ROSYBROWN4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.411765; RB = R3 = (float ) 0.411765;
-       break;
-       case Quantity_NOC_ROYALBLUE :
-               RR = R1 = (float ) 0.254902; RG = R2 = (float ) 0.411765; RB = R3 = (float ) 0.882353;
-       break;
-       case Quantity_NOC_ROYALBLUE1 :
-               RR = R1 = (float ) 0.282353; RG = R2 = (float ) 0.462745; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_ROYALBLUE2 :
-               RR = R1 = (float ) 0.262745; RG = R2 = (float ) 0.431373; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_ROYALBLUE3 :
-               RR = R1 = (float ) 0.227451; RG = R2 = (float ) 0.372549; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_ROYALBLUE4 :
-               RR = R1 = (float ) 0.152941; RG = R2 = (float ) 0.250980; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_SADDLEBROWN :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.270588; RB = R3 = (float ) 0.074510;
-       break;
-       case Quantity_NOC_SALMON :
-               RR = R1 = (float ) 0.980392; RG = R2 = (float ) 0.501961; RB = R3 = (float ) 0.447059;
-       break;
-       case Quantity_NOC_SALMON1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.549020; RB = R3 = (float ) 0.411765;
-       break;
-       case Quantity_NOC_SALMON2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.509804; RB = R3 = (float ) 0.384314;
-       break;
-       case Quantity_NOC_SALMON3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.439216; RB = R3 = (float ) 0.329412;
-       break;
-       case Quantity_NOC_SALMON4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.298039; RB = R3 = (float ) 0.223529;
-       break;
-       case Quantity_NOC_SANDYBROWN :
-               RR = R1 = (float ) 0.956863; RG = R2 = (float ) 0.643137; RB = R3 = (float ) 0.376471;
-       break;
-       case Quantity_NOC_SEAGREEN :
-               RR = R1 = (float ) 0.180392; RG = R2 = (float ) 0.545098; RB = R3 = (float ) 0.341176;
-       break;
-       case Quantity_NOC_SEAGREEN1 :
-               RR = R1 = (float ) 0.329412; RG = R2 = 1.000000; RB = R3 = (float ) 0.623529;
-       break;
-       case Quantity_NOC_SEAGREEN2 :
-               RR = R1 = (float ) 0.305882; RG = R2 = (float ) 0.933333; RB = R3 = (float ) 0.580392;
-       break;
-       case Quantity_NOC_SEAGREEN3 :
-               RR = R1 = (float ) 0.262745; RG = R2 = (float ) 0.803922; RB = R3 = (float ) 0.501961;
-       break;
-       case Quantity_NOC_SEAGREEN4 :
-               RR = R1 = (float ) 0.180392; RG = R2 = (float ) 0.545098; RB = R3 = (float ) 0.341176;
-       break;
-       case Quantity_NOC_SEASHELL :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.960784; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_SEASHELL2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.898039; RB = R3 = (float ) 0.870588;
-       break;
-       case Quantity_NOC_SEASHELL3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.772549; RB = R3 = (float ) 0.749020;
-       break;
-       case Quantity_NOC_SEASHELL4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.525490; RB = R3 = (float ) 0.509804;
-       break;
-       case Quantity_NOC_BEET :
-               RR = R1 = (float ) 0.556863; RG = R2 = (float ) 0.219608; RB = R3 = (float ) 0.556863;
-       break;
-       case Quantity_NOC_TEAL :
-               RR = R1 = (float ) 0.219608; RG = R2 = (float ) 0.556863; RB = R3 = (float ) 0.556863;
-       break;
-       case Quantity_NOC_SIENNA :
-               RR = R1 = (float ) 0.627451; RG = R2 = (float ) 0.321569; RB = R3 = (float ) 0.176471;
-       break;
-       case Quantity_NOC_SIENNA1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.509804; RB = R3 = (float ) 0.278431;
-       break;
-       case Quantity_NOC_SIENNA2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.474510; RB = R3 = (float ) 0.258824;
-       break;
-       case Quantity_NOC_SIENNA3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.407843; RB = R3 = (float ) 0.223529;
-       break;
-       case Quantity_NOC_SIENNA4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.278431; RB = R3 = (float ) 0.149020;
-       break;
-       case Quantity_NOC_SKYBLUE :
-               RR = R1 = (float ) 0.529412; RG = R2 = (float ) 0.807843; RB = R3 = (float ) 0.921569;
-       break;
-       case Quantity_NOC_SKYBLUE1 :
-               RR = R1 = (float ) 0.529412; RG = R2 = (float ) 0.807843; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_SKYBLUE2 :
-               RR = R1 = (float ) 0.494118; RG = R2 = (float ) 0.752941; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_SKYBLUE3 :
-               RR = R1 = (float ) 0.423529; RG = R2 = (float ) 0.650980; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_SKYBLUE4 :
-               RR = R1 = (float ) 0.290196; RG = R2 = (float ) 0.439216; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_SLATEBLUE :
-               RR = R1 = (float ) 0.415686; RG = R2 = (float ) 0.352941; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_SLATEBLUE1 :
-               RR = R1 = (float ) 0.513725; RG = R2 = (float ) 0.435294; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_SLATEBLUE2 :
-               RR = R1 = (float ) 0.478431; RG = R2 = (float ) 0.403922; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_SLATEBLUE3 :
-               RR = R1 = (float ) 0.411765; RG = R2 = (float ) 0.349020; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_SLATEBLUE4 :
-               RR = R1 = (float ) 0.278431; RG = R2 = (float ) 0.235294; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_SLATEGRAY1 :
-               RR = R1 = (float ) 0.776471; RG = R2 = (float ) 0.886275; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_SLATEGRAY2 :
-               RR = R1 = (float ) 0.725490; RG = R2 = (float ) 0.827451; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_SLATEGRAY3 :
-               RR = R1 = (float ) 0.623529; RG = R2 = (float ) 0.713725; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_SLATEGRAY4 :
-               RR = R1 = (float ) 0.423529; RG = R2 = (float ) 0.482353; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_SLATEGRAY :
-               RR = R1 = (float ) 0.439216; RG = R2 = (float ) 0.501961; RB = R3 = (float ) 0.564706;
-       break;
-       case Quantity_NOC_SNOW :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.980392; RB = R3 = (float ) 0.980392;
-       break;
-       case Quantity_NOC_SNOW2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.913725; RB = R3 = (float ) 0.913725;
-       break;
-       case Quantity_NOC_SNOW3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.788235; RB = R3 = (float ) 0.788235;
-       break;
-       case Quantity_NOC_SNOW4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.537255; RB = R3 = (float ) 0.537255;
-       break;
-       case Quantity_NOC_SPRINGGREEN :
-               RR = R1 = 0.000000; RG = R2 = 1.000000; RB = R3 = (float ) 0.498039;
-       break;
-       case Quantity_NOC_SPRINGGREEN2 :
-               RR = R1 = 0.000000; RG = R2 = (float ) 0.933333; RB = R3 = (float ) 0.462745;
-       break;
-       case Quantity_NOC_SPRINGGREEN3 :
-               RR = R1 = 0.000000; RG = R2 = (float ) 0.803922; RB = R3 = (float ) 0.400000;
-       break;
-       case Quantity_NOC_SPRINGGREEN4 :
-               RR = R1 = 0.000000; RG = R2 = (float ) 0.545098; RB = R3 = (float ) 0.270588;
-       break;
-       case Quantity_NOC_STEELBLUE :
-               RR = R1 = (float ) 0.274510; RG = R2 = (float ) 0.509804; RB = R3 = (float ) 0.705882;
-       break;
-       case Quantity_NOC_STEELBLUE1 :
-               RR = R1 = (float ) 0.388235; RG = R2 = (float ) 0.721569; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_STEELBLUE2 :
-               RR = R1 = (float ) 0.360784; RG = R2 = (float ) 0.674510; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_STEELBLUE3 :
-               RR = R1 = (float ) 0.309804; RG = R2 = (float ) 0.580392; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_STEELBLUE4 :
-               RR = R1 = (float ) 0.211765; RG = R2 = (float ) 0.392157; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_TAN :
-               RR = R1 = (float ) 0.823529; RG = R2 = (float ) 0.705882; RB = R3 = (float ) 0.549020;
-       break;
-       case Quantity_NOC_TAN1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.647059; RB = R3 = (float ) 0.309804;
-       break;
-       case Quantity_NOC_TAN2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.603922; RB = R3 = (float ) 0.286275;
-       break;
-       case Quantity_NOC_TAN3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.521569; RB = R3 = (float ) 0.247059;
-       break;
-       case Quantity_NOC_TAN4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.352941; RB = R3 = (float ) 0.168627;
-       break;
-       case Quantity_NOC_THISTLE :
-               RR = R1 = (float ) 0.847059; RG = R2 = (float ) 0.749020; RB = R3 = (float ) 0.847059;
-       break;
-       case Quantity_NOC_THISTLE1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.882353; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_THISTLE2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.823529; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_THISTLE3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.709804; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_THISTLE4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.482353; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_TOMATO :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.388235; RB = R3 = (float ) 0.278431;
-       break;
-       case Quantity_NOC_TOMATO1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.388235; RB = R3 = (float ) 0.278431;
-       break;
-       case Quantity_NOC_TOMATO2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.360784; RB = R3 = (float ) 0.258824;
-       break;
-       case Quantity_NOC_TOMATO3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.309804; RB = R3 = (float ) 0.223529;
-       break;
-       case Quantity_NOC_TOMATO4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.211765; RB = R3 = (float ) 0.149020;
-       break;
-       case Quantity_NOC_TURQUOISE :
-               RR = R1 = (float ) 0.250980; RG = R2 = (float ) 0.878431; RB = R3 = (float ) 0.815686;
-       break;
-       case Quantity_NOC_TURQUOISE1 :
-               RR = R1 = 0.000000; RG = R2 = (float ) 0.960784; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_TURQUOISE2 :
-               RR = R1 = 0.000000; RG = R2 = (float ) 0.898039; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_TURQUOISE3 :
-               RR = R1 = 0.000000; RG = R2 = (float ) 0.772549; RB = R3 = (float ) 0.803922;
-       break;
-       case Quantity_NOC_TURQUOISE4 :
-               RR = R1 = 0.000000; RG = R2 = (float ) 0.525490; RB = R3 = (float ) 0.545098;
-       break;
-       case Quantity_NOC_VIOLET :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.509804; RB = R3 = (float ) 0.933333;
-       break;
-       case Quantity_NOC_VIOLETRED :
-               RR = R1 = (float ) 0.815686; RG = R2 = (float ) 0.125490; RB = R3 = (float ) 0.564706;
-       break;
-       case Quantity_NOC_VIOLETRED1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.243137; RB = R3 = (float ) 0.588235;
-       break;
-       case Quantity_NOC_VIOLETRED2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.227451; RB = R3 = (float ) 0.549020;
-       break;
-       case Quantity_NOC_VIOLETRED3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.196078; RB = R3 = (float ) 0.470588;
-       break;
-       case Quantity_NOC_VIOLETRED4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.133333; RB = R3 = (float ) 0.321569;
-       break;
-       case Quantity_NOC_WHEAT :
-               RR = R1 = (float ) 0.960784; RG = R2 = (float ) 0.870588; RB = R3 = (float ) 0.701961;
-       break;
-       case Quantity_NOC_WHEAT1 :
-               RR = R1 = 1.000000; RG = R2 = (float ) 0.905882; RB = R3 = (float ) 0.729412;
-       break;
-       case Quantity_NOC_WHEAT2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.847059; RB = R3 = (float ) 0.682353;
-       break;
-       case Quantity_NOC_WHEAT3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.729412; RB = R3 = (float ) 0.588235;
-       break;
-       case Quantity_NOC_WHEAT4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.494118; RB = R3 = (float ) 0.400000;
-       break;
-       case Quantity_NOC_WHITE :
-               RR = R1 = 1.000000; RG = R2 = 1.000000; RB = R3 = 1.000000;
-       break;
-       case Quantity_NOC_WHITESMOKE :
-               RR = R1 = (float ) 0.960784; RG = R2 = (float ) 0.960784; RB = R3 = (float ) 0.960784;
-       break;
-       case Quantity_NOC_YELLOW :
-               RR = R1 = 1.000000; RG = R2 = 1.000000; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_YELLOW1 :
-               RR = R1 = 1.000000; RG = R2 = 1.000000; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_YELLOW2 :
-               RR = R1 = (float ) 0.933333; RG = R2 = (float ) 0.933333; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_YELLOW3 :
-               RR = R1 = (float ) 0.803922; RG = R2 = (float ) 0.803922; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_YELLOW4 :
-               RR = R1 = (float ) 0.545098; RG = R2 = (float ) 0.545098; RB = R3 = 0.000000;
-       break;
-       case Quantity_NOC_YELLOWGREEN :
-               RR = R1 = (float ) 0.603922; RG = R2 = (float ) 0.803922; RB = R3 = (float ) 0.196078;
-       break;
-       default :
-               throw Standard_OutOfRange("Bad name");
-       break;
-}
-       if (AType == Quantity_TOC_HLS)
-           Quantity_Color::rgbhls (RR, RG, RB, R1, R2, R3);
-}
-
-Standard_CString Quantity_Color::StringName (
-                                 const Quantity_NameOfColor AName) {
+  const float aDelta = aMax - min;
 
-Standard_CString TheName;
-switch (AName) {
+  // compute saturation
+  float aSaturation = 0.0f;
+  if (aMax != 0.0f) aSaturation = aDelta / aMax;
 
-       case Quantity_NOC_BLACK :
-               TheName = "BLACK";
-       break;
-       case Quantity_NOC_MATRAGRAY :
-               TheName = "MATRAGRAY";
-       break;
-       case Quantity_NOC_MATRABLUE :
-               TheName = "MATRABLUE";
-       break;
-       case Quantity_NOC_ALICEBLUE :
-               TheName = "ALICEBLUE";
-       break;
-       case Quantity_NOC_ANTIQUEWHITE :
-               TheName = "ANTIQUEWHITE";
-       break;
-       case Quantity_NOC_ANTIQUEWHITE1 :
-               TheName = "ANTIQUEWHITE1";
-       break;
-       case Quantity_NOC_ANTIQUEWHITE2 :
-               TheName = "ANTIQUEWHITE2";
-       break;
-       case Quantity_NOC_ANTIQUEWHITE3 :
-               TheName = "ANTIQUEWHITE3";
-       break;
-       case Quantity_NOC_ANTIQUEWHITE4 :
-               TheName = "ANTIQUEWHITE4";
-       break;
-       case Quantity_NOC_AQUAMARINE1 :
-               TheName = "AQUAMARINE1";
-       break;
-       case Quantity_NOC_AQUAMARINE2 :
-               TheName = "AQUAMARINE2";
-       break;
-       case Quantity_NOC_AQUAMARINE4 :
-               TheName = "AQUAMARINE4";
-       break;
-       case Quantity_NOC_AZURE :
-               TheName = "AZURE";
-       break;
-       case Quantity_NOC_AZURE2 :
-               TheName = "AZURE2";
-       break;
-       case Quantity_NOC_AZURE3 :
-               TheName = "AZURE3";
-       break;
-       case Quantity_NOC_AZURE4 :
-               TheName = "AZURE4";
-       break;
-       case Quantity_NOC_BEIGE :
-               TheName = "BEIGE";
-       break;
-       case Quantity_NOC_BISQUE :
-               TheName = "BISQUE";
-       break;
-       case Quantity_NOC_BISQUE2 :
-               TheName = "BISQUE2";
-       break;
-       case Quantity_NOC_BISQUE3 :
-               TheName = "BISQUE3";
-       break;
-       case Quantity_NOC_BISQUE4 :
-               TheName = "BISQUE4";
-       break;
-       case Quantity_NOC_BLANCHEDALMOND :
-               TheName = "BLANCHEDALMOND";
-       break;
-       case Quantity_NOC_BLUE1 :
-               TheName = "BLUE1";
-       break;
-       case Quantity_NOC_BLUE2 :
-               TheName = "BLUE2";
-       break;
-       case Quantity_NOC_BLUE3 :
-               TheName = "BLUE3";
-       break;
-       case Quantity_NOC_BLUE4 :
-               TheName = "BLUE4";
-       break;
-       case Quantity_NOC_BLUEVIOLET :
-               TheName = "BLUEVIOLET";
-       break;
-       case Quantity_NOC_BROWN :
-               TheName = "BROWN";
-       break;
-       case Quantity_NOC_BROWN1 :
-               TheName = "BROWN1";
-       break;
-       case Quantity_NOC_BROWN2 :
-               TheName = "BROWN2";
-       break;
-       case Quantity_NOC_BROWN3 :
-               TheName = "BROWN3";
-       break;
-       case Quantity_NOC_BROWN4 :
-               TheName = "BROWN4";
-       break;
-       case Quantity_NOC_BURLYWOOD :
-               TheName = "BURLYWOOD";
-       break;
-       case Quantity_NOC_BURLYWOOD1 :
-               TheName = "BURLYWOOD1";
-       break;
-       case Quantity_NOC_BURLYWOOD2 :
-               TheName = "BURLYWOOD2";
-       break;
-       case Quantity_NOC_BURLYWOOD3 :
-               TheName = "BURLYWOOD3";
-       break;
-       case Quantity_NOC_BURLYWOOD4 :
-               TheName = "BURLYWOOD4";
-       break;
-       case Quantity_NOC_CADETBLUE :
-               TheName = "CADETBLUE";
-       break;
-       case Quantity_NOC_CADETBLUE1 :
-               TheName = "CADETBLUE1";
-       break;
-       case Quantity_NOC_CADETBLUE2 :
-               TheName = "CADETBLUE2";
-       break;
-       case Quantity_NOC_CADETBLUE3 :
-               TheName = "CADETBLUE3";
-       break;
-       case Quantity_NOC_CADETBLUE4 :
-               TheName = "CADETBLUE4";
-       break;
-       case Quantity_NOC_CHARTREUSE :
-               TheName = "CHARTREUSE";
-       break;
-       case Quantity_NOC_CHARTREUSE1 :
-               TheName = "CHARTREUSE1";
-       break;
-       case Quantity_NOC_CHARTREUSE2 :
-               TheName = "CHARTREUSE2";
-       break;
-       case Quantity_NOC_CHARTREUSE3 :
-               TheName = "CHARTREUSE3";
-       break;
-       case Quantity_NOC_CHARTREUSE4 :
-               TheName = "CHARTREUSE4";
-       break;
-       case Quantity_NOC_CHOCOLATE :
-               TheName = "CHOCOLATE";
-       break;
-       case Quantity_NOC_CHOCOLATE1 :
-               TheName = "CHOCOLATE1";
-       break;
-       case Quantity_NOC_CHOCOLATE2 :
-               TheName = "CHOCOLATE2";
-       break;
-       case Quantity_NOC_CHOCOLATE3 :
-               TheName = "CHOCOLATE3";
-       break;
-       case Quantity_NOC_CHOCOLATE4 :
-               TheName = "CHOCOLATE4";
-       break;
-       case Quantity_NOC_CORAL :
-               TheName = "CORAL";
-       break;
-       case Quantity_NOC_CORAL1 :
-               TheName = "CORAL1";
-       break;
-       case Quantity_NOC_CORAL2 :
-               TheName = "CORAL2";
-       break;
-       case Quantity_NOC_CORAL3 :
-               TheName = "CORAL3";
-       break;
-       case Quantity_NOC_CORAL4 :
-               TheName = "CORAL4";
-       break;
-       case Quantity_NOC_CORNFLOWERBLUE :
-               TheName = "CORNFLOWERBLUE";
-       break;
-       case Quantity_NOC_CORNSILK1 :
-               TheName = "CORNSILK1";
-       break;
-       case Quantity_NOC_CORNSILK2 :
-               TheName = "CORNSILK2";
-       break;
-       case Quantity_NOC_CORNSILK3 :
-               TheName = "CORNSILK3";
-       break;
-       case Quantity_NOC_CORNSILK4 :
-               TheName = "CORNSILK4";
-       break;
-       case Quantity_NOC_CYAN1 :
-               TheName = "CYAN1";
-       break;
-       case Quantity_NOC_CYAN2 :
-               TheName = "CYAN2";
-       break;
-       case Quantity_NOC_CYAN3 :
-               TheName = "CYAN3";
-       break;
-       case Quantity_NOC_CYAN4 :
-               TheName = "CYAN4";
-       break;
-       case Quantity_NOC_DARKGOLDENROD :
-               TheName = "DARKGOLDENROD";
-       break;
-       case Quantity_NOC_DARKGOLDENROD1 :
-               TheName = "DARKGOLDENROD1";
-       break;
-       case Quantity_NOC_DARKGOLDENROD2 :
-               TheName = "DARKGOLDENROD2";
-       break;
-       case Quantity_NOC_DARKGOLDENROD3 :
-               TheName = "DARKGOLDENROD3";
-       break;
-       case Quantity_NOC_DARKGOLDENROD4 :
-               TheName = "DARKGOLDENROD4";
-       break;
-       case Quantity_NOC_DARKGREEN :
-               TheName = "DARKGREEN";
-       break;
-       case Quantity_NOC_DARKKHAKI :
-               TheName = "DARKKHAKI";
-       break;
-       case Quantity_NOC_DARKOLIVEGREEN :
-               TheName = "DARKOLIVEGREEN";
-       break;
-       case Quantity_NOC_DARKOLIVEGREEN1 :
-               TheName = "DARKOLIVEGREEN1";
-       break;
-       case Quantity_NOC_DARKOLIVEGREEN2 :
-               TheName = "DARKOLIVEGREEN2";
-       break;
-       case Quantity_NOC_DARKOLIVEGREEN3 :
-               TheName = "DARKOLIVEGREEN3";
-       break;
-       case Quantity_NOC_DARKOLIVEGREEN4 :
-               TheName = "DARKOLIVEGREEN4";
-       break;
-       case Quantity_NOC_DARKORANGE :
-               TheName = "DARKORANGE";
-       break;
-       case Quantity_NOC_DARKORANGE1 :
-               TheName = "DARKORANGE1";
-       break;
-       case Quantity_NOC_DARKORANGE2 :
-               TheName = "DARKORANGE2";
-       break;
-       case Quantity_NOC_DARKORANGE3 :
-               TheName = "DARKORANGE3";
-       break;
-       case Quantity_NOC_DARKORANGE4 :
-               TheName = "DARKORANGE4";
-       break;
-       case Quantity_NOC_DARKORCHID :
-               TheName = "DARKORCHID";
-       break;
-       case Quantity_NOC_DARKORCHID1 :
-               TheName = "DARKORCHID1";
-       break;
-       case Quantity_NOC_DARKORCHID2 :
-               TheName = "DARKORCHID2";
-       break;
-       case Quantity_NOC_DARKORCHID3 :
-               TheName = "DARKORCHID3";
-       break;
-       case Quantity_NOC_DARKORCHID4 :
-               TheName = "DARKORCHID4";
-       break;
-       case Quantity_NOC_DARKSALMON :
-               TheName = "DARKSALMON";
-       break;
-       case Quantity_NOC_DARKSEAGREEN :
-               TheName = "DARKSEAGREEN";
-       break;
-       case Quantity_NOC_DARKSEAGREEN1 :
-               TheName = "DARKSEAGREEN1";
-       break;
-       case Quantity_NOC_DARKSEAGREEN2 :
-               TheName = "DARKSEAGREEN2";
-       break;
-       case Quantity_NOC_DARKSEAGREEN3 :
-               TheName = "DARKSEAGREEN3";
-       break;
-       case Quantity_NOC_DARKSEAGREEN4 :
-               TheName = "DARKSEAGREEN4";
-       break;
-       case Quantity_NOC_DARKSLATEBLUE :
-               TheName = "DARKSLATEBLUE";
-       break;
-       case Quantity_NOC_DARKSLATEGRAY1 :
-               TheName = "DARKSLATEGRAY1";
-       break;
-       case Quantity_NOC_DARKSLATEGRAY2 :
-               TheName = "DARKSLATEGRAY2";
-       break;
-       case Quantity_NOC_DARKSLATEGRAY3 :
-               TheName = "DARKSLATEGRAY3";
-       break;
-       case Quantity_NOC_DARKSLATEGRAY4 :
-               TheName = "DARKSLATEGRAY4";
-       break;
-       case Quantity_NOC_DARKSLATEGRAY :
-               TheName = "DARKSLATEGRAY";
-       break;
-       case Quantity_NOC_DARKTURQUOISE :
-               TheName = "DARKTURQUOISE";
-       break;
-       case Quantity_NOC_DARKVIOLET :
-               TheName = "DARKVIOLET";
-       break;
-       case Quantity_NOC_DEEPPINK :
-               TheName = "DEEPPINK";
-       break;
-       case Quantity_NOC_DEEPPINK2 :
-               TheName = "DEEPPINK2";
-       break;
-       case Quantity_NOC_DEEPPINK3 :
-               TheName = "DEEPPINK3";
-       break;
-       case Quantity_NOC_DEEPPINK4 :
-               TheName = "DEEPPINK4";
-       break;
-       case Quantity_NOC_DEEPSKYBLUE1 :
-               TheName = "DEEPSKYBLUE1";
-       break;
-       case Quantity_NOC_DEEPSKYBLUE2 :
-               TheName = "DEEPSKYBLUE2";
-       break;
-       case Quantity_NOC_DEEPSKYBLUE3 :
-               TheName = "DEEPSKYBLUE3";
-       break;
-       case Quantity_NOC_DEEPSKYBLUE4 :
-               TheName = "DEEPSKYBLUE4";
-       break;
-       case Quantity_NOC_DODGERBLUE1 :
-               TheName = "DODGERBLUE1";
-       break;
-       case Quantity_NOC_DODGERBLUE2 :
-               TheName = "DODGERBLUE2";
-       break;
-       case Quantity_NOC_DODGERBLUE3 :
-               TheName = "DODGERBLUE3";
-       break;
-       case Quantity_NOC_DODGERBLUE4 :
-               TheName = "DODGERBLUE4";
-       break;
-       case Quantity_NOC_FIREBRICK :
-               TheName = "FIREBRICK";
-       break;
-       case Quantity_NOC_FIREBRICK1 :
-               TheName = "FIREBRICK1";
-       break;
-       case Quantity_NOC_FIREBRICK2 :
-               TheName = "FIREBRICK2";
-       break;
-       case Quantity_NOC_FIREBRICK3 :
-               TheName = "FIREBRICK3";
-       break;
-       case Quantity_NOC_FIREBRICK4 :
-               TheName = "FIREBRICK4";
-       break;
-       case Quantity_NOC_FLORALWHITE :
-               TheName = "FLORALWHITE";
-       break;
-       case Quantity_NOC_FORESTGREEN :
-               TheName = "FORESTGREEN";
-       break;
-       case Quantity_NOC_GAINSBORO :
-               TheName = "GAINSBORO";
-       break;
-       case Quantity_NOC_GHOSTWHITE :
-               TheName = "GHOSTWHITE";
-       break;
-       case Quantity_NOC_GOLD :
-               TheName = "GOLD";
-       break;
-       case Quantity_NOC_GOLD1 :
-               TheName = "GOLD1";
-       break;
-       case Quantity_NOC_GOLD2 :
-               TheName = "GOLD2";
-       break;
-       case Quantity_NOC_GOLD3 :
-               TheName = "GOLD3";
-       break;
-       case Quantity_NOC_GOLD4 :
-               TheName = "GOLD4";
-       break;
-       case Quantity_NOC_GOLDENROD :
-               TheName = "GOLDENROD";
-       break;
-       case Quantity_NOC_GOLDENROD1 :
-               TheName = "GOLDENROD1";
-       break;
-       case Quantity_NOC_GOLDENROD2 :
-               TheName = "GOLDENROD2";
-       break;
-       case Quantity_NOC_GOLDENROD3 :
-               TheName = "GOLDENROD3";
-       break;
-       case Quantity_NOC_GOLDENROD4 :
-               TheName = "GOLDENROD4";
-       break;
-       case Quantity_NOC_GRAY :
-               TheName = "GRAY";
-       break;
-       case Quantity_NOC_GRAY0 :
-               TheName = "GRAY0";
-       break;
-       case Quantity_NOC_GRAY1 :
-               TheName = "GRAY1";
-       break;
-       case Quantity_NOC_GRAY10 :
-               TheName = "GRAY10";
-       break;
-       case Quantity_NOC_GRAY11 :
-               TheName = "GRAY11";
-       break;
-       case Quantity_NOC_GRAY12 :
-               TheName = "GRAY12";
-       break;
-       case Quantity_NOC_GRAY13 :
-               TheName = "GRAY13";
-       break;
-       case Quantity_NOC_GRAY14 :
-               TheName = "GRAY14";
-       break;
-       case Quantity_NOC_GRAY15 :
-               TheName = "GRAY15";
-       break;
-       case Quantity_NOC_GRAY16 :
-               TheName = "GRAY16";
-       break;
-       case Quantity_NOC_GRAY17 :
-               TheName = "GRAY17";
-       break;
-       case Quantity_NOC_GRAY18 :
-               TheName = "GRAY18";
-       break;
-       case Quantity_NOC_GRAY19 :
-               TheName = "GRAY19";
-       break;
-       case Quantity_NOC_GRAY2 :
-               TheName = "GRAY2";
-       break;
-       case Quantity_NOC_GRAY20 :
-               TheName = "GRAY20";
-       break;
-       case Quantity_NOC_GRAY21 :
-               TheName = "GRAY21";
-       break;
-       case Quantity_NOC_GRAY22 :
-               TheName = "GRAY22";
-       break;
-       case Quantity_NOC_GRAY23 :
-               TheName = "GRAY23";
-       break;
-       case Quantity_NOC_GRAY24 :
-               TheName = "GRAY24";
-       break;
-       case Quantity_NOC_GRAY25 :
-               TheName = "GRAY25";
-       break;
-       case Quantity_NOC_GRAY26 :
-               TheName = "GRAY26";
-       break;
-       case Quantity_NOC_GRAY27 :
-               TheName = "GRAY27";
-       break;
-       case Quantity_NOC_GRAY28 :
-               TheName = "GRAY28";
-       break;
-       case Quantity_NOC_GRAY29 :
-               TheName = "GRAY29";
-       break;
-       case Quantity_NOC_GRAY3 :
-               TheName = "GRAY3";
-       break;
-       case Quantity_NOC_GRAY30 :
-               TheName = "GRAY30";
-       break;
-       case Quantity_NOC_GRAY31 :
-               TheName = "GRAY31";
-       break;
-       case Quantity_NOC_GRAY32 :
-               TheName = "GRAY32";
-       break;
-       case Quantity_NOC_GRAY33 :
-               TheName = "GRAY33";
-       break;
-       case Quantity_NOC_GRAY34 :
-               TheName = "GRAY34";
-       break;
-       case Quantity_NOC_GRAY35 :
-               TheName = "GRAY35";
-       break;
-       case Quantity_NOC_GRAY36 :
-               TheName = "GRAY36";
-       break;
-       case Quantity_NOC_GRAY37 :
-               TheName = "GRAY37";
-       break;
-       case Quantity_NOC_GRAY38 :
-               TheName = "GRAY38";
-       break;
-       case Quantity_NOC_GRAY39 :
-               TheName = "GRAY39";
-       break;
-       case Quantity_NOC_GRAY4 :
-               TheName = "GRAY4";
-       break;
-       case Quantity_NOC_GRAY40 :
-               TheName = "GRAY40";
-       break;
-       case Quantity_NOC_GRAY41 :
-               TheName = "GRAY41";
-       break;
-       case Quantity_NOC_GRAY42 :
-               TheName = "GRAY42";
-       break;
-       case Quantity_NOC_GRAY43 :
-               TheName = "GRAY43";
-       break;
-       case Quantity_NOC_GRAY44 :
-               TheName = "GRAY44";
-       break;
-       case Quantity_NOC_GRAY45 :
-               TheName = "GRAY45";
-       break;
-       case Quantity_NOC_GRAY46 :
-               TheName = "GRAY46";
-       break;
-       case Quantity_NOC_GRAY47 :
-               TheName = "GRAY47";
-       break;
-       case Quantity_NOC_GRAY48 :
-               TheName = "GRAY48";
-       break;
-       case Quantity_NOC_GRAY49 :
-               TheName = "GRAY49";
-       break;
-       case Quantity_NOC_GRAY5 :
-               TheName = "GRAY5";
-       break;
-       case Quantity_NOC_GRAY50 :
-               TheName = "GRAY50";
-       break;
-       case Quantity_NOC_GRAY51 :
-               TheName = "GRAY51";
-       break;
-       case Quantity_NOC_GRAY52 :
-               TheName = "GRAY52";
-       break;
-       case Quantity_NOC_GRAY53 :
-               TheName = "GRAY53";
-       break;
-       case Quantity_NOC_GRAY54 :
-               TheName = "GRAY54";
-       break;
-       case Quantity_NOC_GRAY55 :
-               TheName = "GRAY55";
-       break;
-       case Quantity_NOC_GRAY56 :
-               TheName = "GRAY56";
-       break;
-       case Quantity_NOC_GRAY57 :
-               TheName = "GRAY57";
-       break;
-       case Quantity_NOC_GRAY58 :
-               TheName = "GRAY58";
-       break;
-       case Quantity_NOC_GRAY59 :
-               TheName = "GRAY59";
-       break;
-       case Quantity_NOC_GRAY6 :
-               TheName = "GRAY6";
-       break;
-       case Quantity_NOC_GRAY60 :
-               TheName = "GRAY60";
-       break;
-       case Quantity_NOC_GRAY61 :
-               TheName = "GRAY61";
-       break;
-       case Quantity_NOC_GRAY62 :
-               TheName = "GRAY62";
-       break;
-       case Quantity_NOC_GRAY63 :
-               TheName = "GRAY63";
-       break;
-       case Quantity_NOC_GRAY64 :
-               TheName = "GRAY64";
-       break;
-       case Quantity_NOC_GRAY65 :
-               TheName = "GRAY65";
-       break;
-       case Quantity_NOC_GRAY66 :
-               TheName = "GRAY66";
-       break;
-       case Quantity_NOC_GRAY67 :
-               TheName = "GRAY67";
-       break;
-       case Quantity_NOC_GRAY68 :
-               TheName = "GRAY68";
-       break;
-       case Quantity_NOC_GRAY69 :
-               TheName = "GRAY69";
-       break;
-       case Quantity_NOC_GRAY7 :
-               TheName = "GRAY7";
-       break;
-       case Quantity_NOC_GRAY70 :
-               TheName = "GRAY70";
-       break;
-       case Quantity_NOC_GRAY71 :
-               TheName = "GRAY71";
-       break;
-       case Quantity_NOC_GRAY72 :
-               TheName = "GRAY72";
-       break;
-       case Quantity_NOC_GRAY73 :
-               TheName = "GRAY73";
-       break;
-       case Quantity_NOC_GRAY74 :
-               TheName = "GRAY74";
-       break;
-       case Quantity_NOC_GRAY75 :
-               TheName = "GRAY75";
-       break;
-       case Quantity_NOC_GRAY76 :
-               TheName = "GRAY76";
-       break;
-       case Quantity_NOC_GRAY77 :
-               TheName = "GRAY77";
-       break;
-       case Quantity_NOC_GRAY78 :
-               TheName = "GRAY78";
-       break;
-       case Quantity_NOC_GRAY79 :
-               TheName = "GRAY79";
-       break;
-       case Quantity_NOC_GRAY8 :
-               TheName = "GRAY8";
-       break;
-       case Quantity_NOC_GRAY80 :
-               TheName = "GRAY80";
-       break;
-       case Quantity_NOC_GRAY81 :
-               TheName = "GRAY81";
-       break;
-       case Quantity_NOC_GRAY82 :
-               TheName = "GRAY82";
-       break;
-       case Quantity_NOC_GRAY83 :
-               TheName = "GRAY83";
-       break;
-       case Quantity_NOC_GRAY85 :
-               TheName = "GRAY85";
-       break;
-       case Quantity_NOC_GRAY86 :
-               TheName = "GRAY86";
-       break;
-       case Quantity_NOC_GRAY87 :
-               TheName = "GRAY87";
-       break;
-       case Quantity_NOC_GRAY88 :
-               TheName = "GRAY88";
-       break;
-       case Quantity_NOC_GRAY89 :
-               TheName = "GRAY89";
-       break;
-       case Quantity_NOC_GRAY9 :
-               TheName = "GRAY9";
-       break;
-       case Quantity_NOC_GRAY90 :
-               TheName = "GRAY90";
-       break;
-       case Quantity_NOC_GRAY91 :
-               TheName = "GRAY91";
-       break;
-       case Quantity_NOC_GRAY92 :
-               TheName = "GRAY92";
-       break;
-       case Quantity_NOC_GRAY93 :
-               TheName = "GRAY93";
-       break;
-       case Quantity_NOC_GRAY94 :
-               TheName = "GRAY94";
-       break;
-       case Quantity_NOC_GRAY95 :
-               TheName = "GRAY95";
-       break;
-       case Quantity_NOC_GREEN :
-               TheName = "GREEN";
-       break;
-       case Quantity_NOC_GREEN1 :
-               TheName = "GREEN1";
-       break;
-       case Quantity_NOC_GREEN2 :
-               TheName = "GREEN2";
-       break;
-       case Quantity_NOC_GREEN3 :
-               TheName = "GREEN3";
-       break;
-       case Quantity_NOC_GREEN4 :
-               TheName = "GREEN4";
-       break;
-       case Quantity_NOC_GREENYELLOW :
-               TheName = "GREENYELLOW";
-       break;
-       case Quantity_NOC_GRAY97 :
-               TheName = "GRAY97";
-       break;
-       case Quantity_NOC_GRAY98 :
-               TheName = "GRAY98";
-       break;
-       case Quantity_NOC_GRAY99 :
-               TheName = "GRAY99";
-       break;
-       case Quantity_NOC_HONEYDEW :
-               TheName = "HONEYDEW";
-       break;
-       case Quantity_NOC_HONEYDEW2 :
-               TheName = "HONEYDEW2";
-       break;
-       case Quantity_NOC_HONEYDEW3 :
-               TheName = "HONEYDEW3";
-       break;
-       case Quantity_NOC_HONEYDEW4 :
-               TheName = "HONEYDEW4";
-       break;
-       case Quantity_NOC_HOTPINK :
-               TheName = "HOTPINK";
-       break;
-       case Quantity_NOC_HOTPINK1 :
-               TheName = "HOTPINK1";
-       break;
-       case Quantity_NOC_HOTPINK2 :
-               TheName = "HOTPINK2";
-       break;
-       case Quantity_NOC_HOTPINK3 :
-               TheName = "HOTPINK3";
-       break;
-       case Quantity_NOC_HOTPINK4 :
-               TheName = "HOTPINK4";
-       break;
-       case Quantity_NOC_INDIANRED :
-               TheName = "INDIANRED";
-       break;
-       case Quantity_NOC_INDIANRED1 :
-               TheName = "INDIANRED1";
-       break;
-       case Quantity_NOC_INDIANRED2 :
-               TheName = "INDIANRED2";
-       break;
-       case Quantity_NOC_INDIANRED3 :
-               TheName = "INDIANRED3";
-       break;
-       case Quantity_NOC_INDIANRED4 :
-               TheName = "INDIANRED4";
-       break;
-       case Quantity_NOC_IVORY :
-               TheName = "IVORY";
-       break;
-       case Quantity_NOC_IVORY2 :
-               TheName = "IVORY2";
-       break;
-       case Quantity_NOC_IVORY3 :
-               TheName = "IVORY3";
-       break;
-       case Quantity_NOC_IVORY4 :
-               TheName = "IVORY4";
-       break;
-       case Quantity_NOC_KHAKI :
-               TheName = "KHAKI";
-       break;
-       case Quantity_NOC_KHAKI1 :
-               TheName = "KHAKI1";
-       break;
-       case Quantity_NOC_KHAKI2 :
-               TheName = "KHAKI2";
-       break;
-       case Quantity_NOC_KHAKI3 :
-               TheName = "KHAKI3";
-       break;
-       case Quantity_NOC_KHAKI4 :
-               TheName = "KHAKI4";
-       break;
-       case Quantity_NOC_LAVENDER :
-               TheName = "LAVENDER";
-       break;
-       case Quantity_NOC_LAVENDERBLUSH1 :
-               TheName = "LAVENDERBLUSH1";
-       break;
-       case Quantity_NOC_LAVENDERBLUSH2 :
-               TheName = "LAVENDERBLUSH2";
-       break;
-       case Quantity_NOC_LAVENDERBLUSH3 :
-               TheName = "LAVENDERBLUSH3";
-       break;
-       case Quantity_NOC_LAVENDERBLUSH4 :
-               TheName = "LAVENDERBLUSH4";
-       break;
-       case Quantity_NOC_LAWNGREEN :
-               TheName = "LAWNGREEN";
-       break;
-       case Quantity_NOC_LEMONCHIFFON1 :
-               TheName = "LEMONCHIFFON1";
-       break;
-       case Quantity_NOC_LEMONCHIFFON2 :
-               TheName = "LEMONCHIFFON2";
-       break;
-       case Quantity_NOC_LEMONCHIFFON3 :
-               TheName = "LEMONCHIFFON3";
-       break;
-       case Quantity_NOC_LEMONCHIFFON4 :
-               TheName = "LEMONCHIFFON4";
-       break;
-       case Quantity_NOC_LIGHTBLUE :
-               TheName = "LIGHTBLUE";
-       break;
-       case Quantity_NOC_LIGHTBLUE1 :
-               TheName = "LIGHTBLUE1";
-       break;
-       case Quantity_NOC_LIGHTBLUE2 :
-               TheName = "LIGHTBLUE2";
-       break;
-       case Quantity_NOC_LIGHTBLUE3 :
-               TheName = "LIGHTBLUE3";
-       break;
-       case Quantity_NOC_LIGHTBLUE4 :
-               TheName = "LIGHTBLUE4";
-       break;
-       case Quantity_NOC_LIGHTCORAL :
-               TheName = "LIGHTCORAL";
-       break;
-       case Quantity_NOC_LIGHTCYAN1 :
-               TheName = "LIGHTCYAN1";
-       break;
-       case Quantity_NOC_LIGHTCYAN2 :
-               TheName = "LIGHTCYAN2";
-       break;
-       case Quantity_NOC_LIGHTCYAN3 :
-               TheName = "LIGHTCYAN3";
-       break;
-       case Quantity_NOC_LIGHTCYAN4 :
-               TheName = "LIGHTCYAN4";
-       break;
-       case Quantity_NOC_LIGHTGOLDENROD :
-               TheName = "LIGHTGOLDENROD";
-       break;
-       case Quantity_NOC_LIGHTGOLDENROD1 :
-               TheName = "LIGHTGOLDENROD1";
-       break;
-       case Quantity_NOC_LIGHTGOLDENROD2 :
-               TheName = "LIGHTGOLDENROD2";
-       break;
-       case Quantity_NOC_LIGHTGOLDENROD3 :
-               TheName = "LIGHTGOLDENROD3";
-       break;
-       case Quantity_NOC_LIGHTGOLDENROD4 :
-               TheName = "LIGHTGOLDENROD4";
-       break;
-       case Quantity_NOC_LIGHTGOLDENRODYELLOW :
-               TheName = "LIGHTGOLDENRODYELLOW";
-       break;
-       case Quantity_NOC_LIGHTGRAY :
-               TheName = "LIGHTGRAY";
-       break;
-       case Quantity_NOC_LIGHTPINK :
-               TheName = "LIGHTPINK";
-       break;
-       case Quantity_NOC_LIGHTPINK1 :
-               TheName = "LIGHTPINK1";
-       break;
-       case Quantity_NOC_LIGHTPINK2 :
-               TheName = "LIGHTPINK2";
-       break;
-       case Quantity_NOC_LIGHTPINK3 :
-               TheName = "LIGHTPINK3";
-       break;
-       case Quantity_NOC_LIGHTPINK4 :
-               TheName = "LIGHTPINK4";
-       break;
-       case Quantity_NOC_LIGHTSALMON1 :
-               TheName = "LIGHTSALMON1";
-       break;
-       case Quantity_NOC_LIGHTSALMON2 :
-               TheName = "LIGHTSALMON2";
-       break;
-       case Quantity_NOC_LIGHTSALMON3 :
-               TheName = "LIGHTSALMON3";
-       break;
-       case Quantity_NOC_LIGHTSALMON4 :
-               TheName = "LIGHTSALMON4";
-       break;
-       case Quantity_NOC_LIGHTSEAGREEN :
-               TheName = "LIGHTSEAGREEN";
-       break;
-       case Quantity_NOC_LIGHTSKYBLUE :
-               TheName = "LIGHTSKYBLUE";
-       break;
-       case Quantity_NOC_LIGHTSKYBLUE1 :
-               TheName = "LIGHTSKYBLUE1";
-       break;
-       case Quantity_NOC_LIGHTSKYBLUE2 :
-               TheName = "LIGHTSKYBLUE2";
-       break;
-       case Quantity_NOC_LIGHTSKYBLUE3 :
-               TheName = "LIGHTSKYBLUE3";
-       break;
-       case Quantity_NOC_LIGHTSKYBLUE4 :
-               TheName = "LIGHTSKYBLUE4";
-       break;
-       case Quantity_NOC_LIGHTSLATEBLUE :
-               TheName = "LIGHTSLATEBLUE";
-       break;
-       case Quantity_NOC_LIGHTSLATEGRAY :
-               TheName = "LIGHTSLATEGRAY";
-       break;
-       case Quantity_NOC_LIGHTSTEELBLUE :
-               TheName = "LIGHTSTEELBLUE";
-       break;
-       case Quantity_NOC_LIGHTSTEELBLUE1 :
-               TheName = "LIGHTSTEELBLUE1";
-       break;
-       case Quantity_NOC_LIGHTSTEELBLUE2 :
-               TheName = "LIGHTSTEELBLUE2";
-       break;
-       case Quantity_NOC_LIGHTSTEELBLUE3 :
-               TheName = "LIGHTSTEELBLUE3";
-       break;
-       case Quantity_NOC_LIGHTSTEELBLUE4 :
-               TheName = "LIGHTSTEELBLUE4";
-       break;
-       case Quantity_NOC_LIGHTYELLOW :
-               TheName = "LIGHTYELLOW";
-       break;
-       case Quantity_NOC_LIGHTYELLOW2 :
-               TheName = "LIGHTYELLOW2";
-       break;
-       case Quantity_NOC_LIGHTYELLOW3 :
-               TheName = "LIGHTYELLOW3";
-       break;
-       case Quantity_NOC_LIGHTYELLOW4 :
-               TheName = "LIGHTYELLOW4";
-       break;
-       case Quantity_NOC_LIMEGREEN :
-               TheName = "LIMEGREEN";
-       break;
-       case Quantity_NOC_LINEN :
-               TheName = "LINEN";
-       break;
-       case Quantity_NOC_MAGENTA1 :
-               TheName = "MAGENTA1";
-       break;
-       case Quantity_NOC_MAGENTA2 :
-               TheName = "MAGENTA2";
-       break;
-       case Quantity_NOC_MAGENTA3 :
-               TheName = "MAGENTA3";
-       break;
-       case Quantity_NOC_MAGENTA4 :
-               TheName = "MAGENTA4";
-       break;
-       case Quantity_NOC_MAROON :
-               TheName = "MAROON";
-       break;
-       case Quantity_NOC_MAROON1 :
-               TheName = "MAROON1";
-       break;
-       case Quantity_NOC_MAROON2 :
-               TheName = "MAROON2";
-       break;
-       case Quantity_NOC_MAROON3 :
-               TheName = "MAROON3";
-       break;
-       case Quantity_NOC_MAROON4 :
-               TheName = "MAROON4";
-       break;
-       case Quantity_NOC_MEDIUMAQUAMARINE :
-               TheName = "MEDIUMAQUAMARINE";
-       break;
-       case Quantity_NOC_MEDIUMORCHID :
-               TheName = "MEDIUMORCHID";
-       break;
-       case Quantity_NOC_MEDIUMORCHID1 :
-               TheName = "MEDIUMORCHID1";
-       break;
-       case Quantity_NOC_MEDIUMORCHID2 :
-               TheName = "MEDIUMORCHID2";
-       break;
-       case Quantity_NOC_MEDIUMORCHID3 :
-               TheName = "MEDIUMORCHID3";
-       break;
-       case Quantity_NOC_MEDIUMORCHID4 :
-               TheName = "MEDIUMORCHID4";
-       break;
-       case Quantity_NOC_MEDIUMPURPLE :
-               TheName = "MEDIUMPURPLE";
-       break;
-       case Quantity_NOC_MEDIUMPURPLE1 :
-               TheName = "MEDIUMPURPLE1";
-       break;
-       case Quantity_NOC_MEDIUMPURPLE2 :
-               TheName = "MEDIUMPURPLE2";
-       break;
-       case Quantity_NOC_MEDIUMPURPLE3 :
-               TheName = "MEDIUMPURPLE3";
-       break;
-       case Quantity_NOC_MEDIUMPURPLE4 :
-               TheName = "MEDIUMPURPLE4";
-       break;
-       case Quantity_NOC_MEDIUMSEAGREEN :
-               TheName = "MEDIUMSEAGREEN";
-       break;
-       case Quantity_NOC_MEDIUMSLATEBLUE :
-               TheName = "MEDIUMSLATEBLUE";
-       break;
-       case Quantity_NOC_MEDIUMSPRINGGREEN :
-               TheName = "MEDIUMSPRINGGREEN";
-       break;
-       case Quantity_NOC_MEDIUMTURQUOISE :
-               TheName = "MEDIUMTURQUOISE";
-       break;
-       case Quantity_NOC_MEDIUMVIOLETRED :
-               TheName = "MEDIUMVIOLETRED";
-       break;
-       case Quantity_NOC_MIDNIGHTBLUE :
-               TheName = "MIDNIGHTBLUE";
-       break;
-       case Quantity_NOC_MINTCREAM :
-               TheName = "MINTCREAM";
-       break;
-       case Quantity_NOC_MISTYROSE :
-               TheName = "MISTYROSE";
-       break;
-       case Quantity_NOC_MISTYROSE2 :
-               TheName = "MISTYROSE2";
-       break;
-       case Quantity_NOC_MISTYROSE3 :
-               TheName = "MISTYROSE3";
-       break;
-       case Quantity_NOC_MISTYROSE4 :
-               TheName = "MISTYROSE4";
-       break;
-       case Quantity_NOC_MOCCASIN :
-               TheName = "MOCCASIN";
-       break;
-       case Quantity_NOC_NAVAJOWHITE1 :
-               TheName = "NAVAJOWHITE1";
-       break;
-       case Quantity_NOC_NAVAJOWHITE2 :
-               TheName = "NAVAJOWHITE2";
-       break;
-       case Quantity_NOC_NAVAJOWHITE3 :
-               TheName = "NAVAJOWHITE3";
-       break;
-       case Quantity_NOC_NAVAJOWHITE4 :
-               TheName = "NAVAJOWHITE4";
-       break;
-       case Quantity_NOC_NAVYBLUE :
-               TheName = "NAVYBLUE";
-       break;
-       case Quantity_NOC_OLDLACE :
-               TheName = "OLDLACE";
-       break;
-       case Quantity_NOC_OLIVEDRAB :
-               TheName = "OLIVEDRAB";
-       break;
-       case Quantity_NOC_OLIVEDRAB1 :
-               TheName = "OLIVEDRAB1";
-       break;
-       case Quantity_NOC_OLIVEDRAB2 :
-               TheName = "OLIVEDRAB2";
-       break;
-       case Quantity_NOC_OLIVEDRAB3 :
-               TheName = "OLIVEDRAB3";
-       break;
-       case Quantity_NOC_OLIVEDRAB4 :
-               TheName = "OLIVEDRAB4";
-       break;
-       case Quantity_NOC_ORANGE :
-               TheName = "ORANGE";
-       break;
-       case Quantity_NOC_ORANGE1 :
-               TheName = "ORANGE1";
-       break;
-       case Quantity_NOC_ORANGE2 :
-               TheName = "ORANGE2";
-       break;
-       case Quantity_NOC_ORANGE3 :
-               TheName = "ORANGE3";
-       break;
-       case Quantity_NOC_ORANGE4 :
-               TheName = "ORANGE4";
-       break;
-       case Quantity_NOC_ORANGERED :
-               TheName = "ORANGERED";
-       break;
-       case Quantity_NOC_ORANGERED1 :
-               TheName = "ORANGERED1";
-       break;
-       case Quantity_NOC_ORANGERED2 :
-               TheName = "ORANGERED2";
-       break;
-       case Quantity_NOC_ORANGERED3 :
-               TheName = "ORANGERED3";
-       break;
-       case Quantity_NOC_ORANGERED4 :
-               TheName = "ORANGERED4";
-       break;
-       case Quantity_NOC_ORCHID :
-               TheName = "ORCHID";
-       break;
-       case Quantity_NOC_ORCHID1 :
-               TheName = "ORCHID1";
-       break;
-       case Quantity_NOC_ORCHID2 :
-               TheName = "ORCHID2";
-       break;
-       case Quantity_NOC_ORCHID3 :
-               TheName = "ORCHID3";
-       break;
-       case Quantity_NOC_ORCHID4 :
-               TheName = "ORCHID4";
-       break;
-       case Quantity_NOC_PALEGOLDENROD :
-               TheName = "PALEGOLDENROD";
-       break;
-       case Quantity_NOC_PALEGREEN :
-               TheName = "PALEGREEN";
-       break;
-       case Quantity_NOC_PALEGREEN1 :
-               TheName = "PALEGREEN1";
-       break;
-       case Quantity_NOC_PALEGREEN2 :
-               TheName = "PALEGREEN2";
-       break;
-       case Quantity_NOC_PALEGREEN3 :
-               TheName = "PALEGREEN3";
-       break;
-       case Quantity_NOC_PALEGREEN4 :
-               TheName = "PALEGREEN4";
-       break;
-       case Quantity_NOC_PALETURQUOISE :
-               TheName = "PALETURQUOISE";
-       break;
-       case Quantity_NOC_PALETURQUOISE1 :
-               TheName = "PALETURQUOISE1";
-       break;
-       case Quantity_NOC_PALETURQUOISE2 :
-               TheName = "PALETURQUOISE2";
-       break;
-       case Quantity_NOC_PALETURQUOISE3 :
-               TheName = "PALETURQUOISE3";
-       break;
-       case Quantity_NOC_PALETURQUOISE4 :
-               TheName = "PALETURQUOISE4";
-       break;
-       case Quantity_NOC_PALEVIOLETRED :
-               TheName = "PALEVIOLETRED";
-       break;
-       case Quantity_NOC_PALEVIOLETRED1 :
-               TheName = "PALEVIOLETRED1";
-       break;
-       case Quantity_NOC_PALEVIOLETRED2 :
-               TheName = "PALEVIOLETRED2";
-       break;
-       case Quantity_NOC_PALEVIOLETRED3 :
-               TheName = "PALEVIOLETRED3";
-       break;
-       case Quantity_NOC_PALEVIOLETRED4 :
-               TheName = "PALEVIOLETRED4";
-       break;
-       case Quantity_NOC_PAPAYAWHIP :
-               TheName = "PAPAYAWHIP";
-       break;
-       case Quantity_NOC_PEACHPUFF :
-               TheName = "PEACHPUFF";
-       break;
-       case Quantity_NOC_PEACHPUFF2 :
-               TheName = "PEACHPUFF2";
-       break;
-       case Quantity_NOC_PEACHPUFF3 :
-               TheName = "PEACHPUFF3";
-       break;
-       case Quantity_NOC_PEACHPUFF4 :
-               TheName = "PEACHPUFF4";
-       break;
-       case Quantity_NOC_PERU :
-               TheName = "PERU";
-       break;
-       case Quantity_NOC_PINK :
-               TheName = "PINK";
-       break;
-       case Quantity_NOC_PINK1 :
-               TheName = "PINK1";
-       break;
-       case Quantity_NOC_PINK2 :
-               TheName = "PINK2";
-       break;
-       case Quantity_NOC_PINK3 :
-               TheName = "PINK3";
-       break;
-       case Quantity_NOC_PINK4 :
-               TheName = "PINK4";
-       break;
-       case Quantity_NOC_PLUM :
-               TheName = "PLUM";
-       break;
-       case Quantity_NOC_PLUM1 :
-               TheName = "PLUM1";
-       break;
-       case Quantity_NOC_PLUM2 :
-               TheName = "PLUM2";
-       break;
-       case Quantity_NOC_PLUM3 :
-               TheName = "PLUM3";
-       break;
-       case Quantity_NOC_PLUM4 :
-               TheName = "PLUM4";
-       break;
-       case Quantity_NOC_POWDERBLUE :
-               TheName = "POWDERBLUE";
-       break;
-       case Quantity_NOC_PURPLE :
-               TheName = "PURPLE";
-       break;
-       case Quantity_NOC_PURPLE1 :
-               TheName = "PURPLE1";
-       break;
-       case Quantity_NOC_PURPLE2 :
-               TheName = "PURPLE2";
-       break;
-       case Quantity_NOC_PURPLE3 :
-               TheName = "PURPLE3";
-       break;
-       case Quantity_NOC_PURPLE4 :
-               TheName = "PURPLE4";
-       break;
-       case Quantity_NOC_RED :
-               TheName = "RED";
-       break;
-       case Quantity_NOC_RED1 :
-               TheName = "RED1";
-       break;
-       case Quantity_NOC_RED2 :
-               TheName = "RED2";
-       break;
-       case Quantity_NOC_RED3 :
-               TheName = "RED3";
-       break;
-       case Quantity_NOC_RED4 :
-               TheName = "RED4";
-       break;
-       case Quantity_NOC_ROSYBROWN :
-               TheName = "ROSYBROWN";
-       break;
-       case Quantity_NOC_ROSYBROWN1 :
-               TheName = "ROSYBROWN1";
-       break;
-       case Quantity_NOC_ROSYBROWN2 :
-               TheName = "ROSYBROWN2";
-       break;
-       case Quantity_NOC_ROSYBROWN3 :
-               TheName = "ROSYBROWN3";
-       break;
-       case Quantity_NOC_ROSYBROWN4 :
-               TheName = "ROSYBROWN4";
-       break;
-       case Quantity_NOC_ROYALBLUE :
-               TheName = "ROYALBLUE";
-       break;
-       case Quantity_NOC_ROYALBLUE1 :
-               TheName = "ROYALBLUE1";
-       break;
-       case Quantity_NOC_ROYALBLUE2 :
-               TheName = "ROYALBLUE2";
-       break;
-       case Quantity_NOC_ROYALBLUE3 :
-               TheName = "ROYALBLUE3";
-       break;
-       case Quantity_NOC_ROYALBLUE4 :
-               TheName = "ROYALBLUE4";
-       break;
-       case Quantity_NOC_SADDLEBROWN :
-               TheName = "SADDLEBROWN";
-       break;
-       case Quantity_NOC_SALMON :
-               TheName = "SALMON";
-       break;
-       case Quantity_NOC_SALMON1 :
-               TheName = "SALMON1";
-       break;
-       case Quantity_NOC_SALMON2 :
-               TheName = "SALMON2";
-       break;
-       case Quantity_NOC_SALMON3 :
-               TheName = "SALMON3";
-       break;
-       case Quantity_NOC_SALMON4 :
-               TheName = "SALMON4";
-       break;
-       case Quantity_NOC_SANDYBROWN :
-               TheName = "SANDYBROWN";
-       break;
-       case Quantity_NOC_SEAGREEN :
-               TheName = "SEAGREEN";
-       break;
-       case Quantity_NOC_SEAGREEN1 :
-               TheName = "SEAGREEN1";
-       break;
-       case Quantity_NOC_SEAGREEN2 :
-               TheName = "SEAGREEN2";
-       break;
-       case Quantity_NOC_SEAGREEN3 :
-               TheName = "SEAGREEN3";
-       break;
-       case Quantity_NOC_SEAGREEN4 :
-               TheName = "SEAGREEN4";
-       break;
-       case Quantity_NOC_SEASHELL :
-               TheName = "SEASHELL";
-       break;
-       case Quantity_NOC_SEASHELL2 :
-               TheName = "SEASHELL2";
-       break;
-       case Quantity_NOC_SEASHELL3 :
-               TheName = "SEASHELL3";
-       break;
-       case Quantity_NOC_SEASHELL4 :
-               TheName = "SEASHELL4";
-       break;
-       case Quantity_NOC_BEET :
-               TheName = "BEET";
-       break;
-       case Quantity_NOC_TEAL :
-               TheName = "TEAL";
-       break;
-       case Quantity_NOC_SIENNA :
-               TheName = "SIENNA";
-       break;
-       case Quantity_NOC_SIENNA1 :
-               TheName = "SIENNA1";
-       break;
-       case Quantity_NOC_SIENNA2 :
-               TheName = "SIENNA2";
-       break;
-       case Quantity_NOC_SIENNA3 :
-               TheName = "SIENNA3";
-       break;
-       case Quantity_NOC_SIENNA4 :
-               TheName = "SIENNA4";
-       break;
-       case Quantity_NOC_SKYBLUE :
-               TheName = "SKYBLUE";
-       break;
-       case Quantity_NOC_SKYBLUE1 :
-               TheName = "SKYBLUE1";
-       break;
-       case Quantity_NOC_SKYBLUE2 :
-               TheName = "SKYBLUE2";
-       break;
-       case Quantity_NOC_SKYBLUE3 :
-               TheName = "SKYBLUE3";
-       break;
-       case Quantity_NOC_SKYBLUE4 :
-               TheName = "SKYBLUE4";
-       break;
-       case Quantity_NOC_SLATEBLUE :
-               TheName = "SLATEBLUE";
-       break;
-       case Quantity_NOC_SLATEBLUE1 :
-               TheName = "SLATEBLUE1";
-       break;
-       case Quantity_NOC_SLATEBLUE2 :
-               TheName = "SLATEBLUE2";
-       break;
-       case Quantity_NOC_SLATEBLUE3 :
-               TheName = "SLATEBLUE3";
-       break;
-       case Quantity_NOC_SLATEBLUE4 :
-               TheName = "SLATEBLUE4";
-       break;
-       case Quantity_NOC_SLATEGRAY1 :
-               TheName = "SLATEGRAY1";
-       break;
-       case Quantity_NOC_SLATEGRAY2 :
-               TheName = "SLATEGRAY2";
-       break;
-       case Quantity_NOC_SLATEGRAY3 :
-               TheName = "SLATEGRAY3";
-       break;
-       case Quantity_NOC_SLATEGRAY4 :
-               TheName = "SLATEGRAY4";
-       break;
-       case Quantity_NOC_SLATEGRAY :
-               TheName = "SLATEGRAY";
-       break;
-       case Quantity_NOC_SNOW :
-               TheName = "SNOW";
-       break;
-       case Quantity_NOC_SNOW2 :
-               TheName = "SNOW2";
-       break;
-       case Quantity_NOC_SNOW3 :
-               TheName = "SNOW3";
-       break;
-       case Quantity_NOC_SNOW4 :
-               TheName = "SNOW4";
-       break;
-       case Quantity_NOC_SPRINGGREEN :
-               TheName = "SPRINGGREEN";
-       break;
-       case Quantity_NOC_SPRINGGREEN2 :
-               TheName = "SPRINGGREEN2";
-       break;
-       case Quantity_NOC_SPRINGGREEN3 :
-               TheName = "SPRINGGREEN3";
-       break;
-       case Quantity_NOC_SPRINGGREEN4 :
-               TheName = "SPRINGGREEN4";
-       break;
-       case Quantity_NOC_STEELBLUE :
-               TheName = "STEELBLUE";
-       break;
-       case Quantity_NOC_STEELBLUE1 :
-               TheName = "STEELBLUE1";
-       break;
-       case Quantity_NOC_STEELBLUE2 :
-               TheName = "STEELBLUE2";
-       break;
-       case Quantity_NOC_STEELBLUE3 :
-               TheName = "STEELBLUE3";
-       break;
-       case Quantity_NOC_STEELBLUE4 :
-               TheName = "STEELBLUE4";
-       break;
-       case Quantity_NOC_TAN :
-               TheName = "TAN";
-       break;
-       case Quantity_NOC_TAN1 :
-               TheName = "TAN1";
-       break;
-       case Quantity_NOC_TAN2 :
-               TheName = "TAN2";
-       break;
-       case Quantity_NOC_TAN3 :
-               TheName = "TAN3";
-       break;
-       case Quantity_NOC_TAN4 :
-               TheName = "TAN4";
-       break;
-       case Quantity_NOC_THISTLE :
-               TheName = "THISTLE";
-       break;
-       case Quantity_NOC_THISTLE1 :
-               TheName = "THISTLE1";
-       break;
-       case Quantity_NOC_THISTLE2 :
-               TheName = "THISTLE2";
-       break;
-       case Quantity_NOC_THISTLE3 :
-               TheName = "THISTLE3";
-       break;
-       case Quantity_NOC_THISTLE4 :
-               TheName = "THISTLE4";
-       break;
-       case Quantity_NOC_TOMATO :
-               TheName = "TOMATO";
-       break;
-       case Quantity_NOC_TOMATO1 :
-               TheName = "TOMATO1";
-       break;
-       case Quantity_NOC_TOMATO2 :
-               TheName = "TOMATO2";
-       break;
-       case Quantity_NOC_TOMATO3 :
-               TheName = "TOMATO3";
-       break;
-       case Quantity_NOC_TOMATO4 :
-               TheName = "TOMATO4";
-       break;
-       case Quantity_NOC_TURQUOISE :
-               TheName = "TURQUOISE";
-       break;
-       case Quantity_NOC_TURQUOISE1 :
-               TheName = "TURQUOISE1";
-       break;
-       case Quantity_NOC_TURQUOISE2 :
-               TheName = "TURQUOISE2";
-       break;
-       case Quantity_NOC_TURQUOISE3 :
-               TheName = "TURQUOISE3";
-       break;
-       case Quantity_NOC_TURQUOISE4 :
-               TheName = "TURQUOISE4";
-       break;
-       case Quantity_NOC_VIOLET :
-               TheName = "VIOLET";
-       break;
-       case Quantity_NOC_VIOLETRED :
-               TheName = "VIOLETRED";
-       break;
-       case Quantity_NOC_VIOLETRED1 :
-               TheName = "VIOLETRED1";
-       break;
-       case Quantity_NOC_VIOLETRED2 :
-               TheName = "VIOLETRED2";
-       break;
-       case Quantity_NOC_VIOLETRED3 :
-               TheName = "VIOLETRED3";
-       break;
-       case Quantity_NOC_VIOLETRED4 :
-               TheName = "VIOLETRED4";
-       break;
-       case Quantity_NOC_WHEAT :
-               TheName = "WHEAT";
-       break;
-       case Quantity_NOC_WHEAT1 :
-               TheName = "WHEAT1";
-       break;
-       case Quantity_NOC_WHEAT2 :
-               TheName = "WHEAT2";
-       break;
-       case Quantity_NOC_WHEAT3 :
-               TheName = "WHEAT3";
-       break;
-       case Quantity_NOC_WHEAT4 :
-               TheName = "WHEAT4";
-       break;
-       case Quantity_NOC_WHITE :
-               TheName = "WHITE";
-       break;
-       case Quantity_NOC_WHITESMOKE :
-               TheName = "WHITESMOKE";
-       break;
-       case Quantity_NOC_YELLOW :
-               TheName = "YELLOW";
-       break;
-       case Quantity_NOC_YELLOW1 :
-               TheName = "YELLOW1";
-       break;
-       case Quantity_NOC_YELLOW2 :
-               TheName = "YELLOW2";
-       break;
-       case Quantity_NOC_YELLOW3 :
-               TheName = "YELLOW3";
-       break;
-       case Quantity_NOC_YELLOW4 :
-               TheName = "YELLOW4";
-       break;
-       case Quantity_NOC_YELLOWGREEN :
-               TheName = "YELLOWGREEN";
-       break;
-       default :
-               TheName = "UNDEFINED";
-               throw Standard_OutOfRange("Bad name");
-       break;
-}
-return (TheName);
+  // compute hue
+  float aHue = RGBHLS_H_UNDEFINED;
+  if (aSaturation != 0.0f)
+  {
+    aHue = 60.0f * (aPlus + aDiff / aDelta);
+    if (aHue < 0.0f) aHue += 360.0f;
+  }
+  return NCollection_Vec3<float> (aHue, aMax, aSaturation);
 }
 
-//\f
 ///////////////////////////////////////////////////////////////////////////////
 //////////////////////////////////// TESTS ////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////
+static void TestOfColor()
+{
+  Standard_Real H, L, S;
+  Standard_Real R, G, B;
+  Standard_Real DC, DI;
+  Standard_Integer i;
 
-void Quantity_Color::Test () {
-
-void TestOfColor ();
-
-       try {
-         OCC_CATCH_SIGNALS
-               TestOfColor ();
-       }
-
-       catch (Standard_Failure const& anException) {
-               std::cout << anException << std::endl;
-       }
-
-}
-
-void TestOfColor () {
-
-Standard_Real H, L, S;
-Standard_Real R, G, B;
-Standard_Real DC, DI;
-Standard_Integer i;
-
-std::cout << "definition color tests\n----------------------\n";
-
-Quantity_Color C1;
-Quantity_Color C2 (Quantity_NOC_ROYALBLUE2);
-Quantity_Color C3 (Quantity_NOC_SANDYBROWN);
-
-// An Introduction to Standard_Object-Oriented Programming and C++ p43
-// a comment for the "const char *const" declaration
-const char *const cyan = "YELLOW";
-const char *const blue = "ROYALBLUE2";
-const char *const brown = "SANDYBROWN";
-
-Standard_Real RR, GG, BB;
-
-const Standard_Real DELTA = 1.0e-4;
-
-std::cout << "Get values and names of color tests\n-----------------------------------\n";
-
-       C1.Values (R, G, B, Quantity_TOC_RGB);
-       if ( (R!=1.0) || (G!=1.0) || (B!=0.0) ) {
-               std::cout << "TEST_ERROR : Values () bad default color\n";
-               std::cout << "R, G, B values: " << R << " " << G << " " << B << "\n";
-       }
-       if ( (C1.Red ()!=1.0) || (C1.Green ()!=1.0) || (C1.Blue ()!=0.0) ) {
-               std::cout << "TEST_ERROR : Values () bad default color\n";
-               std::cout << "R, G, B values: " << C1.Red () << " " << C1.Green ()
-                       << " " << C1.Blue () << "\n";
-       }
-       if (strcmp (Quantity_Color::StringName (C1.Name()), cyan) != 0)
-               std::cout << "TEST_ERROR : StringName () " <<
-                       Quantity_Color::StringName (C1.Name()) << 
-                                        " != YELLOW\n";
-
-       RR=0.262745; GG=0.431373; BB=0.933333;
-       C1.SetValues (RR, GG, BB, Quantity_TOC_RGB);
-       C2.Values (R, G, B, Quantity_TOC_RGB);
-       if ( (Abs (RR-R) > DELTA) ||
-            (Abs (GG-G) > DELTA) ||
-            (Abs (BB-B) > DELTA) ) {
-               std::cout << "TEST_ERROR : Values () bad default color\n";
-               std::cout << "R, G, B values: " << R << " " << G << " " << B << "\n";
-       }
+  std::cout << "definition color tests\n----------------------\n";
 
-       if (C2 != C1) {
-               std::cout << "TEST_ERROR : IsDifferent ()\n";
-       }
-       if (C3 == C1) {
-               std::cout << "TEST_ERROR : IsEqual ()\n";
-       }
+  Quantity_Color C1;
+  Quantity_Color C2 (Quantity_NOC_ROYALBLUE2);
+  Quantity_Color C3 (Quantity_NOC_SANDYBROWN);
 
-       std::cout << "Distance C1,C2 " << C1.Distance (C2) << "\n";
-       std::cout << "Distance C1,C3 " << C1.Distance (C3) << "\n";
-       std::cout << "Distance C2,C3 " << C2.Distance (C3) << "\n";
-       std::cout << "SquareDistance C1,C2 " << C1.SquareDistance (C2) << "\n";
-       std::cout << "SquareDistance C1,C3 " << C1.SquareDistance (C3) << "\n";
-       std::cout << "SquareDistance C2,C3 " << C2.SquareDistance (C3) << "\n";
+  // An Introduction to Standard_Object-Oriented Programming and C++ p43
+  // a comment for the "const char *const" declaration
+  const char *const cyan = "YELLOW";
+  const char *const blue = "ROYALBLUE2";
+  const char *const brown = "SANDYBROWN";
 
-       if (strcmp (Quantity_Color::StringName (C2.Name()), blue) != 0)
-               std::cout << "TEST_ERROR : StringName () " <<
-                       Quantity_Color::StringName (C2.Name()) << 
-                        " != ROYALBLUE2\n";
+  Standard_Real RR, GG, BB;
 
-std::cout << "conversion rgbhls tests\n-----------------------\n";
-       Quantity_Color::RgbHls (R, G, B, H, L, S);
-       Quantity_Color::HlsRgb (H, L, S, R, G, B);
-       RR=0.262745; GG=0.431373; BB=0.933333;
-       if ( (Abs (RR-R) > DELTA) ||
-            (Abs (GG-G) > DELTA) ||
-            (Abs (BB-B) > DELTA) ) {
-               std::cout << "TEST_ERROR : RgbHls or HlsRgb bad conversion\n";
-               std::cout << "RGB init : " << RR << " " << GG << " " << BB << "\n";
-               std::cout << "RGB values : " << R << " " << G << " " << B << "\n";
-               std::cout << "Difference RGB : "
-                       << RR-R << " " << GG-G << " " << BB-B << "\n";
-       }
+  const Standard_Real DELTA = 1.0e-4;
 
-std::cout << "distance tests\n--------------\n";
-       R = (float ) 0.9568631; G = (float ) 0.6431371; B = (float ) 0.3764711;
-       C2.SetValues (R, G, B, Quantity_TOC_RGB);
-       if (C2.Distance (C3) > DELTA) {
-               std::cout << "TEST_ERROR : Distance () bad result\n";
-               std::cout << "Distance C2 and C3 : " << C2.Distance (C3) << "\n";
-       }
+  std::cout << "Get values and names of color tests\n-----------------------------------\n";
 
-       C2.Delta (C3, DC, DI);
-       if (Abs (DC) > DELTA)
-               std::cout << "TEST_ERROR : Delta () bad result for DC\n";
-       if (Abs (DI) > DELTA)
-               std::cout << "TEST_ERROR : Delta () bad result for DI\n";
+  C1.Values (R, G, B, Quantity_TOC_RGB);
+  if ((R!=1.0) || (G!=1.0) || (B!=0.0))
+  {
+    std::cout << "TEST_ERROR : Values () bad default color\n";
+    std::cout << "R, G, B values: " << R << " " << G << " " << B << "\n";
+  }
+  if ( (C1.Red ()!=1.0) || (C1.Green ()!=1.0) || (C1.Blue ()!=0.0) )
+  {
+    std::cout << "TEST_ERROR : Values () bad default color\n";
+    std::cout << "R, G, B values: " << C1.Red () << " " << C1.Green () << " " << C1.Blue () << "\n";
+  }
+  if (strcmp (Quantity_Color::StringName (C1.Name()), cyan) != 0)
+  {
+    std::cout << "TEST_ERROR : StringName () " << Quantity_Color::StringName (C1.Name()) <<  " != YELLOW\n";
+  }
 
-std::cout << "name tests\n----------\n";
-       R = (float ) 0.9568631; G = (float ) 0.6431371; B = (float ) 0.3764711;
-       C2.SetValues (R, G, B, Quantity_TOC_RGB);
-       if (strcmp (Quantity_Color::StringName (C2.Name()), brown) != 0)
-               std::cout << "TEST_ERROR : StringName () " <<
-                       Quantity_Color::StringName (C2.Name()) << 
-                        " != SANDYBROWN\n";
+  RR=0.262745; GG=0.431373; BB=0.933333;
+  C1.SetValues (RR, GG, BB, Quantity_TOC_RGB);
+  C2.Values (R, G, B, Quantity_TOC_RGB);
+  if ((Abs (RR-R) > DELTA)
+   || (Abs (GG-G) > DELTA)
+   || (Abs (BB-B) > DELTA))
+  {
+    std::cout << "TEST_ERROR : Values () bad default color\n";
+    std::cout << "R, G, B values: " << R << " " << G << " " << B << "\n";
+  }
 
-std::cout << "contrast change tests\n---------------------\n";
-       for (i=1; i<=10; i++) {
-               C2.ChangeContrast (10.);
-               C2.ChangeContrast (-9.09090909);
-       }
-       C2.Values (R, G, B, Quantity_TOC_RGB);
-       RR=0.956863; GG=0.6431371; BB=0.3764711;
-       if ( (Abs (RR-R) > DELTA) ||
-            (Abs (GG-G) > DELTA) ||
-            (Abs (BB-B) > DELTA) ) {
-               std::cout << "TEST_ERROR : ChangeContrast () bad values\n";
-               std::cout << "RGB init : " << RR << " " << GG << " " << BB << "\n";
-               std::cout << "RGB values : " << R << " " << G << " " << B << "\n";
-       }
+  if (C2 != C1)
+  {
+    std::cout << "TEST_ERROR : IsDifferent ()\n";
+  }
+  if (C3 == C1)
+  {
+    std::cout << "TEST_ERROR : IsEqual ()\n";
+  }
 
-}
+  std::cout << "Distance C1,C2 " << C1.Distance (C2) << "\n";
+  std::cout << "Distance C1,C3 " << C1.Distance (C3) << "\n";
+  std::cout << "Distance C2,C3 " << C2.Distance (C3) << "\n";
+  std::cout << "SquareDistance C1,C2 " << C1.SquareDistance (C2) << "\n";
+  std::cout << "SquareDistance C1,C3 " << C1.SquareDistance (C3) << "\n";
+  std::cout << "SquareDistance C2,C3 " << C2.SquareDistance (C3) << "\n";
 
-/*
- *
- * Objet       :       Algorithme de conversion HLS vers RGB
- *
- * Rappels     :       RGB et HLS sont 2 modeles de representation
- *                     des couleurs
- *
- * Parametres  :       h, l, s connus avec h dans [0,360] et l et s dans [0,1]
- *                     r, g, b dans [0,1]
- *
- * Reference   :       La synthese d'images, Collection Hermes
- *
- * Adaptation  :       Cal     07 fevrier 1992
- *
- * Modification        :       ?
- */
+  if (strcmp (Quantity_Color::StringName (C2.Name()), blue) != 0)
+  {
+    std::cout << "TEST_ERROR : StringName () " << Quantity_Color::StringName (C2.Name()) <<  " != ROYALBLUE2\n";
+  }
 
-void call_hlsrgb (float h, float l, float s, float& r, float& g, float& b)
-/* parametres d'entree : h, l, s connus avec h dans [0,360]
- * et l et s dans [0,1] */
-/* parametres de sortie : r, g, b dans [0,1] */
-{
+  std::cout << "conversion rgbhls tests\n-----------------------\n";
+  Quantity_Color::RgbHls (R, G, B, H, L, S);
+  Quantity_Color::HlsRgb (H, L, S, R, G, B);
+  RR=0.262745; GG=0.431373; BB=0.933333;
+  if ((Abs (RR-R) > DELTA)
+   || (Abs (GG-G) > DELTA)
+   || (Abs (BB-B) > DELTA))
+  {
+    std::cout << "TEST_ERROR : RgbHls or HlsRgb bad conversion\n";
+    std::cout << "RGB init : " << RR << " " << GG << " " << BB << "\n";
+    std::cout << "RGB values : " << R << " " << G << " " << B << "\n";
+    std::cout << "Difference RGB : " << RR-R << " " << GG-G << " " << BB-B << "\n";
+  }
 
-       float hcopy;
-       float lmuls;
-       int hi;
+  std::cout << "distance tests\n--------------\n";
+  R = (float ) 0.9568631; G = (float ) 0.6431371; B = (float ) 0.3764711;
+  C2.SetValues (R, G, B, Quantity_TOC_RGB);
+  if (C2.Distance (C3) > DELTA)
+  {
+    std::cout << "TEST_ERROR : Distance () bad result\n";
+    std::cout << "Distance C2 and C3 : " << C2.Distance (C3) << "\n";
+  }
 
-       hcopy = h;
-       lmuls = l * s;
+  C2.Delta (C3, DC, DI);
+  if (Abs (DC) > DELTA)
+  {
+    std::cout << "TEST_ERROR : Delta () bad result for DC\n";
+  }
+  if (Abs (DI) > DELTA)
+  {
+    std::cout << "TEST_ERROR : Delta () bad result for DI\n";
+  }
 
-       if (s == 0.0 && h == RGBHLS_H_UNDEFINED) {
-             /* cas achromatique */
-             r = g = b = l;
-       }
-       else {
-          /* cas chromatique */
-          if (hcopy == 360.0) {
-             hcopy = 0.0;
-             hi = 0;
-          }
-          else {
-             hcopy /= 60.0;
-             hi = (int)hcopy;
-          }
+  std::cout << "name tests\n----------\n";
+  R = (float ) 0.9568631; G = (float ) 0.6431371; B = (float ) 0.3764711;
+  C2.SetValues (R, G, B, Quantity_TOC_RGB);
+  if (strcmp (Quantity_Color::StringName (C2.Name()), brown) != 0)
+  {
+    std::cout << "TEST_ERROR : StringName () " << Quantity_Color::StringName (C2.Name()) <<  " != SANDYBROWN\n";
+  }
 
-          switch (hi) {
-             case 0 :
-                       /*
-                          r = l;
-                          g = l * (1 - (s * (1 - (hcopy - hi))));
-                          b = l * (1 - s);
-                        */
-                       r = l;
-                       b = l - lmuls;
-                       g = b + lmuls * hcopy;
-             break;
-             case 1 :
-                       /*
-                          r = l * (1 - (s * (hcopy - hi)));
-                          g = l;
-                          b = l * (1 - s);
-                        */
-                       r = l + lmuls - lmuls * hcopy;
-                       g = l;
-                       b = l - lmuls;
-             break;
-             case 2 :
-                       /*
-                          r = l * (1 - s);
-                          g = l;
-                          b = l * (1 - (s * (1 - (hcopy - hi))));
-                        */
-                       r = l - lmuls;
-                       g = l;
-                       b = l - 3 * lmuls + lmuls * hcopy;
-             break;
-             case 3 :
-                       /*
-                          r = l * (1 - s);
-                          g = l * (1 - (s * (hcopy - hi)));
-                          b = l;
-                        */
-                       r = l - lmuls;
-                       g = l + 3 * lmuls - lmuls * hcopy;
-                       b = l;
-             break;
-             case 4 :
-                       /*
-                          r = l * (1 - (s * (1 - (hcopy - hi))));
-                          g = l * (1 - s);
-                          b = l;
-                        */
-                       r = l - 5 * lmuls + lmuls * hcopy;
-                       g = l - lmuls;
-                       b = l;
-             break;
-             case 5 :
-                       /*
-                          r = l;
-                          g = l * (1 - s);
-                          b = l * (1 - (s * (hcopy - hi)));
-                        */
-                       r = l;
-                       g = l - lmuls;
-                       b = l + 5 * lmuls - lmuls * hcopy;
-             break;
-          }
-       }
+  std::cout << "contrast change tests\n---------------------\n";
+  for (i=1; i<=10; i++)
+  {
+    C2.ChangeContrast (10.);
+    C2.ChangeContrast (-9.09090909);
+  }
+  C2.Values (R, G, B, Quantity_TOC_RGB);
+  RR=0.956863; GG=0.6431371; BB=0.3764711;
+  if ((Abs (RR-R) > DELTA)
+   || (Abs (GG-G) > DELTA)
+   || (Abs (BB-B) > DELTA))
+  {
+    std::cout << "TEST_ERROR : ChangeContrast () bad values\n";
+    std::cout << "RGB init : " << RR << " " << GG << " " << BB << "\n";
+    std::cout << "RGB values : " << R << " " << G << " " << B << "\n";
+  }
 }
 
-/*
- * Objet       :       Algorithme de conversion RGB vers HLS
- *
- * Rappels     :       RGB et HLS sont 2 modeles de representation
- *                     des couleurs
- *
- * Parametres  :       r, g, b connus dans [0,1]
- *                     h, l, s avec h dans [0,360] et l et s dans [0,1]
- *
- * Reference   :       La synthese d'images, Collection Hermes
- *
- * Creation    :       Cal     04 fevrier 1992
- *
- * Modification        :       ?
- */
-
-void call_rgbhls (float r, float g, float b, float& h, float& l, float& s)
-/* parametres d'entree : r, g, b connus dans [0,1] */
-/* parametres de sortie : h, l, s avec h dans [0,360] et l et s dans [0,1] */
+// =======================================================================
+// function : Test
+// purpose  :
+// =======================================================================
+void Quantity_Color::Test()
 {
-
-       float max, min;
-       float plus, diff;
-       float delta;
-
-       /* calcul du max entre r, g et b */
-                    { plus = 0.0; diff = g - b; max = r; }
-       if (g > max) { plus = 2.0; diff = b - r; max = g; }
-       if (b > max) { plus = 4.0; diff = r - g; max = b; }
-
-       /* calcul du min entre r, g et b */
-       min = r;
-       if (g < min) min = g;
-       if (b < min) min = b;
-
-       delta = max - min;
-
-       /* calcul de la luminance */
-       l = max;
-
-       /* calcul de la saturation */
-       s = 0.0;
-       if (max != 0.0) s = delta / max;
-
-       /* calcul de la teinte */
-       if (s == 0.0)
-          /* cas des gris */
-          h = RGBHLS_H_UNDEFINED;
-       else {
-          h = (float ) 60.0 * ( plus + diff / delta );
-          if (h < 0.0) h += 360.0;
-       }
+  try
+  {
+    OCC_CATCH_SIGNALS
+    TestOfColor();
+  }
+  catch (Standard_Failure const& anException)
+  {
+    std::cout << anException << std::endl;
+  }
 }
 
 //=======================================================================
@@ -3933,5 +573,5 @@ void call_rgbhls (float r, float g, float b, float& h, float& l, float& s)
 void Quantity_Color::DumpJson (Standard_OStream& theOStream, const Standard_Integer) const
 {
   OCCT_DUMP_CLASS_BEGIN (theOStream, Quantity_Color);
-  OCCT_DUMP_FIELD_VALUES_NUMERICAL (theOStream, "RGB", 3, MyRed, MyGreen, MyBlue)
+  OCCT_DUMP_FIELD_VALUES_NUMERICAL (theOStream, "RGB", 3, myRgb.r(), myRgb.g(), myRgb.b())
 }
index a5b3ef3..33992d5 100644 (file)
 #include <Quantity_TypeOfColor.hxx>
 #include <TCollection_AsciiString.hxx>
 #include <NCollection_Vec4.hxx>
-class Quantity_ColorDefinitionError;
-
-
-//! This class allows the definition of a colour.
-//! The names of the colours are from the X11 specification.
-//! color object may be used for numerous applicative purposes.
-//! A color is defined by:
-//! -   its respective quantities of red, green and blue (R-G-B values), or
-//! -   its hue angle and its values of lightness and  saturation (H-L-S values).
-//! These two color definition systems are equivalent.
-//! Use this class in conjunction with:
-//! -   the Quantity_TypeOfColor enumeration
-//! which identifies the color definition system you are using,
-//! -   the Quantity_NameOfColor enumeration
-//! which lists numerous predefined colors and
-//! identifies them by their name.
-class Quantity_Color 
+
+//! This class allows the definition of an RGB color as triplet of 3 normalized floating point values (red, green, blue).
+class Quantity_Color
 {
 public:
 
   DEFINE_STANDARD_ALLOC
 
-  
-  //! Creates Quantity_NOC_YELLOW color.
-  Standard_EXPORT Quantity_Color();
-  
+  //! Creates Quantity_NOC_YELLOW color (for historical reasons).
+  Quantity_Color() : myRgb (valuesOf (Quantity_NOC_YELLOW, Quantity_TOC_RGB)) {}
+
   //! Creates the color from enumeration value.
-  Standard_EXPORT Quantity_Color(const Quantity_NameOfColor AName);
-  
+  Quantity_Color (const Quantity_NameOfColor theName) : myRgb (valuesOf (theName, Quantity_TOC_RGB)) {}
+
   //! Creates a color according to the definition system theType.
-  //! Quantity_TOC_RGB:
-  //!  - theR1 the value of Red   within range [0.0; 1.0]
-  //!  - theR2 the value of Green within range [0.0; 1.0]
-  //!  - theR3 the value of Blue  within range [0.0; 1.0]
-  //!
-  //! Quantity_TOC_HLS:
-  //!  - theR1 is the Hue (H) angle in degrees within range [0.0; 360.0], 0.0 being Red.
-  //!    Value -1.0 is a special value reserved for grayscale color (S should be 0.0).
-  //!  - theR2 is the Lightness  (L) within range [0.0; 1.0]
-  //!  - theR3 is the Saturation (S) within range [0.0; 1.0]
+  //! Throws exception if values are out of range.
   Standard_EXPORT Quantity_Color (const Standard_Real theR1,
                                   const Standard_Real theR2,
                                   const Standard_Real theR3,
@@ -73,156 +49,108 @@ public:
   //! Define color from RGB values.
   Standard_EXPORT explicit Quantity_Color (const NCollection_Vec3<float>& theRgb);
 
-  //! Increases or decreases the contrast by <ADelta>.
-  //! <ADelta> is a percentage. Any value greater than zero
-  //! will increase the contrast.
-  //! The variation is expressed as a percentage of the
-  //! current value.
-  //! It is a variation of the saturation.
-  Standard_EXPORT void ChangeContrast (const Standard_Real ADelta);
-  
-  //! Increases or decreases the intensity by <ADelta>.
-  //! <ADelta> is a percentage. Any value greater than zero
-  //! will increase the intensity.
-  //! The variation is expressed as a percentage of the
-  //! current value.
-  //! It is a variation of the lightness.
-  Standard_EXPORT void ChangeIntensity (const Standard_Real ADelta);
-  
-  //! Updates the colour <me> from the definition of the
-  //! colour <AName>.
-  Standard_EXPORT void SetValues (const Quantity_NameOfColor AName);
-  
+  //! Returns the name of the nearest color from the Quantity_NameOfColor enumeration.
+  Standard_EXPORT Quantity_NameOfColor Name() const;
+
+  //! Updates the color from specified named color.
+  void SetValues (const Quantity_NameOfColor theName) { myRgb = valuesOf (theName, Quantity_TOC_RGB); }
+
+  //! Return the color as vector of 3 float elements.
+  operator const NCollection_Vec3<float>&() const { return myRgb; }
+
+  //! Returns in theR1, theR2 and theR3 the components of this color according to the color system definition theType.
+  Standard_EXPORT void Values (Standard_Real& theR1,
+                               Standard_Real& theR2,
+                               Standard_Real& theR3,
+                               const Quantity_TypeOfColor theType) const;
+
   //! Updates a color according to the mode specified by theType.
-  //! Quantity_TOC_RGB:
-  //!  - theR1 the value of Red   within range [0.0; 1.0]
-  //!  - theR2 the value of Green within range [0.0; 1.0]
-  //!  - theR3 the value of Blue  within range [0.0; 1.0]
-  //!
-  //! Quantity_TOC_HLS:
-  //!  - theR1 is the Hue (H) angle in degrees within range [0.0; 360.0], 0.0 being Red.
-  //!    -1.0 is a special value reserved for grayscale color (S should be 0.0).
-  //!  - theR2 is the Lightness  (L) within range [0.0; 1.0]
-  //!  - theR3 is the Saturation (S) within range [0.0; 1.0]
+  //! Throws exception if values are out of range.
   Standard_EXPORT void SetValues (const Standard_Real theR1,
                                   const Standard_Real theR2,
                                   const Standard_Real theR3,
                                   const Quantity_TypeOfColor theType);
-  
-  //! Returns the percentage change of contrast and intensity
-  //! between <me> and <AColor>.
-  //! <DC> and <DI> are percentages, either positive or negative.
-  //! The calculation is with respect to the current value of <me>
-  //! If <DC> is positive then <me> is more contrasty.
-  //! If <DI> is positive then <me> is more intense.
-  Standard_EXPORT void Delta (const Quantity_Color& AColor, Standard_Real& DC, Standard_Real& DI) const;
-  
-  //! Returns the distance between two colours. It's a
-  //! value between 0 and the square root of 3
-  //! (the black/white distance)
-  Standard_EXPORT Standard_Real Distance (const Quantity_Color& AColor) const;
-  
-  //! Returns the square of distance between two colours.
-  Standard_EXPORT Standard_Real SquareDistance (const Quantity_Color& AColor) const;
-  
-  //! Returns the Blue component (quantity of blue) of the color within range [0.0; 1.0].
-  Standard_EXPORT Standard_Real Blue() const;
-  
+
+  //! Returns the Red component (quantity of red) of the color within range [0.0; 1.0].
+  Standard_Real Red() const { return myRgb.r(); }
+
   //! Returns the Green component (quantity of green) of the color within range [0.0; 1.0].
-  Standard_EXPORT Standard_Real Green() const;
-  
+  Standard_Real Green() const { return myRgb.g(); }
+
+  //! Returns the Blue component (quantity of blue) of the color within range [0.0; 1.0].
+  Standard_Real Blue() const { return myRgb.b(); }
+
   //! Returns the Hue component (hue angle) of the color
   //! in degrees within range [0.0; 360.0], 0.0 being Red.
   //! -1.0 is a special value reserved for grayscale color (S should be 0.0)
-  Standard_EXPORT Standard_Real Hue() const;
-  
-  //! Returns Standard_True if the distance between <me> and
-  //! <Other> is greater than Epsilon ().
-  Standard_EXPORT Standard_Boolean IsDifferent (const Quantity_Color& Other) const;
-Standard_Boolean operator != (const Quantity_Color& Other) const
-{
-  return IsDifferent(Other);
-}
-  
-  //! Returns true if the Other color is
-  //! -   different from, or
-  //! -   equal to this color.
-  //! Two colors are considered to be equal if their
-  //! distance is no greater than Epsilon().
-  //! These methods are aliases of operator != and operator ==.
-  Standard_EXPORT Standard_Boolean IsEqual (const Quantity_Color& Other) const;
-Standard_Boolean operator == (const Quantity_Color& Other) const
-{
-  return IsEqual(Other);
-}
-  
+  Standard_Real Hue() const { return Convert_sRGB_To_HLS (myRgb)[0]; }
+
   //! Returns the Light component (value of the lightness) of the color within range [0.0; 1.0].
-  Standard_EXPORT Standard_Real Light() const;
-  
-  //! Returns the name of the color defined by its
-  //! quantities of red R, green G and blue B; more
-  //! precisely this is the nearest color from the
-  //! Quantity_NameOfColor enumeration.
-  //! Exceptions
-  //! Standard_OutOfRange if R, G or B is less than 0. or greater than 1.
-  Standard_EXPORT Quantity_NameOfColor Name() const;
-  
-  //! Returns the Red component (quantity of red) of the color within range [0.0; 1.0].
-  Standard_EXPORT Standard_Real Red() const;
-  
+  Standard_Real Light() const { return Convert_sRGB_To_HLS (myRgb)[1]; }
+
+  //! Increases or decreases the intensity (variation of the lightness).
+  //! The delta is a percentage. Any value greater than zero will increase the intensity.
+  //! The variation is expressed as a percentage of the current value.
+  Standard_EXPORT void ChangeIntensity (const Standard_Real theDelta);
+
   //! Returns the Saturation component (value of the saturation) of the color within range [0.0; 1.0].
-  Standard_EXPORT Standard_Real Saturation() const;
+  Standard_Real Saturation() const { return Convert_sRGB_To_HLS (myRgb)[2]; }
 
-  //! Return the color as vector of 3 float elements.
-  operator const NCollection_Vec3<float>&() const { return *(const NCollection_Vec3<float>* )this; }
+  //! Increases or decreases the contrast (variation of the saturation).
+  //! The delta is a percentage. Any value greater than zero will increase the contrast.
+  //! The variation is expressed as a percentage of the current value.
+  Standard_EXPORT void ChangeContrast (const Standard_Real theDelta);
 
-  //! Returns in theR1, theR2 and theR3 the components of this color according to the color system definition theType.
-  //! If theType is Quantity_TOC_RGB:
-  //!  - theR1 the value of Red   between 0.0 and 1.0
-  //!  - theR2 the value of Green between 0.0 and 1.0
-  //!  - theR3 the value of Blue  between 0.0 and 1.0
-  //! If theType is Quantity_TOC_HLS:
-  //!  - theR1 is the Hue (H) angle in degrees within range [0.0; 360.0], 0.0 being Red.
-  //!    -1.0 is a special value reserved for grayscale color (S should be 0.0).
-  //!  - theR2 is the Lightness  (L) within range [0.0; 1.0]
-  //!  - theR3 is the Saturation (S) within range [0.0; 1.0]
-  Standard_EXPORT void Values (Standard_Real& theR1,
-                               Standard_Real& theR2,
-                               Standard_Real& theR3,
-                               const Quantity_TypeOfColor theType) const;
-  
-  //! Sets the specified value used to compare <me> and
-  //! an other color in IsDifferent and in IsEqual methods.
-  //! Warning: The default value is 0.0001
-  Standard_EXPORT static void SetEpsilon (const Standard_Real AnEpsilon);
-  
-  //! Returns the specified value used to compare <me> and
-  //! an other color in IsDifferent and in IsEqual methods.
-  Standard_EXPORT static Standard_Real Epsilon();
-  
-  //! Returns the name of the colour for which the RGB components
-  //! are nearest to <R>, <G> and <B>.
-  Standard_EXPORT static Quantity_NameOfColor Name (const Standard_Real R, const Standard_Real G, const Standard_Real B);
-  
-  //! Returns the name of the color identified by
-  //! AName in the Quantity_NameOfColor enumeration.
-  //! For example, the name of the color which
-  //! corresponds to Quantity_NOC_BLACK is "BLACK".
-  //! Exceptions
-  //! Standard_OutOfRange if AName in not known
-  //! in the Quantity_NameOfColor enumeration.
-  Standard_EXPORT static Standard_CString StringName (const Quantity_NameOfColor AColor);
+  //! Returns TRUE if the distance between two colors is greater than Epsilon().
+  Standard_Boolean IsDifferent (const Quantity_Color& theOther) const { return (Distance (theOther) > Epsilon()); }
+
+  //! Alias to IsDifferent().
+  Standard_Boolean operator!=  (const Quantity_Color& theOther) const { return IsDifferent (theOther); }
+
+  //! Returns TRUE if the distance between two colors is no greater than Epsilon().
+  Standard_Boolean IsEqual    (const Quantity_Color& theOther) const { return (Distance (theOther) <= Epsilon()); }
+
+  //! Alias to IsEqual().
+  Standard_Boolean operator== (const Quantity_Color& theOther) const { return IsEqual (theOther); }
   
+  //! Returns the distance between two colors. It's a value between 0 and the square root of 3 (the black/white distance).
+  Standard_Real Distance (const Quantity_Color& theColor) const
+  {
+    return (NCollection_Vec3<Standard_Real> (myRgb) - NCollection_Vec3<Standard_Real> (theColor.myRgb)).Modulus();
+  }
+
+  //! Returns the square of distance between two colors.
+  Standard_Real SquareDistance (const Quantity_Color& theColor) const
+  {
+    return (NCollection_Vec3<Standard_Real> (myRgb) - NCollection_Vec3<Standard_Real> (theColor.myRgb)).SquareModulus();
+  }
+
+  //! Returns the percentage change of contrast and intensity between this and another color.
+  //! <DC> and <DI> are percentages, either positive or negative.
+  //! The calculation is with respect to this color.
+  //! If <DC> is positive then <me> is more contrasty.
+  //! If <DI> is positive then <me> is more intense.
+  Standard_EXPORT void Delta (const Quantity_Color& theColor,
+                              Standard_Real& DC, Standard_Real& DI) const;
+
+public:
+
+  //! Returns the color from Quantity_NameOfColor enumeration nearest to specified RGB values.
+  static Quantity_NameOfColor Name (const Standard_Real theR, const Standard_Real theG, const Standard_Real theB)
+  {
+    const Quantity_Color aColor (theR, theG, theB, Quantity_TOC_RGB);
+    return aColor.Name();
+  }
+
+  //! Returns the name of the color identified by the given Quantity_NameOfColor enumeration value.
+  Standard_EXPORT static Standard_CString StringName (const Quantity_NameOfColor theColor);
+
   //! Finds color from predefined names.
-  //! For example, the name of the color which
-  //! corresponds to "BLACK" is Quantity_NOC_BLACK.
-  //! Returns false if name is unknown.
+  //! For example, the name of the color which corresponds to "BLACK" is Quantity_NOC_BLACK.
+  //! Returns FALSE if name is unknown.
   Standard_EXPORT static Standard_Boolean ColorFromName (const Standard_CString theName, Quantity_NameOfColor& theColor);
 
   //! Finds color from predefined names.
-  //! For example, the name of the color which
-  //! corresponds to "BLACK" is Quantity_NOC_BLACK.
-  //! Returns false if name is unknown.
   //! @param theColorNameString the color name
   //! @param theColor a found color
   //! @return false if the color name is unknown, or true if the search by color name was successful
@@ -237,7 +165,7 @@ Standard_Boolean operator == (const Quantity_Color& Other) const
     return true;
   }
 
-  //! Parses the string as a hex color (like "#FF0" for short RGB color, or "#FFFF00" for RGB color)
+  //! Parses the string as a hex color (like "#FF0" for short sRGB color, or "#FFFF00" for sRGB color)
   //! @param theHexColorString the string to be parsed
   //! @param theColor a color that is a result of parsing
   //! @return true if parsing was successful, or false otherwise
@@ -255,20 +183,153 @@ Standard_Boolean operator == (const Quantity_Color& Other) const
     return aBuff;
   }
 
+  //! Converts sRGB components into HLS ones.
+  Standard_EXPORT static NCollection_Vec3<float> Convert_sRGB_To_HLS (const NCollection_Vec3<float>& theRgb);
+
   //! Converts HLS components into RGB ones.
-  Standard_EXPORT static void HlsRgb (const Standard_Real H, const Standard_Real L, const Standard_Real S, Standard_Real& R, Standard_Real& G, Standard_Real& B);
-  
-  //! Converts RGB components into HLS ones.
-  Standard_EXPORT static void RgbHls (const Standard_Real R, const Standard_Real G, const Standard_Real B, Standard_Real& H, Standard_Real& L, Standard_Real& S);
-  
-  //! Convert the Color value to ARGB integer value.
-  //! theARGB has Alpha equal to zero, so the output is
-  //! formatted as 0x00RRGGBB
-  Standard_EXPORT static void Color2argb (const Quantity_Color& theColor, Standard_Integer& theARGB);
-  
+  Standard_EXPORT static NCollection_Vec3<float> Convert_HLS_To_sRGB (const NCollection_Vec3<float>& theHls);
+
+  //! Converts Linear RGB components into HLS ones.
+  static NCollection_Vec3<float> Convert_LinearRGB_To_HLS (const NCollection_Vec3<float>& theRgb)
+  {
+    return Convert_sRGB_To_HLS (Convert_LinearRGB_To_sRGB (theRgb));
+  }
+
+  //! Converts HLS components into linear RGB ones.
+  static NCollection_Vec3<float> Convert_HLS_To_LinearRGB (const NCollection_Vec3<float>& theHls)
+  {
+    return Convert_sRGB_To_LinearRGB (Convert_HLS_To_sRGB (theHls));
+  }
+
+  //! Convert the color value to ARGB integer value, with alpha equals to 0.
+  //! So the output is formatted as 0x00RRGGBB.
+  //! @param theColor [in] color to convert
+  //! @param theARGB [out] result color encoded as integer
+  static void Color2argb (const Quantity_Color& theColor,
+                          Standard_Integer& theARGB)
+  {
+    const NCollection_Vec3<Standard_Integer> aColor (static_cast<Standard_Integer> (255.0f * theColor.myRgb.r() + 0.5f),
+                                                     static_cast<Standard_Integer> (255.0f * theColor.myRgb.g() + 0.5f),
+                                                     static_cast<Standard_Integer> (255.0f * theColor.myRgb.b() + 0.5f));
+    theARGB = (((aColor.r() & 0xff) << 16)
+             | ((aColor.g() & 0xff) << 8)
+             |  (aColor.b() & 0xff));
+  }
+
   //! Convert integer ARGB value to Color. Alpha bits are ignored
-  Standard_EXPORT static void Argb2color (const Standard_Integer theARGB, Quantity_Color& theColor);
-  
+  static void Argb2color (const Standard_Integer theARGB,
+                          Quantity_Color& theColor)
+  {
+    const NCollection_Vec3<Standard_Real> aColor (static_cast <Standard_Real> ((theARGB & 0xff0000) >> 16),
+                                                  static_cast <Standard_Real> ((theARGB & 0x00ff00) >> 8),
+                                                  static_cast <Standard_Real> ((theARGB & 0x0000ff)));
+    theColor.SetValues (aColor.r() / 255.0, aColor.g() / 255.0, aColor.b() / 255.0, Quantity_TOC_RGB);
+  }
+
+public:
+
+  //! Convert linear RGB component into sRGB using OpenGL specs formula (double precision), also known as gamma correction.
+  static Standard_Real Convert_LinearRGB_To_sRGB (Standard_Real theLinearValue)
+  {
+    return theLinearValue <= 0.0031308
+         ? theLinearValue * 12.92
+         : Pow (theLinearValue, 1.0/2.4) * 1.055 - 0.055;
+  }
+
+  //! Convert linear RGB component into sRGB using OpenGL specs formula (single precision), also known as gamma correction.
+  static float Convert_LinearRGB_To_sRGB (float theLinearValue)
+  {
+    return theLinearValue <= 0.0031308f
+         ? theLinearValue * 12.92f
+         : powf (theLinearValue, 1.0f/2.4f) * 1.055f - 0.055f;
+  }
+
+  //! Convert sRGB component into linear RGB using OpenGL specs formula (double precision), also known as gamma correction.
+  static Standard_Real Convert_sRGB_To_LinearRGB (Standard_Real thesRGBValue)
+  {
+    return thesRGBValue <= 0.04045
+         ? thesRGBValue / 12.92
+         : Pow ((thesRGBValue + 0.055) / 1.055, 2.4);
+  }
+
+  //! Convert sRGB component into linear RGB using OpenGL specs formula (single precision), also known as gamma correction.
+  static float Convert_sRGB_To_LinearRGB (float thesRGBValue)
+  {
+    return thesRGBValue <= 0.04045f
+         ? thesRGBValue / 12.92f
+         : powf ((thesRGBValue + 0.055f) / 1.055f, 2.4f);
+  }
+
+  //!&n