2015-01-20 2 views
2

JavaFX предоставляет методы низкоуровневой рисования путей на GraphicsContext и узле верхнего уровня Path.JavaFX: Как можно нарисовать путь в GraphicsContext?

Я хочу хранить фигуры в классах и нарисовать их в GraphicsContext. Класс Path кажется удобным для меня. Я знаю, он предназначен для использования в качестве узла в графе сцены, но он содержит все элементы чертежа, которые мне нужны.

Я ищу способ, например GraphicsContext.fillPath(Path) но нет.

Должен ли я перебирать элементы Path вручную и переводить их на низкоуровневые методы GraphicsContext, или я что-то пропустил?

+0

Привет Анди, можно ли сохранить путь в переменной и установить его в макет или что-то вроде этого? Я не понимаю вашу проблему ... В JavaFX можно привязать ваши данные к определенному графическому объекту, подобному ярлыку. Таким образом, вы можете сделать что-то вроде этого: label.bind (StringPath) -> Этот пример не является реальным кодом, но он будет работать так же с логической стороны. –

+1

Это не ответит на ваш вопрос, но это более простой способ. Вы можете добавить холст к панели, а затем нарисовать узлы или фигуры (например, путь) на панели и все остальное на холсте? Это то, что я делаю для некоторых пользовательских высокоскоростных графиков. Также легче перемещать узлы, потому что, похоже, нет режима рисования XOR для холста javafx, в отличие от awt. – brian

ответ

1

Должен ли я перебирать элементы Path вручную и переводить их в низкоуровневые методы GraphicsContext?

Да. Вам нужно будет написать транслятор принимать данные, извлеченные из Path и вызывать соответствующие графические методы контекста (см Path Rendering methods), например beginPath(), moveTo(), lineTo(), closePath(), fill, stroke() и т.д.


Скорее чем использование Пути, вы, возможно, можете использовать SVGPath. Легко перевести SVGPath из данных узла графика сцены в метод GraphicsContext - вы можете просто сделать gc.appendSVGPath(svgPath.getContent()).

+1

Наконец, я написал свой собственный класс Path, чтобы я мог использовать его на всех платформах, для которых я пишу программное обеспечение (JavaFX, Java 2D, Android, GWT). Это очень просто ... [Здесь] (https://github.com/Xenoage/Zong/tree/0f0d6a721fb027d1d70dc049d3fe0c2350be4596/layout/src/com/xenoage/zong/symbols/path) являются структурами данных и [здесь] (https://github.com/Xenoage/Zong/blob/0f0d6a721fb027d1d70dc049d3fe0c2350be4596/renderer-javafx/src/com/xenoage/zong/renderer/javafx/symbols/JfxPath.java) является примером того, как обработчик JavaFX обрабатывает их. По соображениям производительности SVGPath из String для меня не вариант. – Andi

+0

Nice чистой реализации Andi. Вы всегда можете ответить на свои вопросы (http://stackoverflow.com/help/self-answer). – jewelsea