旋转单个矩形及其所有内容
Rotate a individual rectangle and ALL its contents
我正在使用此处发布的方法
Using a matrix to rotate rectangles individually
(我希望这不是转贴,如果是我做错了什么)
我正在使用完美定义的 RotateRectangle 方法,如下所示
public void RotateRectangle(Graphics g, Rectangle r, float angle)
{
using (Matrix m = new Matrix())
{
m.RotateAt(angle, new PointF(r.Left + (r.Width / 2),
r.Top + (r.Height / 2)));
g.Transform = m;
g.DrawRectangle(Pens.Black, r);
g.ResetTransform();
}
}
然后在我的绘图上创建一个标签,并在其外部创建一个矩形
g.DrawString("e/10", fnt2, new SolidBrush(Color.Black), (int)(ecobdesenho / 10) / 2 + esp - 15, esp - 25); //15 para tras, 15 para cima
Rectangle r1 = new Rectangle((int)(ecobdesenho / 10) / 2 + esp - 15, esp - 25, 25, 12);
RotateRectangle(g, r1, 40);
(注意左上角的矩形)
我错过了什么吗?还是我应该去吃香蕉?
您的 RotateRectangle
没有旋转 canvas 的矩形; 正在绘制一个旋转的矩形。
设置 Transform
和 ResetTransform
之间绘制的所有内容都将旋转绘制。
因此,如果你想让DrawString
旋转,你需要在你设置Transform之后,在你重置它之前把它。
using (Matrix m = new Matrix())
{
m.RotateAt(angle, new PointF(r.Left + (r.Width / 2),
r.Top + (r.Height / 2)));
g.Transform = m;
g.DrawString("e/10", fnt2, new SolidBrush(Color.Black), (int)(ecobdesenho / 10) / 2 + esp - 15, esp - 25); //15 para tras, 15 para cima
g.DrawRectangle(Pens.Black, r);
g.ResetTransform();
}
我正在使用此处发布的方法 Using a matrix to rotate rectangles individually
(我希望这不是转贴,如果是我做错了什么)
我正在使用完美定义的 RotateRectangle 方法,如下所示
public void RotateRectangle(Graphics g, Rectangle r, float angle)
{
using (Matrix m = new Matrix())
{
m.RotateAt(angle, new PointF(r.Left + (r.Width / 2),
r.Top + (r.Height / 2)));
g.Transform = m;
g.DrawRectangle(Pens.Black, r);
g.ResetTransform();
}
}
然后在我的绘图上创建一个标签,并在其外部创建一个矩形
g.DrawString("e/10", fnt2, new SolidBrush(Color.Black), (int)(ecobdesenho / 10) / 2 + esp - 15, esp - 25); //15 para tras, 15 para cima
Rectangle r1 = new Rectangle((int)(ecobdesenho / 10) / 2 + esp - 15, esp - 25, 25, 12);
RotateRectangle(g, r1, 40);
(注意左上角的矩形) 我错过了什么吗?还是我应该去吃香蕉?
您的 RotateRectangle
没有旋转 canvas 的矩形; 正在绘制一个旋转的矩形。
设置 Transform
和 ResetTransform
之间绘制的所有内容都将旋转绘制。
因此,如果你想让DrawString
旋转,你需要在你设置Transform之后,在你重置它之前把它。
using (Matrix m = new Matrix())
{
m.RotateAt(angle, new PointF(r.Left + (r.Width / 2),
r.Top + (r.Height / 2)));
g.Transform = m;
g.DrawString("e/10", fnt2, new SolidBrush(Color.Black), (int)(ecobdesenho / 10) / 2 + esp - 15, esp - 25); //15 para tras, 15 para cima
g.DrawRectangle(Pens.Black, r);
g.ResetTransform();
}