/**
   * Fills the given buffer with vertex data from the given object.
   *
   * @param the id of the given object.
   * @param the buffer to fill.
   * @param the number of coordinates taken by one element in the buffer.
   * @param the bit mask specifying which coordinates are filled (1 for X, 2 for Y, 4 for Z).
   * @param the conversion scale factor to apply to data.
   * @param the conversion translation value to apply to data.
   * @param the bit mask specifying whether logarithmic coordinates are used.
   */
  public static void fillVertices(
      Integer id,
      FloatBuffer buffer,
      int elementsSize,
      int coordinateMask,
      double[] scale,
      double[] translation,
      int logMask) {
    int type =
        (Integer)
            GraphicController.getController().getProperty(id, GraphicObjectProperties.__GO_TYPE__);

    switch (type) {
      case GraphicObjectProperties.__GO_ARC__:
        ArcDecomposer.fillVertices(
            buffer, id, elementsSize, coordinateMask, scale, translation, logMask);
        break;
      case GraphicObjectProperties.__GO_CHAMP__:
        ChampDecomposer.fillVertices(
            buffer, id, elementsSize, coordinateMask, scale, translation, logMask);
        break;
      case GraphicObjectProperties.__GO_RECTANGLE__:
        RectangleDecomposer.fillVertices(
            buffer, id, elementsSize, coordinateMask, scale, translation, logMask);
        break;
      case GraphicObjectProperties.__GO_SEGS__:
        SegsDecomposer.fillVertices(
            buffer, id, elementsSize, coordinateMask, scale, translation, logMask);
        break;
    }
  }
  /**
   * Fills the given buffer with color data from the given object. Does nothing at the moment (no
   * color-outputting Java objects implemented so far).
   *
   * @param the id of the given object.
   * @param the buffer to fill.
   * @param the number of components taken by one element in the buffer (3 or 4).
   */
  public static void fillColors(Integer id, FloatBuffer buffer, int elementsSize) {
    int type =
        (Integer)
            GraphicController.getController().getProperty(id, GraphicObjectProperties.__GO_TYPE__);

    if (type == GraphicObjectProperties.__GO_CHAMP__) {
      ChampDecomposer.fillColors(buffer, id, elementsSize);
    } else if (type == GraphicObjectProperties.__GO_SEGS__) {
      SegsDecomposer.fillColors(buffer, id, elementsSize);
    }
  }
 /**
  * Returns the number of data elements for the given object.
  *
  * @param the id of the given object.
  * @return the number of data elements.
  */
 public static int getDataSize(Integer id) {
   int type =
       (Integer)
           GraphicController.getController().getProperty(id, GraphicObjectProperties.__GO_TYPE__);
   switch (type) {
     case GraphicObjectProperties.__GO_ARC__:
       return ArcDecomposer.getDataSize();
     case GraphicObjectProperties.__GO_CHAMP__:
       return ChampDecomposer.getDataSize(id);
     case GraphicObjectProperties.__GO_RECTANGLE__:
       return RectangleDecomposer.getDataSize();
     case GraphicObjectProperties.__GO_SEGS__:
       return SegsDecomposer.getDataSize(id);
     default:
       return 0;
   }
 }
  /**
   * Fills the given buffer with wireframe index data of the given object.
   *
   * @param the id of the given object.
   * @param the buffer to fill.
   * @param the bit mask specifying whether logarithmic coordinates are used.
   * @return the number of indices actually written.
   */
  public static int fillWireIndices(Integer id, IntBuffer buffer, int logMask) {
    int type =
        (Integer)
            GraphicController.getController().getProperty(id, GraphicObjectProperties.__GO_TYPE__);

    switch (type) {
      case GraphicObjectProperties.__GO_ARC__:
        return ArcDecomposer.fillWireIndices(buffer, id, logMask);
      case GraphicObjectProperties.__GO_CHAMP__:
        return ChampDecomposer.fillWireIndices(buffer, id, logMask);
      case GraphicObjectProperties.__GO_RECTANGLE__:
        return RectangleDecomposer.fillWireIndices(buffer, id, logMask);
      case GraphicObjectProperties.__GO_SEGS__:
        return SegsDecomposer.fillWireIndices(buffer, id, logMask);
      default:
        return 0;
    }
  }