Получить упорядоченные вершины GeneralPath - PullRequest
3 голосов
/ 27 апреля 2011

Как я могу получить вершины объекта GeneralPath? Кажется, что это должно быть возможно, так как путь построен из точек (lineTo, curveTo и т. Д.).

Я пытаюсь создать двойной [] [] точечных данных (массив координат x / y).

Ответы [ 2 ]

5 голосов
/ 28 апреля 2011

Вы можете получить точки обратно из <a href="http://download.oracle.com/javase/6/docs/api/java/awt/geom/PathIterator.html" rel="noreferrer">PathIterator</a>.

Я не уверен, каковы ваши ограничения, но если ваша форма всегда имеет только один замкнутый подпуть и имеет только прямые края (без кривых)тогда будет работать следующее:

static double[][] getPoints(Path2D path) {
    List<double[]> pointList = new ArrayList<double[]>();
    double[] coords = new double[6];
    int numSubPaths = 0;
    for (PathIterator pi = path.getPathIterator(null);
         ! pi.isDone();
         pi.next()) {
        switch (pi.currentSegment(coords)) {
        case PathIterator.SEG_MOVETO:
            pointList.add(Arrays.copyOf(coords, 2));
            ++ numSubPaths;
            break;
        case PathIterator.SEG_LINETO:
            pointList.add(Arrays.copyOf(coords, 2));
            break;
        case PathIterator.SEG_CLOSE:
            if (numSubPaths > 1) {
                throw new IllegalArgumentException("Path contains multiple subpaths");
            }
            return pointList.toArray(new double[pointList.size()][]);
        default:
            throw new IllegalArgumentException("Path contains curves");
        }
    }
    throw new IllegalArgumentException("Unclosed path");
}

Если ваш путь может содержать кривые, вы можете использовать версию сглаживания getPathIterator().

0 голосов
/ 27 апреля 2011

Я бы сомневался, возможно ли это всегда, если вообще возможно ... JavaDoc говорит:

"Класс GeneralPath представляет собой геометрический путь построен из прямые и квадратичные и кубические (безье) кривые. "

Так что, если это кривая, точки, которые она будет содержать, не обязательно являются частью кривой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...