stroke()或fill()之后copy_Path的用法

时间:2013-08-18 07:02:53

标签: gtk vector-graphics cairo

在调用stroke()或fill()之后如何复制路径? 我已经设置了一个看起来像那样的缓存机制

高端视觉对象类:

override void DrawDirect(canvas aCanvas)
{
    aCanvas.Line(...)
    aCanvas.Rectangle(...)
    // etc. 
    MyCache = aCanvas.GetPath(); // = canvas.Context.copy_Path()
    IsCached = true;
}

override void DrawCache(canvas aCanvas)
{
    aCanvas.DrawPath(MyCache); // = canvas.Context.appendPath...
}

,超类有这个方法:

voidDraw(canvas aCanvas)
{
    if(IsCached) DrawCache();
    else DrawDirect;
}

画布定义了这种方法:

void Line(...)
{
    Context.moveTo(...)
    Context.lineTo(...)
    Context.stroke();
}

当我调用GetPath时,除非我对stroke()和fill()的调用进行注释,否则MyCache.numData等于0。 但作为副作用,DrawDirect方法(视觉上)没有任何效果。

另外一个后续问题是:调用appendPath(真的)比调用基本的“直接”方法更快吗? (你可以对此发表评论,我只会接受有关copy_Path内容的答案)。

1 个答案:

答案 0 :(得分:0)

开罗有一个stroke(),它会在抚摸之后删除路径,而stroke_preserve()不会触及路径并保持原样。

我真的不知道appendPath()是否比直接重新创建路径更快,但我真的无法想象这样的事情应该是性能问题。这可能取决于你的路径,你应该自己做基准测试。