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); }