用Gdk开罗语境绘制椭圆形

时间:2012-01-09 02:35:16

标签: graphics gtk cairo geometric-arc gdk

我只想绘制一个椭圆的圆周。我用这个:

gc->save();
gc->translate( xc, yc );
gc->arc( 0.0, 0.0, 1.0, 0.0, 2.0*M_PI );
gc->scale( width*0.5, height*0.5 );
gc->stroke();
gc->restore();

但我经常得到一个填充椭圆形。我做错了什么?

1 个答案:

答案 0 :(得分:1)

好吧,你对scale()的打电话可能不符合你的意图。我不确定你是不是意外地把调用放错了,或者你不太明白cairo的转换是如何工作的。如果是后者:

转换仅影响以下操作。它们只会以某种方式影响涉及坐标或尺寸的操作。在这种情况下,您可能希望将其应用于弧。然而,它实际上只是应用于中风,并且可能以你不想要的方式。

知道我提到的变换会影响涉及坐标或大小的操作吗?嗯,这可能不是很明显,但中风确实隐含涉及尺寸:即中风尺寸。因此,弧的笔划大小在x轴上缩放width * 0.5,在y轴上缩放height * 0.5。换句话说,中风非常大,看起来像填充物。

有趣的是,即使你的弧实际上不受scale()的影响,这意味着你会留下一个圆圈而不是一个椭圆形,你仍然会因为中风缩放的方式而卷起椭圆形。

所以,要解决你的问题:

  • scale()
  • 之前致电arc()
  • 在您致电arc()之后但在致电stroke()之前重置比例因子,这样您就不会再次遇到怪异的击球事件