旋转多边形在C#中不起作用

时间:2013-12-12 11:16:52

标签: c# .net winforms

我尝试使用C#在Windows窗体中旋转多边形,下面是代码编写。 请告诉我代码中有什么问题,Windows窗体上没有输出 旋转多边形之前和之后不可见。

public void RotatePolygon(PaintEventArgs e)
{ 
     pp[0] = new Point(624, 414);
            pp[1] = new Point(614, 416);
            pp[2] = new Point(626, 404);

            e.Graphics.DrawPolygon(myPen2, pp);

            System.Drawing.Drawing2D.Matrix myMatrix1 = new System.Drawing.Drawing2D.Matrix();
            myMatrix.Rotate(45, MatrixOrder.Append);
            myMatrix.TransformPoints(pp);


            e.Graphics.Transform = myMatrix1;
            e.Graphics.DrawPolygon(myPen, pp);   
}

由于

3 个答案:

答案 0 :(得分:1)

可能存在这样的问题:

[1]你的笔没有颜色/厚度(你在哪里定义它们?)

[2]你的多边形很大,所以你只看到它的内部而不是边框​​。 - >测试Graphics.FillPolygon-Methode,这样你就可以看到[2]是否正确

答案 1 :(得分:1)

你们正在改变点并改变Graphics对象的变换矩阵 - 你需要做一个或另一个。

你还需要考虑旋转对(0,0)而不是对象的某些部分的影响这一事实 - 你可能也需要翻译。

请记住,TransformPoints只是操作数组中的某些数字 - 您可以使用调试器轻松检查 - 这将是一种比显示不可见对象更有效的技术,并想知道它去了哪里。

从一个小得多的旋转角度(10度,也许是?)开始也可能有助于丢失物体的问题 - 如果你没有移动到目前为止,更容易弄清楚发生了什么。

答案 2 :(得分:1)

如果未经修改,您的代码将无法编译。使用了两个矩阵 - 一个在方法中声明的矩阵(myMatrix1)附加到图形对象,另一个在方法外声明(myMatrix没有1)用于显式转换点阵列

我尝试了所需更改的代码并且它完美无瑕 - 我使用myMatrix1进行两次转换,有效旋转角度正如预期的那样是指定值的两倍。所以我猜你正在使用两个转换,如果转换后的点在它们开始的地方结束时取消。