Exemplo n.º 1
0
  protected void setColors(double alpha, Coords color, Coords colorHighlighted) {
    Color c = getGeoElement().getObjectColor();
    color.set(
        new Coords(
            (double) c.getRed() / 255,
            (double) c.getGreen() / 255,
            (double) c.getBlue() / 255,
            alpha));

    if (getView3D().isGrayScaled()) color.convertToGrayScale();

    // creates corresponding color for highlighting

    double r = color.getX();
    double g = color.getY();
    double b = color.getZ();
    double d = r + g + b;

    Coords color2;
    double distance;

    if (d > LIGHT_COLOR) { // color is closer to white : darken it
      distance = Math.sqrt(r * r + g * g + b * b); // euclidian distance to black
      color2 = new Coords(0, 0, 0, color.getW()); // black
    } else { // color is closer to black : lighten it
      r = 1 - r;
      g = 1 - g;
      b = 1 - b;
      distance = Math.sqrt(r * r + g * g + b * b); // euclidian distance to white
      color2 = new Coords(1, 1, 1, color.getW()); // white
    }

    double s = getColorShift() / distance;
    colorHighlighted.set(color.mul(1 - s).add(color2.mul(s)));

    // sufficient alpha to be seen
    if (colorHighlighted.getW() < ALPHA_MIN_HIGHLIGHTING)
      colorHighlighted.setW(ALPHA_MIN_HIGHLIGHTING);
  }