2008-12-12 2 views
4

Я ищу библиотеку Python для создания холстов для манипуляции геометрическими фигурами. В частности, мне нужна возможность создавать произвольные полигоны и размещать их на холсте, полигоны должны иметь возможность быть прозрачными/иметь альфа-канал, мне нужно иметь возможность редактировать многоугольники, которые в настоящее время находятся на холсте, и мне нужно чтобы иметь возможность получить фактический цвет заданного пикселя (совокупность всей прозрачной части, которая есть).Библиотека Python Canvas для геометрических фигур

В основном я пытаюсь сделать это: http://alteredqualia.com/visualization/evolve/ в python.

ответ

1

Pygame должен быть в состоянии сделать это за вас.

См pygame.draw.polygon

5

Я думаю cairo будет делать много того, что вы хотите. У них также есть python bindings.

Единственное требование, которое вам не поможет, - это изменение ранее нарисованных полигонов, но я не знаю ни одного холста, который сделает это за вас.

0

Я считаю, что HTML-холст позволяет вам изменять элементы, что заставляет меня поверить, что может быть и другой холст. Однако, если этого не было, в основном потребовалось бы, чтобы я сохранил отдельный список всех полигонов, и когда я хотел внести изменения, измените элемент в списке, а затем создайте новый холст, который, похоже, будет иметь значительный накладные расходы.

2

Звучит как работа для OpenGL.

Мой совет заключается в том, что, какую бы библиотеку вы ни выбрали, вы создаете структуру данных для ваших полигонов, которая соответствует вашим алгоритмам, чтобы они могли быть более простыми и читаемыми, а затем пытаться заставить эти алгоритмы напрямую манипулировать холстом. Затем вы можете написать код, который рисует их отдельно (то есть независимо) основной логики.

0

Оба Qt и wxWidgets имеют некоторые возможности рисования холста (Qt называет его GraphicsView). Быстрые поиски Google приведут к множеству примеров, чтобы вы могли убедиться, что они соответствуют вашим требованиям.

2

This discussion on Stackoverflow имеет некоторые сравнения и фрагменты кода в различных инструментариях GUI для Python. Я уверен, что QGraphicsView на QT сделает прозрачность. Nokia (Nee Troll) создает демо-пакет для QT, который должен дать вам представление о его возможностях.

1

Пробег: pyglet. Это графическая библиотека для Python с OpenGL. Если вы раньше программировали OpenGL, это, безусловно, самый простой способ получить то, что вы хотите.

1

Я считаю, что HTML холст позволяет изменять элементы

Это не делает. Вы можете проверить мой HTML canvas tutorial, чтобы увидеть, как вы рисуете движущийся мяч; вы протираете экран и рисуете новый круг в нужном месте.

Вы можете нарисовать простые фигуры на холсте во всех pyglet, pygame, QT, Tkinter, wxPython и cairo.

Как правило, у вас будут объекты, называемые «спрайты» или «фигуры», которые представляют объекты, нарисованные на экране, и вы будете хранить их все в контейнере. Тогда библиотека или фрейм будет в каждом кадре отображать их все на холст.Таким образом, пользователю (вам) кажется, что вы можете изменять объекты на экране; вы задаете координаты x и y шара, а в следующем кадре отображается. Однако на низком уровне все протирается и снова перерисовывается.

Для интенсивной вычислительной анимации будет использоваться метод, называемый double-buffering, в результате чего растровое изображение в памяти будет изменено вместо одного на экране, а затем процесс рисования просто будет скопировать это растровое изображение на экран.

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

Все рамки упомянутых выше даст вам хорошую абстракцию для списка объектов рисовать, так что вам не нужно будет поддерживать его вручную, и вы можете запрограммировать, как если спрайты/формы вы» вы можете напрямую перемещаться по экрану, хотя они действительно не на низком уровне.

+0

«вы протираете экран и нарисовываете новый круг в нужном месте» - хотя это правда, это не настоящая проблема с точки зрения производительности. я сделал что-то подобное, и большую часть времени идет на сравнение изображений (оценка пригодности), а не на рисование. штраф не должен быть слишком большим. – stefs

+0

Я не говорил, что это проблема производительности, просто вы не можете изменять элементы, которые находятся на холсте; вы должны опираться на все, что изменилось. – llimllib

Смежные вопросы