以下Windows Forms程式碼要轉成WPF:
//负责画左边的坐标和数据点
protected override void OnPaint(PaintEventArgs e)
{ Graphics graphics = e.Graphics; Pen pen = new Pen(Color.Black, 1);
Brush text_brush = new SolidBrush(Color.Black);
Font text_font = new Font("宋体", 14);
//x
graphics.DrawLine(pen, Center_Zero_X, Center_Zero_Y, Center_Zero_X + LineLength, Center_Zero_Y);//x横线
graphics.DrawLine(pen, Center_Zero_X + LineLength - 5, Center_Zero_Y - 5, Center_Zero_X + LineLength, Center_Zero_Y);//x
graphics.DrawLine(pen, Center_Zero_X + LineLength - 5, Center_Zero_Y + 5, Center_Zero_X + LineLength, Center_Zero_Y);//x
graphics.DrawString("X", text_font, text_brush, Center_Zero_X + LineLength, Center_Zero_Y - 10);
//y
graphics.DrawLine(pen, Center_Zero_X, Center_Zero_Y, Center_Zero_X, Center_Zero_Y - LineLength);//y竖向线 graphics.DrawLine(pen, Center_Zero_X - 5, Center_Zero_Y - LineLength + 5, Center_Zero_X, Center_Zero_Y - LineLength);//y竖向线
graphics.DrawLine(pen, Center_Zero_X + 5, Center_Zero_Y - LineLength + 5, Center_Zero_X, Center_Zero_Y - LineLength);//y竖向线
graphics.DrawString("Y", text_font, text_brush, Center_Zero_X, Center_Zero_Y - LineLength + 10);
//0
Pen point_pen = new Pen(Color.Black, 2);
foreach (DataPoint dp in Dbscan.DataPoints_arry)
{
if (dp != null)
{
if (dp.cluster_tag == 0)
point_pen.Color = Color.Black;
else
point_pen.Color = GetColor(dp.cluster_tag); graphics.DrawEllipse(point_pen, (float)dp.d1, (float)dp.d2, 2, 1);
}
}
#region Windows 画凹包
if (reset && convexhull_checkbox.Checked)
{
int size = Dbscan.clustet_set.Count;
int num = 0;
for (int i = 0; i < size; i++)
{
int count = ((ArrayList)Dbscan.clustet_set[i]).Count;
Console.WriteLine("count " + i + " , n=" + count);
num += count;
ArrayList subArray = (ArrayList)Dbscan.clustet_set[i];
Color clusterColor = GetColor(((DataPoint)subArray[0]).cluster_tag);
Points p = new Points();
for (int j = 0; j < count; j++)
{
p.Add(new CGPoint(((DataPoint)subArray[j]).d1, ((DataPoint)subArray[j]).d2));
} if (p.Count > 3)
{
Console.WriteLine("big thank 3");
Points convexPoint = new Points();
convexHull = new ConvexHull(p);
convexPoint = convexHull.GetConvexHull();
PointF[] pointf;
pointf = new PointF[convexPoint.Count];
for (int k = 0; k < convexPoint.Count; k++)
{
pointf[k] = new PointF(convexPoint[k].X, convexPoint[k].Y);
}
Pen bluePen = new Pen(clusterColor, 2);
graphics.DrawPolygon(bluePen, pointf);
}
}
reset = false;
Console.WriteLine("the num=" + num);
}
#endregion }
//根据index,返回不同类的颜色,用于区分不同的族.最大支持16种不同颜色
public Color GetColor(int index)
{
Color[] xColor ={ Color.Red , Color.Pink, Color.Green,
Color.Gold, Color.Purple, Color.Blue, Color.Orange,
Color.Plum ,Color.Cyan,Color.GreenYellow,Color.LightBlue,
Color.MediumSpringGreen,Color.PowderBlue,Color.SlateBlue};
return xColor[index % xColor.Length];
}
//负责画左边的坐标和数据点
protected override void OnPaint(PaintEventArgs e)
{ Graphics graphics = e.Graphics; Pen pen = new Pen(Color.Black, 1);
Brush text_brush = new SolidBrush(Color.Black);
Font text_font = new Font("宋体", 14);
//x
graphics.DrawLine(pen, Center_Zero_X, Center_Zero_Y, Center_Zero_X + LineLength, Center_Zero_Y);//x横线
graphics.DrawLine(pen, Center_Zero_X + LineLength - 5, Center_Zero_Y - 5, Center_Zero_X + LineLength, Center_Zero_Y);//x
graphics.DrawLine(pen, Center_Zero_X + LineLength - 5, Center_Zero_Y + 5, Center_Zero_X + LineLength, Center_Zero_Y);//x
graphics.DrawString("X", text_font, text_brush, Center_Zero_X + LineLength, Center_Zero_Y - 10);
//y
graphics.DrawLine(pen, Center_Zero_X, Center_Zero_Y, Center_Zero_X, Center_Zero_Y - LineLength);//y竖向线 graphics.DrawLine(pen, Center_Zero_X - 5, Center_Zero_Y - LineLength + 5, Center_Zero_X, Center_Zero_Y - LineLength);//y竖向线
graphics.DrawLine(pen, Center_Zero_X + 5, Center_Zero_Y - LineLength + 5, Center_Zero_X, Center_Zero_Y - LineLength);//y竖向线
graphics.DrawString("Y", text_font, text_brush, Center_Zero_X, Center_Zero_Y - LineLength + 10);
//0
Pen point_pen = new Pen(Color.Black, 2);
foreach (DataPoint dp in Dbscan.DataPoints_arry)
{
if (dp != null)
{
if (dp.cluster_tag == 0)
point_pen.Color = Color.Black;
else
point_pen.Color = GetColor(dp.cluster_tag); graphics.DrawEllipse(point_pen, (float)dp.d1, (float)dp.d2, 2, 1);
}
}
#region Windows 画凹包
if (reset && convexhull_checkbox.Checked)
{
int size = Dbscan.clustet_set.Count;
int num = 0;
for (int i = 0; i < size; i++)
{
int count = ((ArrayList)Dbscan.clustet_set[i]).Count;
Console.WriteLine("count " + i + " , n=" + count);
num += count;
ArrayList subArray = (ArrayList)Dbscan.clustet_set[i];
Color clusterColor = GetColor(((DataPoint)subArray[0]).cluster_tag);
Points p = new Points();
for (int j = 0; j < count; j++)
{
p.Add(new CGPoint(((DataPoint)subArray[j]).d1, ((DataPoint)subArray[j]).d2));
} if (p.Count > 3)
{
Console.WriteLine("big thank 3");
Points convexPoint = new Points();
convexHull = new ConvexHull(p);
convexPoint = convexHull.GetConvexHull();
PointF[] pointf;
pointf = new PointF[convexPoint.Count];
for (int k = 0; k < convexPoint.Count; k++)
{
pointf[k] = new PointF(convexPoint[k].X, convexPoint[k].Y);
}
Pen bluePen = new Pen(clusterColor, 2);
graphics.DrawPolygon(bluePen, pointf);
}
}
reset = false;
Console.WriteLine("the num=" + num);
}
#endregion }
//根据index,返回不同类的颜色,用于区分不同的族.最大支持16种不同颜色
public Color GetColor(int index)
{
Color[] xColor ={ Color.Red , Color.Pink, Color.Green,
Color.Gold, Color.Purple, Color.Blue, Color.Orange,
Color.Plum ,Color.Cyan,Color.GreenYellow,Color.LightBlue,
Color.MediumSpringGreen,Color.PowderBlue,Color.SlateBlue};
return xColor[index % xColor.Length];
}
解决方案 »
- 如何在反射中传入事件与触发该事件
- 新手求助,类库中已处理的异常,如何在form类调用时提示并继续执行?
- 不用IDE怎么写一个窗体应用程序?
- C# 属性怎样指定类别
- C# 串口通讯出现问题,立即结帖
- DirectoryEntry读取匿名用户密码
- 哪位有magiclibrary1.7.4版本最好有源码及示例,给我发个好么,谢谢[email protected](送分)
- 小问题一个,请大家帮忙
- C#(2003) Odbc 执行事务时的一个奇怪问题.....大家来看看啊
- 有关IP与DNS动态绑定的问题
- TotalProcessorTime是否与% Processor Time相同?
- 位图数组BTYE[]如何保存成bmp或者JPG图像文件,因为十六进制字符串太长,无法全部放上。
https://msdn.microsoft.com/en-us/library/system.windows.media.drawingvisual(v=vs.110).aspx