我正在使用python-clutter 1.0
以挑战的形式提出的问题
编写代码以允许通过按键来放大到CairoTexture actor,步骤使得每个actor都可以重新绘制(通过cairo),以便图像保持高分辨率但仍按预期进行缩放, 没有重新调整演员的大小。
想想像Inkscape这样的东西,以及如何放大矢量;矢量如何在任何放大倍数下保持清洁。将一条路径(一堆cairo line_to
命令)放到CairoTexture actor上然后允许同样的技巧发生。
更多细节
我的目标是一个使用演员组的小型SVG编辑器。每个演员都致力于一条道路。我使用SomeGroup.set_depth(z)
缩放'然后使z更大/更小。到目前为止都很好。然而,演员越接近相机,纹理就越拉伸以适应新的表观尺寸。
我似乎无法找到让Clutter同时做到这两点的方法:
如果我使用set_size
或set_surface_size
,则演员会获得更大的,这不是意图。我只希望它的 surface (基础数据)变得更大。
(我不确定这个术语,也许是mipmapping?)
换句话说:多边形越来越大,增加了纹理数组的大小,以便它可以映射到更大的多边形。
我甚至尝试通过保持第二个表面(使用pycairo)来重复创建一个表面大小(get_transformed_size
),然后我使用杂乱的set_from_rgb_data
。并指向它在我的第二个表面,强制重新调整表面大小但不是演员的尺寸。
这个问题是:a)杂乱忽略了新的尺寸,只能画入旧的宽度/高度,而b)RGBA与ARGB32之类的东西会导致颜色崩溃。
我对任何其他想法持开放态度,我希望我站在树林里错过所有树木!
\ d
答案 0 :(得分:2)
好吧,尽管我所有的测试和黑客,它一直在我的鼻子底下。
感谢Neil在杂乱的项目列表中,这里是独家新闻:
CT = SomeCairoTextureActor()
# record the old height, once:
old_width, old_height = CT.get_size()
Start a loop:
# Do stuff to the depth of CT (or it's parent)
...
# Get the apparent width and height (absolute size in pixels)
appr_w,appr_h = CT.get_transformed_size()
# Make the new surface to the new size
CT.set_surface_size( appr_w, appr_h )
# Crunch the actor back down to old size
# but leave the texture surface something other!
CT.set_size(old_width, old_height)
loop back again
表面尺寸和尺寸 演员不必一样。该 表面尺寸只是默认的 演员的首选大小。您可以 用just覆盖首选大小 在actor上设置大小。如果 演员的大小不同 表面尺寸然后纹理将 被压扁以适应演员的大小 (我认为这就是你想要的)。
很高兴把这个小小的神秘感放到床上。谢谢杂乱的名单!
\ d