Я использую python-clutter 1.0
Мой вопрос в форме вызова
Напишите код, позволяющий увеличивать актор CairoTexture нажатием клавиши пошагово, чтобы на каждом этапе актор можно было перерисовать (cairo), чтобы изображение оставалось в высоком разрешении, но по-прежнему масштабировалось должным образом, без изменения размера актера.
Подумайте о чем-то вроде Inkscape и о том, как вы можете масштабировать векторы; как векторы остаются чистыми при любом увеличении. Поместите путь (скажем, набор команд cairo line_to
) на актор CairoTexture, а затем позвольте тому же трюку произойти.
Подробнее
Я нацелен на небольшой редактор SVG, который использует группы актеров. Каждый актер посвящен одному пути. Я «масштабирую» с помощью SomeGroup.set_depth(z)
, а затем увеличиваю/уменьшаю z. Пока все в порядке. Однако чем ближе актер(ы) подходит к камере, тем сильнее растягивается текстура, чтобы соответствовать их новому кажущемуся размеру.
Кажется, я не могу найти способ заставить Clutter сделать и то, и другое:
- Оставьте фактический размер актера неизменным (то есть то, с чего он начинался).
- Замените его базовую поверхность на более крупные (при увеличении), на которые затем я могу перерисовать путь (и использовать матрицу Каира для масштабирования контекста).
Если я использую set_size
или set_surface_size
, актер становится больше, что не предназначено. Я только хочу, чтобы поверхность (базовые данные) стала больше.
(Я не уверен в терминологии для этого, возможно, mipmapping?)
Другими словами: полигон становится больше, увеличьте размер его массива текстур, чтобы он мог отображаться на больший полигон.
Я даже пытался обойти беспорядок, сохранив вторую поверхность (используя pycairo), которую я воссоздал до видимого размера актера (get_transformed_size
), а затем я использовал беспорядок set_from_rgb_data
и навел его на свою вторую поверхность, заставив изменение размера поверхности, но не размеров актера.
Проблема с этим заключается в том, что а) беспорядок игнорирует новый размер и рисует только старую ширину/высоту и б) вещи RGBA против ARGB32 вызывают плавление цвета.
Я открыт для любых альтернативных идей, надеюсь, я стою в лесу и скучаю по всем деревьям!
\d