private Point parsePoint(ValueGetter data, boolean haveZ, boolean haveM) {
    double X = data.getDouble();
    double Y = data.getDouble();
    Point result;
    if (haveZ) {
      double Z = data.getDouble();
      result = new Point(X, Y, Z);
    } else {
      result = new Point(X, Y);
    }

    if (haveM) {
      result.setM(data.getDouble());
    }

    return result;
  }