/** * Fill a vertices buffer with the needed data to draw a ruler. * * @param verticesBuffer the {@link ElementsBuffer} to fill. * @param rulerModel the {@link RulerModel} to draw. * @param ticksValue the list of ticks. * @param subTicksValue the list of sub-ticks. * @param canvasProjection the used canvas projection. */ private void fillVertices( ElementsBuffer verticesBuffer, RulerModel rulerModel, List<Double> ticksValue, List<Double> subTicksValue, Transformation canvasProjection) { Vector3d a = rulerModel.getFirstPoint(); Vector3d b = rulerModel.getSecondPoint(); if ((a != null) && (b != null)) { int bufferSize = 2 * ticksValue.size() + 2 * subTicksValue.size(); if (rulerModel.isLineVisible()) { bufferSize += 2; } FloatBuffer data = FloatBuffer.allocate(4 * bufferSize); data.rewind(); for (double value : ticksValue) { Vector3d p = canvasProjection.project(rulerModel.getPosition(value)); data.put(p.getDataAsFloatArray(4)); data.put(p.plus(windowTicksDelta).getDataAsFloatArray(4)); } for (double value : subTicksValue) { Vector3d p = canvasProjection.project(rulerModel.getPosition(value)); data.put(p.getDataAsFloatArray(4)); data.put(p.plus(windowSubTicksDelta).getDataAsFloatArray(4)); } if (rulerModel.isLineVisible()) { data.put(canvasProjection.project(a).getDataAsFloatArray(4)); data.put(canvasProjection.project(b).getDataAsFloatArray(4)); } data.rewind(); verticesBuffer.setData(data, 4); } else { verticesBuffer.setData(new float[0], 4); } }