关于PHOTON里面画曲线的问题。

大家好,我想用PtDraw来动态的画曲线,就是随着时间的推移,曲线向后不断的延伸,具体就是来一个点,就把该点与其前一个点连接起来。可有一个问题,那就是这样做,前面画好的曲线就没有了,该点与其前一个点的连线,以前画的线都没有了。请问这个问题如何解决?

PtDraw? 你用的是PgDraw吧!

Don’t call the Pg… drawing primitives directly, as they aren’t redrawn when widgets are damaged and repaired. If you need to draw something that can’t be done with these widgets, do your drawing inside a PtRaw widget. For more information, see the Raw Drawing and Animation chapter of the Photon Programmer’s Guide.

PtGraphic和它的子类不能满足你的要求吗?

你好,谢谢你的回复。上次是我写错了,我是用的PgDraw。
比如我每10ms接收一个点,然后将这个点与前一个点用直线连接起来(这里我用了PgDrawILine( x1, y1, x2, y2 ); 这个函数),这样,每接收一个点,我就调用这个函数,将其与前一个点用直线连接起来,这样,就可以动态的将接收的数据以波形的形式显示出来。

我的具体做法就是利用PtRaw控制,在其属性里面设置一个rawdraw函数(该函数的原型draw_fun( PtWidget_t *widget, PhTile_t *damage )
),这样就可以在这个函数中调用PgDrawILine( x1, y1, x2, y2 );这个函数来画直线了。具体代码如下:
void draw_fun( PtWidget_t *widget, PhTile_t *damage )
{
PhRect_t rect;
int x1, y1, x2, y2;

PtSuperClassDraw( PtBasic, widget, damage );
PtCalcCanvas(ABW_ps8_grid, &rect);
PtClipAdd( ABW_ps8_grid, &rect );

PgSetStrokeColor( Pg_GREEN );
PgDrawILine( x1, y1, x2, y2 );



PtClipRemove();
}
可出现的问题是,每次只能画出刚接收的点与前一个点之间的这条直线,而前面已经画好的直线没有了,请问怎么才能不让前面已经画好的直线消失呢?

这个问题困惑了很长时间了,麻烦给指点指点,不胜感激。

两种方式:
1、自己做个缓冲区,比如600个点的数据,每次都画全部点,然后自己维持缓冲区里的数据,依次更新;
2、使用pttrend控件,具体怎么用看帮助或这论坛里找一下,好像以前讨论过。