Esempio n. 1
0
    /**
     * 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);
      }
    }