private void mXvbWEhZj() { double d = TAxisCalc.Round(Math.Abs(this.valE - this.valO) / (double)this.nticks); double num1 = TAxisCalc.Ceiling(this.valO, d); this.nticks = (int)(Math.Abs(this.valE - num1) / d) + 1; if (this.nticks < 3) { this.nticks = 3; } this.tticks = new TAxisCalc.TTick[this.nticks]; if (this.nticks == 3) { this.tticks[0].Value = this.valO; this.tticks[1].Value = 0.5 * (this.valO + this.valE); this.tticks[2].Value = this.valE; } else { double num2 = num1; if (this.valE < this.valO) { d = -d; } int index = 0; while (index < this.nticks) { this.tticks[index].Value = num2; ++index; num2 += d; } } }
public bool TickPassed(ref TAxisCalc.TTick tick, double val) { foreach (TAxisCalc.TTick ttick in this.tticks) { if (val == ttick.Value || (val - ttick.Value) * (this.SM2ynsEBp - ttick.Value) < 0.0) { tick = ttick; this.SM2ynsEBp = val; return true; } } this.SM2ynsEBp = val; return false; }
public void PaintAxisGridAndTicks(Graphics g, Axis a, bool Marks, TVec3 o, TVec3 o_, TVec3 L) { a.MinorGridEnabled = false; a.MinorTicksEnabled = false; int nTicks = (int)(L.NormInf / 10.0); if (nTicks < 3) nTicks = 3; if (nTicks > 10) nTicks = 10; TAxisCalc taxisCalc = new TAxisCalc(o, o + L, a.Min, a.Max, nTicks); TVec3 tvec3_1 = o_ - o; TVec3 tvec3_2 = TVec3.O; TVec3 tvec3_3 = -0.04 * tvec3_1; if (o_.y > o.y) { tvec3_2 = tvec3_1; tvec3_3 = -tvec3_3; } TVec3 tvec3_4 = tvec3_2 + 1.04 * tvec3_3; if (a.GridEnabled) { Pen pen = new Pen(a.GridColor, a.GridWidth); for (int i = 0; i < taxisCalc.nTicks; ++i) g.DrawLine(pen, (Point)taxisCalc.TickPos(i), (Point)(taxisCalc.TickPos(i) + tvec3_1)); } if (a.Position == EAxisPosition.Right && tvec3_3.x <= 0.0) Marks = false; if (!Marks) return; int num1 = a.Position == EAxisPosition.Bottom ? 0 : 1; int num2 = a.Position == EAxisPosition.Bottom ? taxisCalc.nTicks - 1 : taxisCalc.nTicks; float num3 = 0.0f; if (a.MajorTicksEnabled) { Pen pen = new Pen(a.GridColor, a.GridWidth); for (int i = num1; i < num2; ++i) g.DrawLine(pen, (Point)(taxisCalc.TickPos(i) + tvec3_2), (Point)(taxisCalc.TickPos(i) + tvec3_2 + tvec3_3)); } if (a.LabelEnabled) { Font labelFont = a.LabelFont; float height = labelFont.GetHeight(g); SolidBrush solidBrush = new SolidBrush(a.LabelColor); StringFormat format = new StringFormat(); float num4; if (a.Position == EAxisPosition.Bottom) { format.FormatFlags = StringFormatFlags.DirectionVertical; num4 = (float)Math.Abs(taxisCalc.TickPos(1).x - taxisCalc.TickPos(0).x); } else { tvec3_4.y -= 0.5 * (double)a.LabelFont.GetHeight(); num4 = (float)Math.Abs(taxisCalc.TickPos(1).y - taxisCalc.TickPos(0).y); } if (tvec3_3.x < 0.0) tvec3_4.x -= (double)a.LabelFont.GetHeight(); if ((double)num4 > 0.0) { int num5 = (int)((double)height / (double)num4 + 1.0); if (num1 + num5 < num2) { int i = num1; while (i < num2) { if (i + num5 >= num2) i = num2 - 1; TVec3 tvec3_5 = taxisCalc.TickPos(i) + tvec3_4; string str = taxisCalc.TickVal(i).ToString(); g.DrawString(str, labelFont, (Brush)solidBrush, (PointF)tvec3_5, format); SizeF sizeF = g.MeasureString(str, labelFont); if ((double)sizeF.Width > (double)num3) num3 = sizeF.Width; i += num5; } } else if (num2 > 0) { int i = num2 - 1; TVec3 tvec3_5 = taxisCalc.TickPos(i) + tvec3_4; string str = taxisCalc.TickVal(i).ToString(); g.DrawString(str, labelFont, (Brush)solidBrush, (PointF)tvec3_5, format); num3 = g.MeasureString(str, labelFont).Width; } } } if (!a.TitleEnabled) return; SizeF sizeF1 = g.MeasureString(a.Title, a.TitleFont); PointF point1; PointF point2; float angle; if (a.Position == EAxisPosition.Bottom) { if (tvec3_3.x < 0.0) { point1 = taxisCalc.TickPos(0).x > taxisCalc.TickPos(1).x ? (PointF)(taxisCalc.TickPos(taxisCalc.nTicks - 1) + tvec3_4) : (PointF)(taxisCalc.TickPos(0) + tvec3_4); point1.Y += num3; point2 = point1; angle = (float)(Math.Atan2(Math.Abs(L.y), Math.Abs(L.x)) * 180.0 / Math.PI); } else { point1 = taxisCalc.TickPos(0).x > taxisCalc.TickPos(1).x ? (PointF)(taxisCalc.TickPos(0) + tvec3_4) : (PointF)(taxisCalc.TickPos(taxisCalc.nTicks - 1) + tvec3_4); point1.X += a.LabelFont.GetHeight(g); point1.Y += num3; point2 = point1; point2.X -= sizeF1.Width; angle = (float)(-Math.Atan2(Math.Abs(L.y), Math.Abs(L.x)) * 180.0 / Math.PI); } } else { point1 = taxisCalc.TickPos(0).z > taxisCalc.TickPos(1).z ? (PointF)(taxisCalc.TickPos(0) + tvec3_4) : (PointF)(taxisCalc.TickPos(taxisCalc.nTicks - 1) + tvec3_4); point1.X += num3; point2 = point1; point2.X -= sizeF1.Width; angle = -90f; } Matrix matrix = new Matrix(); matrix.RotateAt(angle, point1, MatrixOrder.Append); g.Transform = matrix; g.DrawString(a.Title, a.LabelFont, (Brush)new SolidBrush(a.LabelColor), point2); matrix.Reset(); g.Transform = matrix; }
private unsafe void Pnx3KTVZoc(int* obj0) { int[,] numArray = new int[this.Jm23JdRAV2, this.C843M1JDuK]; if (!this.hH1321Stt8) { int* numPtr = obj0; for (int index1 = 0; index1 < this.C843M1JDuK; ++index1) { for (int index2 = 0; index2 < this.Jm23JdRAV2; ++index2) numArray[index2, index1] = *numPtr++; } } double normInf1 = this.tn83Ged55u.NormInf; double normInf2 = this.PqY3RZfYIU.NormInf; TVec3 Origin = this.Sp23PRDLnW - 0.5 * this.tn83Ged55u - 0.5 * this.PqY3RZfYIU; TVec3 tvec3_1 = this.tn83Ged55u / normInf1; TVec3 tvec3_2 = this.PqY3RZfYIU / normInf2; double num1 = (this.MaxX - this.MinX) / normInf1; double num2 = (this.MaxY - this.MinY) / normInf2; double num3 = num1; double num4 = num2; if ((double)(2 * this.nx) >= normInf1 && (double)(2 * this.ny) >= normInf2) { num3 = (this.MaxX - this.MinX) / (double)this.nx; num4 = (this.MaxY - this.MinY) / (double)this.ny; } double ValO1 = this.MinX + 0.01 * num3; double ValO2 = this.MinY + 0.01 * num4; TVec3 tvec3_3 = this.tn83Ged55u; TVec3 tvec3_4 = this.PqY3RZfYIU; if (this.tn83Ged55u.z > 0.0) { ValO1 = this.MaxX - 0.99 * num3; num1 = -num1; num3 = -num3; Origin += this.tn83Ged55u; tvec3_3 = -this.tn83Ged55u; tvec3_1 = -tvec3_1; } if (this.PqY3RZfYIU.z > 0.0) { ValO2 = this.MaxY - 0.99 * num4; num2 = -num2; num4 = -num4; Origin += this.PqY3RZfYIU; tvec3_4 = -this.PqY3RZfYIU; tvec3_2 = -tvec3_2; } int num5 = (int)normInf1; int num6 = (int)normInf2; int num7 = (int)this.gcU3NtonPe.NormInf; bool[] flagArray1 = new bool[num5 + 2]; bool[] flagArray2 = new bool[num6 + 2]; bool[] flagArray3 = new bool[num7 + 2]; if (this.Grid) { TAxisCalc taxisCalc1 = new TAxisCalc(Origin, Origin + tvec3_3, ValO1, ValO1 + normInf1 * num1, 10); TAxisCalc taxisCalc2 = new TAxisCalc(Origin, Origin + tvec3_4, ValO2, ValO2 + normInf2 * num2, 10); double Val1 = ValO1; int index1 = 0; while (index1 <= num5) { if (taxisCalc1.TickPassed(Val1)) flagArray1[index1] = true; ++index1; Val1 += num1; } double Val2 = ValO2; int index2 = 0; while (index2 <= num6) { if (taxisCalc2.TickPassed(Val2)) flagArray2[index2] = true; ++index2; Val2 += num2; } } if (this.LevelLines) { for (int index = 0; index < num7; ++index) flagArray3[index] = (index & 4) != 0; } switch (this.Look) { case EChartLook.FromZeroToSurface: double x1 = ValO1; int index3 = 0; while (index3 <= num5) { bool flag = flagArray1[index3]; TVec3 tvec3_5 = Origin; double y = ValO2; int index1 = 0; while (index1 <= num6) { double num8 = this.f(x1, y); if (num8 > 0.0) { int num9 = (int)tvec3_5.y; int num10 = (int)(tvec3_5.y - num8); if (num10 < 0) num10 = 0; TColor tcolor1 = this.color0(x1, y); if (this.Grid && (flag || flagArray2[index1])) tcolor1 = this.Surface.GridDiffuse; TColor tcolor2 = this.E0C3BMxUWS(x1, y, num3, num4, tcolor1); tcolor2.Clip(); int num11 = tcolor2.Get888(); int index2 = (int)tvec3_5.x; if (this.LevelLines) { TColor tcolor3 = 0.81 * tcolor2; tcolor3.Clip(); int num12 = tcolor3.Get888(); for (int index4 = num9; index4 >= num10; --index4) numArray[index2, index4] = flagArray3[num9 - index4] ? num12 : num11; } else { for (int index4 = num9; index4 >= num10; --index4) numArray[index2, index4] = num11; } } ++index1; y += num2; tvec3_5 += tvec3_2; } ++index3; x1 += num1; Origin += tvec3_1; } break; case EChartLook.SurfaceOnly: double x2 = ValO1; int index5 = 0; while (index5 < num5) { bool flag = flagArray1[index5]; TVec3 tvec3_5 = Origin; double y = ValO2; int index1 = 0; while (index1 < num6) { double num8 = this.f(x2, y); double num9 = this.f(x2 + num1, y); double num10 = this.f(x2, y + num2); double num11 = this.f(x2 + num1, y + num2); double num12 = num8; double num13 = num8; if (num9 < num12) num12 = num9; if (num10 < num12) num12 = num10; if (num11 < num12) num12 = num11; if (num9 > num13) num13 = num9; if (num10 > num13) num13 = num10; if (num11 > num13) num13 = num11; int num14 = (int)tvec3_5.y; int num15 = (int)(tvec3_5.y - num12 + 1.0); int num16 = (int)(tvec3_5.y - num13); if (num15 < this.C843M1JDuK && num15 >= 0 && (num16 < this.C843M1JDuK && num16 >= 0)) { TColor tcolor1 = this.color0(x2, y); if (this.Grid && (flag || flagArray2[index1])) tcolor1 = this.Surface.GridDiffuse; TColor tcolor2 = this.E0C3BMxUWS(x2, y, num3, num4, tcolor1); tcolor2.Clip(); int num17 = tcolor2.Get888(); int index2 = (int)tvec3_5.x; if (this.LevelLines) { TColor tcolor3 = 0.81 * tcolor2; tcolor3.Clip(); int num18 = tcolor3.Get888(); for (int index4 = num15; index4 >= num16; --index4) { if (num12 > 0.0 || numArray[index2, index4] >= 0 || numArray[index2, index4] == -1) numArray[index2, index4] = (num14 - index4 & 4) != 0 ? num18 : num17; } } else { for (int index4 = num15; index4 >= num16; --index4) { if (num12 > 0.0 || numArray[index2, index4] >= 0 || numArray[index2, index4] == -1) numArray[index2, index4] = num17; } } } ++index1; y += num2; tvec3_5 += tvec3_2; } ++index5; x2 += num1; Origin += tvec3_1; } break; } for (int index1 = 0; index1 < this.C843M1JDuK; ++index1) { for (int index2 = 0; index2 < this.Jm23JdRAV2; ++index2) *obj0++ = numArray[index2, index1]; } }
private unsafe void Pnx3KTVZoc(int *obj0) { int[,] numArray = new int[this.Jm23JdRAV2, this.C843M1JDuK]; if (!this.hH1321Stt8) { int *numPtr = obj0; for (int index1 = 0; index1 < this.C843M1JDuK; ++index1) { for (int index2 = 0; index2 < this.Jm23JdRAV2; ++index2) { numArray[index2, index1] = *numPtr++; } } } double normInf1 = this.tn83Ged55u.NormInf; double normInf2 = this.PqY3RZfYIU.NormInf; TVec3 Origin = this.Sp23PRDLnW - 0.5 * this.tn83Ged55u - 0.5 * this.PqY3RZfYIU; TVec3 tvec3_1 = this.tn83Ged55u / normInf1; TVec3 tvec3_2 = this.PqY3RZfYIU / normInf2; double num1 = (this.MaxX - this.MinX) / normInf1; double num2 = (this.MaxY - this.MinY) / normInf2; double num3 = num1; double num4 = num2; if ((double)(2 * this.nx) >= normInf1 && (double)(2 * this.ny) >= normInf2) { num3 = (this.MaxX - this.MinX) / (double)this.nx; num4 = (this.MaxY - this.MinY) / (double)this.ny; } double ValO1 = this.MinX + 0.01 * num3; double ValO2 = this.MinY + 0.01 * num4; TVec3 tvec3_3 = this.tn83Ged55u; TVec3 tvec3_4 = this.PqY3RZfYIU; if (this.tn83Ged55u.z > 0.0) { ValO1 = this.MaxX - 0.99 * num3; num1 = -num1; num3 = -num3; Origin += this.tn83Ged55u; tvec3_3 = -this.tn83Ged55u; tvec3_1 = -tvec3_1; } if (this.PqY3RZfYIU.z > 0.0) { ValO2 = this.MaxY - 0.99 * num4; num2 = -num2; num4 = -num4; Origin += this.PqY3RZfYIU; tvec3_4 = -this.PqY3RZfYIU; tvec3_2 = -tvec3_2; } int num5 = (int)normInf1; int num6 = (int)normInf2; int num7 = (int)this.gcU3NtonPe.NormInf; bool[] flagArray1 = new bool[num5 + 2]; bool[] flagArray2 = new bool[num6 + 2]; bool[] flagArray3 = new bool[num7 + 2]; if (this.Grid) { TAxisCalc taxisCalc1 = new TAxisCalc(Origin, Origin + tvec3_3, ValO1, ValO1 + normInf1 * num1, 10); TAxisCalc taxisCalc2 = new TAxisCalc(Origin, Origin + tvec3_4, ValO2, ValO2 + normInf2 * num2, 10); double Val1 = ValO1; int index1 = 0; while (index1 <= num5) { if (taxisCalc1.TickPassed(Val1)) { flagArray1[index1] = true; } ++index1; Val1 += num1; } double Val2 = ValO2; int index2 = 0; while (index2 <= num6) { if (taxisCalc2.TickPassed(Val2)) { flagArray2[index2] = true; } ++index2; Val2 += num2; } } if (this.LevelLines) { for (int index = 0; index < num7; ++index) { flagArray3[index] = (index & 4) != 0; } } switch (this.Look) { case EChartLook.FromZeroToSurface: double x1 = ValO1; int index3 = 0; while (index3 <= num5) { bool flag = flagArray1[index3]; TVec3 tvec3_5 = Origin; double y = ValO2; int index1 = 0; while (index1 <= num6) { double num8 = this.f(x1, y); if (num8 > 0.0) { int num9 = (int)tvec3_5.y; int num10 = (int)(tvec3_5.y - num8); if (num10 < 0) { num10 = 0; } TColor tcolor1 = this.color0(x1, y); if (this.Grid && (flag || flagArray2[index1])) { tcolor1 = this.Surface.GridDiffuse; } TColor tcolor2 = this.E0C3BMxUWS(x1, y, num3, num4, tcolor1); tcolor2.Clip(); int num11 = tcolor2.Get888(); int index2 = (int)tvec3_5.x; if (this.LevelLines) { TColor tcolor3 = 0.81 * tcolor2; tcolor3.Clip(); int num12 = tcolor3.Get888(); for (int index4 = num9; index4 >= num10; --index4) { numArray[index2, index4] = flagArray3[num9 - index4] ? num12 : num11; } } else { for (int index4 = num9; index4 >= num10; --index4) { numArray[index2, index4] = num11; } } } ++index1; y += num2; tvec3_5 += tvec3_2; } ++index3; x1 += num1; Origin += tvec3_1; } break; case EChartLook.SurfaceOnly: double x2 = ValO1; int index5 = 0; while (index5 < num5) { bool flag = flagArray1[index5]; TVec3 tvec3_5 = Origin; double y = ValO2; int index1 = 0; while (index1 < num6) { double num8 = this.f(x2, y); double num9 = this.f(x2 + num1, y); double num10 = this.f(x2, y + num2); double num11 = this.f(x2 + num1, y + num2); double num12 = num8; double num13 = num8; if (num9 < num12) { num12 = num9; } if (num10 < num12) { num12 = num10; } if (num11 < num12) { num12 = num11; } if (num9 > num13) { num13 = num9; } if (num10 > num13) { num13 = num10; } if (num11 > num13) { num13 = num11; } int num14 = (int)tvec3_5.y; int num15 = (int)(tvec3_5.y - num12 + 1.0); int num16 = (int)(tvec3_5.y - num13); if (num15 < this.C843M1JDuK && num15 >= 0 && (num16 < this.C843M1JDuK && num16 >= 0)) { TColor tcolor1 = this.color0(x2, y); if (this.Grid && (flag || flagArray2[index1])) { tcolor1 = this.Surface.GridDiffuse; } TColor tcolor2 = this.E0C3BMxUWS(x2, y, num3, num4, tcolor1); tcolor2.Clip(); int num17 = tcolor2.Get888(); int index2 = (int)tvec3_5.x; if (this.LevelLines) { TColor tcolor3 = 0.81 * tcolor2; tcolor3.Clip(); int num18 = tcolor3.Get888(); for (int index4 = num15; index4 >= num16; --index4) { if (num12 > 0.0 || numArray[index2, index4] >= 0 || numArray[index2, index4] == -1) { numArray[index2, index4] = (num14 - index4 & 4) != 0 ? num18 : num17; } } } else { for (int index4 = num15; index4 >= num16; --index4) { if (num12 > 0.0 || numArray[index2, index4] >= 0 || numArray[index2, index4] == -1) { numArray[index2, index4] = num17; } } } } ++index1; y += num2; tvec3_5 += tvec3_2; } ++index5; x2 += num1; Origin += tvec3_1; } break; } for (int index1 = 0; index1 < this.C843M1JDuK; ++index1) { for (int index2 = 0; index2 < this.Jm23JdRAV2; ++index2) { *obj0++ = numArray[index2, index1]; } } }
public void PaintAxisGridAndTicks(Graphics g, Axis a, bool Marks, TVec3 o, TVec3 o_, TVec3 L) { a.MinorGridEnabled = false; a.MinorTicksEnabled = false; int nTicks = (int)(L.NormInf / 10.0); if (nTicks < 3) { nTicks = 3; } if (nTicks > 10) { nTicks = 10; } TAxisCalc taxisCalc = new TAxisCalc(o, o + L, a.Min, a.Max, nTicks); TVec3 tvec3_1 = o_ - o; TVec3 tvec3_2 = TVec3.O; TVec3 tvec3_3 = -0.04 * tvec3_1; if (o_.y > o.y) { tvec3_2 = tvec3_1; tvec3_3 = -tvec3_3; } TVec3 tvec3_4 = tvec3_2 + 1.04 * tvec3_3; if (a.GridEnabled) { Pen pen = new Pen(a.GridColor, a.GridWidth); for (int i = 0; i < taxisCalc.nTicks; ++i) { g.DrawLine(pen, (Point)taxisCalc.TickPos(i), (Point)(taxisCalc.TickPos(i) + tvec3_1)); } } if (a.Position == EAxisPosition.Right && tvec3_3.x <= 0.0) { Marks = false; } if (!Marks) { return; } int num1 = a.Position == EAxisPosition.Bottom ? 0 : 1; int num2 = a.Position == EAxisPosition.Bottom ? taxisCalc.nTicks - 1 : taxisCalc.nTicks; float num3 = 0.0f; if (a.MajorTicksEnabled) { Pen pen = new Pen(a.GridColor, a.GridWidth); for (int i = num1; i < num2; ++i) { g.DrawLine(pen, (Point)(taxisCalc.TickPos(i) + tvec3_2), (Point)(taxisCalc.TickPos(i) + tvec3_2 + tvec3_3)); } } if (a.LabelEnabled) { Font labelFont = a.LabelFont; float height = labelFont.GetHeight(g); SolidBrush solidBrush = new SolidBrush(a.LabelColor); StringFormat format = new StringFormat(); float num4; if (a.Position == EAxisPosition.Bottom) { format.FormatFlags = StringFormatFlags.DirectionVertical; num4 = (float)Math.Abs(taxisCalc.TickPos(1).x - taxisCalc.TickPos(0).x); } else { tvec3_4.y -= 0.5 * (double)a.LabelFont.GetHeight(); num4 = (float)Math.Abs(taxisCalc.TickPos(1).y - taxisCalc.TickPos(0).y); } if (tvec3_3.x < 0.0) { tvec3_4.x -= (double)a.LabelFont.GetHeight(); } if ((double)num4 > 0.0) { int num5 = (int)((double)height / (double)num4 + 1.0); if (num1 + num5 < num2) { int i = num1; while (i < num2) { if (i + num5 >= num2) { i = num2 - 1; } TVec3 tvec3_5 = taxisCalc.TickPos(i) + tvec3_4; string str = taxisCalc.TickVal(i).ToString(); g.DrawString(str, labelFont, (Brush)solidBrush, (PointF)tvec3_5, format); SizeF sizeF = g.MeasureString(str, labelFont); if ((double)sizeF.Width > (double)num3) { num3 = sizeF.Width; } i += num5; } } else if (num2 > 0) { int i = num2 - 1; TVec3 tvec3_5 = taxisCalc.TickPos(i) + tvec3_4; string str = taxisCalc.TickVal(i).ToString(); g.DrawString(str, labelFont, (Brush)solidBrush, (PointF)tvec3_5, format); num3 = g.MeasureString(str, labelFont).Width; } } } if (!a.TitleEnabled) { return; } SizeF sizeF1 = g.MeasureString(a.Title, a.TitleFont); PointF point1; PointF point2; float angle; if (a.Position == EAxisPosition.Bottom) { if (tvec3_3.x < 0.0) { point1 = taxisCalc.TickPos(0).x > taxisCalc.TickPos(1).x ? (PointF)(taxisCalc.TickPos(taxisCalc.nTicks - 1) + tvec3_4) : (PointF)(taxisCalc.TickPos(0) + tvec3_4); point1.Y += num3; point2 = point1; angle = (float)(Math.Atan2(Math.Abs(L.y), Math.Abs(L.x)) * 180.0 / Math.PI); } else { point1 = taxisCalc.TickPos(0).x > taxisCalc.TickPos(1).x ? (PointF)(taxisCalc.TickPos(0) + tvec3_4) : (PointF)(taxisCalc.TickPos(taxisCalc.nTicks - 1) + tvec3_4); point1.X += a.LabelFont.GetHeight(g); point1.Y += num3; point2 = point1; point2.X -= sizeF1.Width; angle = (float)(-Math.Atan2(Math.Abs(L.y), Math.Abs(L.x)) * 180.0 / Math.PI); } } else { point1 = taxisCalc.TickPos(0).z > taxisCalc.TickPos(1).z ? (PointF)(taxisCalc.TickPos(0) + tvec3_4) : (PointF)(taxisCalc.TickPos(taxisCalc.nTicks - 1) + tvec3_4); point1.X += num3; point2 = point1; point2.X -= sizeF1.Width; angle = -90f; } Matrix matrix = new Matrix(); matrix.RotateAt(angle, point1, MatrixOrder.Append); g.Transform = matrix; g.DrawString(a.Title, a.LabelFont, (Brush) new SolidBrush(a.LabelColor), point2); matrix.Reset(); g.Transform = matrix; }