docs: @Pure
  	public static String makeInternalId(float[] coordinates, Rectangle2d bounds) {
  		final StringBuilder buf = new StringBuilder("points"); //$NON-NLS-1$
  		float minx = Float.NaN;
  		float miny = Float.NaN;
  		float maxx = Float.NaN;
  		float maxy = Float.NaN;
  		if (bounds != null) {
  			bounds.clear();
  		}
  		for (int idx = 0; idx < coordinates.length - 1; idx += 2) {
  			if (idx > 0) {
  				buf.append('-');
  			}
  			buf.append('(');
  			buf.append(coordinates[idx]);
  			buf.append(';');
  			buf.append(coordinates[idx + 1]);
  			buf.append(')');
  			if (idx == 0) {
  				minx = coordinates[idx];
  				maxx = minx;
  				miny = coordinates[idx + 1];
  				maxy = miny;
  			} else {
  				if (coordinates[idx] < minx) {
  					minx = coordinates[idx];
  				}
  				if (coordinates[idx] > maxx) {
  					maxx = coordinates[idx];
  				}
  				if (coordinates[idx + 1] < miny) {
  					miny = coordinates[idx + 1];
  				}
  				if (coordinates[idx + 1] > maxy) {
  					maxy = coordinates[idx + 1];
  				}
  			}
  		}
  
  		if (bounds != null && !Float.isNaN(minx)) {
  			bounds.setFromCorners(minx, miny, maxx, maxy);
  		}
  		return Encryption.md5(buf.toString());
  	}