void move2D(Mesh mesh, int[] vertexes, int iVertex, int x, int y,
              boolean moveAll) {
    if (vertexes == null || vertexes.length == 0)
      return;
    Point3i pt = new Point3i();
    Point3f coord = new Point3f();
    Point3f newcoord = new Point3f();
    Vector3f move = new Vector3f();
    coord.set(mesh.vertices[vertexes[iVertex]]);
    viewer.transformPoint(coord, pt);
    pt.x = x;
    pt.y = y;
    viewer.unTransformPoint(pt, newcoord);
    move.set(newcoord);
    move.sub(coord);
    int klast = -1;
    for (int i = (moveAll ? 0 : iVertex); i < vertexes.length; i++)
      if (moveAll || i == iVertex) {
        int k = vertexes[i];
        if (k == klast)
            break;
        mesh.vertices[k].add(move);
        if (!moveAll)
          break;
        klast = k;
      }
    if (Logger.isActiveLevel(Logger.LEVEL_DEBUG))
      Logger.debug(getDrawCommand(mesh));
    viewer.refresh();
  }