有什么方法可以保存路径并在开罗恢复它?

问题描述 投票:0回答:1

我在gtkmm应用程序上有两个绘图信号图。

问题出在我必须绘制一个包含很多点(大约300-350k)并向以下点画线的图形时,因为它会降低每次迭代绘制所有点的速度。

bool DrawArea::on_draw(const Cairo::RefPtr<Cairo::Context>& c) 
{  
    cairo_t* cr = c->cobj();

    //xSignal.size() = ySignal.size() = 350000
    for (int j = 0; j < xSignal.size() - 1; ++j)
    {
        cairo_move_to(cr, xSignal[j], ySignal[j]);
        cairo_line_to(cr, xSignal[j + 1], ySignal[j + 1]);
    }
    cairo_stroke(cr);

    return true;
}

我知道存在一个cairo_stroke_preserve,但我认为这对我无效,因为当我在图形之间切换时,它消失了。

我一直在研究如何保存路径并将其恢复到Cairo文档中,但是我什么都没看到。 2007年,来自开罗的一位用户在文档中建议“做”相同的事情,但显然尚未完成。

有任何建议吗?

c++ cairo gtkmm gtkmm3
1个回答
0
投票

回答您的问题:

cairo_copy_path()cairo_append_path()(也有cairo_copy_path_flat()cairo_path_destroy())。

因此,您可以使用cairo_copy_path()保存路径,然后使用cairo_append_path()将其追加到当前路径。

回答您的非问题:

我怀疑这会加快您的绘图速度。将这些行添加到当前路径不太可能很慢。相反,我希望这些线条的实际绘制速度会很慢。

您写道:“在每次迭代中绘制所有点会很慢。”我不确定“每次迭代”指的是什么,但是为什么要一直画所有这些点呢?只绘制一次然后重新使用绘制的结果是否更有意义?

© www.soinside.com 2019 - 2024. All rights reserved.