Last updated

Color Bars

This tutorial demonstrates how a Color Bar can be used to customize the display. A Color Bar displays a ColorProvider with reference to the values it can support. This tutorial will use the following Color Provider for all tutorials:

import { DefaultColorProvider } from "@int/geotoolkit/util/DefaultColorProvider.ts";
import { KnownColors as KnownColorsProvider } from "@int/geotoolkit/util/ColorProvider.ts";
import { KnownColors as KnownColorsColorUtil } from "@int/geotoolkit/util/ColorUtil.ts";
function createColorProvider() {
  const colorprovider = new DefaultColorProvider({
    "values": [-2, -1, 0, 1, 2],
    "colors": [
      KnownColorsColorUtil.Orange,
      KnownColorsColorUtil.Yellow,
      KnownColorsColorUtil.Blue,
      KnownColorsColorUtil.Green,
      KnownColorsColorUtil.Gray
    ]
  });
  colorprovider.setNamedColor(KnownColorsProvider.NegativeInfinity, KnownColorsColorUtil.Orange);
  colorprovider.setNamedColor(KnownColorsProvider.NaN, "black");
  colorprovider.setNamedColor(KnownColorsProvider.PositiveInfinity, KnownColorsColorUtil.Gray);
  return colorprovider;
}
export { createColorProvider };

createScene();

# Base Color Box

Below is a basic Color Box.

import { ColorBar } from "@int/geotoolkit/controls/shapes/ColorBar.ts";
import { ColorBarLocation } from "@int/geotoolkit/controls/shapes/ColorBarLocation.ts";
import { Rect } from "@int/geotoolkit/util/Rect.ts";
import { Plot } from "@int/geotoolkit/plot/Plot.ts";
import { Group } from "@int/geotoolkit/scene/Group.ts";
import { createColorProvider } from "/src/code/Carnac/Utils/ColorBars/overview.ts";
function createScene(canvas) {
  const colorBar = new ColorBar({
    "location": ColorBarLocation.South,
    "colorprovider": createColorProvider(),
    "title": {
      "text": "Demo Color Bar"
    }
  }).setBounds(new Rect(40, 40, 310, 160));
  return new Plot({
    "canvaselement": canvas,
    "root": new Group().addChild(colorBar)
  });
}
export { createScene };

createScene(document.querySelector('[ref="plot"]'));

# Modifying Color Bar layout

Below is a modified Color Bar layout.

import { ColorBar } from "@int/geotoolkit/controls/shapes/ColorBar.ts";
import { Rect } from "@int/geotoolkit/util/Rect.ts";
import { Plot } from "@int/geotoolkit/plot/Plot.ts";
import { Group } from "@int/geotoolkit/scene/Group.ts";
import { createColorProvider } from "/src/code/Carnac/Utils/ColorBars/overview.ts";
function createScene(canvas) {
  const colorBar = new ColorBar({
    "colorprovider": createColorProvider(),
    "title": {
      "text": "Demo Color Bar",
      "size": 20
    },
    "colorbox": {
      "size": 40
    },
    "axis": {
      "size": 30
    }
  }).setBounds(new Rect(105, 20, 250, 180));
  return new Plot({
    "canvaselement": canvas,
    "root": new Group().addChild(colorBar)
  });
}
export { createScene };

createScene(document.querySelector('[ref="plot"]'));

# Showing Known Colors

Below is a Color Bar showing known colors, as well as Nan, and positive and negative infinity.

import { ColorBar } from "@int/geotoolkit/controls/shapes/ColorBar.ts";
import { Rect } from "@int/geotoolkit/util/Rect.ts";
import { Plot } from "@int/geotoolkit/plot/Plot.ts";
import { Group } from "@int/geotoolkit/scene/Group.ts";
import { createColorProvider } from "/src/code/Carnac/Utils/ColorBars/overview.ts";
function createScene(canvas) {
  const colorBar = new ColorBar({
    "colorprovider": createColorProvider(),
    "title": {
      "text": "Demo Color Bar",
      "size": 20
    },
    "colorbox": {
      "size": 40
    },
    "axis": {
      "size": 30
    },
    "namedcolors": {
      "visible": true,
      "size": 20
    }
  }).setBounds(new Rect(105, 20, 250, 180));
  return new Plot({
    "canvaselement": canvas,
    "root": new Group().addChild(colorBar)
  });
}
export { createScene };

createScene(document.querySelector('[ref="plot"]'));

# Orientation and Flip

Below is a Color Bar flipped vertically. The title also flips.

import { ColorBar } from "@int/geotoolkit/controls/shapes/ColorBar.ts";
import { ColorBarLocation } from "@int/geotoolkit/controls/shapes/ColorBarLocation.ts";
import { Rect } from "@int/geotoolkit/util/Rect.ts";
import { Plot } from "@int/geotoolkit/plot/Plot.ts";
import { Group } from "@int/geotoolkit/scene/Group.ts";
import { createColorProvider } from "/src/code/Carnac/Utils/ColorBars/overview.ts";
function createScene(canvas) {
  const colorBar = new ColorBar({
    "location": ColorBarLocation.West,
    "colorprovider": createColorProvider(),
    "title": {
      "text": "Demo Color Bar",
      "size": 20
    },
    "colorbox": {
      "size": 40
    },
    "axis": {
      "size": 30
    },
    "flip": true,
    "namedcolors": {
      "visible": true,
      "size": 20
    }
  }).setBounds(new Rect(105, 20, 250, 180));
  return new Plot({
    "canvaselement": canvas,
    "root": new Group().addChild(colorBar)
  });
}
export { createScene };

createScene(document.querySelector('[ref="plot"]'));

# Auto Limits

This example shows how to add different limits algorithm for Color Bar.

import { ColorBar } from "@int/geotoolkit/controls/shapes/ColorBar.ts";
import { ColorBarLocation } from "@int/geotoolkit/controls/shapes/ColorBarLocation.ts";
import { Rect } from "@int/geotoolkit/util/Rect.ts";
import { Plot } from "@int/geotoolkit/plot/Plot.ts";
import { Group } from "@int/geotoolkit/scene/Group.ts";
import { DefaultColorProvider } from "@int/geotoolkit/util/DefaultColorProvider.ts";
import { KnownColors } from "@int/geotoolkit/util/ColorUtil.ts";
const LimitsTypes = {
  OriginalLimits: "Original Limits",
  PreciseLimits: "Neat Precise Limits"
};
function createColorProvider() {
  return new DefaultColorProvider({
    "values": [-2.4, -1, 0, 1, 2.42],
    "colors": [
      KnownColors.Orange,
      KnownColors.Yellow,
      KnownColors.Blue,
      KnownColors.Green,
      KnownColors.Gray
    ]
  });
}
function createScene(canvas) {
  const colorBar = new ColorBar({
    "location": ColorBarLocation.South,
    "colorprovider": createColorProvider(),
    "title": {
      "text": "Auto Limits Color Bar"
    }
  }).setBounds(new Rect(40, 40, 310, 160));
  return new Plot({
    "canvaselement": canvas,
    "root": new Group().addChild(colorBar)
  });
}
function setLimitsType(colorBar, limitsType) {
  colorBar.setOptions({
    "preciselimits": LimitsTypes.PreciseLimits === limitsType
  });
}
export { createScene, LimitsTypes, setLimitsType };

createScene(document.querySelector('[ref="plot"]'));