终于有空整理一下关于WPF的2D图形化实现的代码样例了。
目前阶段,已经把功能封装成了一个控件,主要有一下的功能
1、图形对与滚动条支持的功能。
2、图形中的图元同步的移动功能。
3、图形中的图元同步的缩放。
4、图形中的图元对象的分层的概念(层可以套层,图元下面加载子图元)。
5、图形中的图元的选中功能。
6、为图形中的图元提供虚拟图层(提供缓创建功能)功能
7、加载自定义图形的支持,并且同步移动,缩放功能。
8、图形中的图元闪烁功能。
9、图元的移动功能。
10、框选区域放大功能。
基本就是上面的功能,有些功能,相隔时间久了,偶有可能忘记,只能考大家发现了。
基于NET4.0 开发工具VS2010
下面讲一下主要功能的实现的代码
加载对层和加载对象
加载对层和加载对象
for (int i = 0; i < 1; i++) { //加载箱区 foreach (var area in areaGisData) { BayVisualShape bayVisualShape = new BayVisualShape(area.AreaNo + i.ToString(), new Point(area.GisPoint.X + i * 1000, area.GisPoint.Y), area.GisWidth - 0.2, area.GisHeight - 0.2); bayVisualShape.Color = Colors.Blue; bayVisualShape.VisualLable = new VisualLable(area.AreaNo){LableDirection=LabelPosition.MiddleRight}; //图层加载对象 AreaLayer.AddObject(bayVisualShape); bayVisualShape.Virtual = true; //加载场箱位 foreach (var slotGisData in area.SlotGisData) { YardSlotVisualShape slotGisDataShape = new YardSlotVisualShape(slotGisData.SlotNo + i.ToString(), new Point(slotGisData.GisPoint.X + i * 1000, slotGisData.GisPoint.Y), slotGisData.GisWidth - 0.2, slotGisData.GisHeight - 0.2); slotGisDataShape.Color = Colors.Red; // 对象加载子对象 bayVisualShape.AddObject(slotGisDataShape); } //break; } } for (int i = 0; i < 1; i++) { //加载箱区 foreach (var area in areaGisData) { BayVisualShape bayVisualShape = new BayVisualShape(area.AreaNo + i.ToString(), new Point(area.GisPoint.X + i * 1000, area.GisPoint.Y), area.GisWidth - 0.2, area.GisHeight - 0.2); bayVisualShape.Color = Colors.Blue; bayVisualShape.VisualLable = new VisualLable(area.AreaNo){LableDirection=LabelPosition.MiddleRight}; //图层加载对象 AreaLayer.AddObject(bayVisualShape); bayVisualShape.Virtual = true; //加载场箱位 foreach (var slotGisData in area.SlotGisData) { YardSlotVisualShape slotGisDataShape = new YardSlotVisualShape(slotGisData.SlotNo + i.ToString(), new Point(slotGisData.GisPoint.X + i * 1000, slotGisData.GisPoint.Y), slotGisData.GisWidth - 0.2, slotGisData.GisHeight - 0.2); slotGisDataShape.Color = Colors.Red; // 对象加载子对象 bayVisualShape.AddObject(slotGisDataShape); } //break; } }加载对层和加载对象
for (int i = 0; i < 1; i++) { //加载箱区 foreach (var area in areaGisData) { BayVisualShape bayVisualShape = new BayVisualShape(area.AreaNo + i.ToString(), new Point(area.GisPoint.X + i * 1000, area.GisPoint.Y), area.GisWidth - 0.2, area.GisHeight - 0.2); bayVisualShape.Color = Colors.Blue; bayVisualShape.VisualLable = new VisualLable(area.AreaNo){LableDirection=LabelPosition.MiddleRight}; //图层加载对象 AreaLayer.AddObject(bayVisualShape); bayVisualShape.Virtual = true; //加载场箱位 foreach (var slotGisData in area.SlotGisData) { YardSlotVisualShape slotGisDataShape = new YardSlotVisualShape(slotGisData.SlotNo + i.ToString(), new Point(slotGisData.GisPoint.X + i * 1000, slotGisData.GisPoint.Y), slotGisData.GisWidth - 0.2, slotGisData.GisHeight - 0.2); slotGisDataShape.Color = Colors.Red; // 对象加载子对象 bayVisualShape.AddObject(slotGisDataShape); } //break; } } for (int i = 0; i < 1; i++) { //加载箱区 foreach (var area in areaGisData) { BayVisualShape bayVisualShape = new BayVisualShape(area.AreaNo + i.ToString(), new Point(area.GisPoint.X + i * 1000, area.GisPoint.Y), area.GisWidth - 0.2, area.GisHeight - 0.2); bayVisualShape.Color = Colors.Blue; bayVisualShape.VisualLable = new VisualLable(area.AreaNo){LableDirection=LabelPosition.MiddleRight}; //图层加载对象 AreaLayer.AddObject(bayVisualShape); bayVisualShape.Virtual = true; //加载场箱位 foreach (var slotGisData in area.SlotGisData) { YardSlotVisualShape slotGisDataShape = new YardSlotVisualShape(slotGisData.SlotNo + i.ToString(), new Point(slotGisData.GisPoint.X + i * 1000, slotGisData.GisPoint.Y), slotGisData.GisWidth - 0.2, slotGisData.GisHeight - 0.2); slotGisDataShape.Color = Colors.Red; // 对象加载子对象 bayVisualShape.AddObject(slotGisDataShape); } //break; } }
//虚拟图层(提供缓创建功能)
visualMainWindow1.AddVirtualLayers(AreaLayer);
// 染色
foreach (var sharp in AreaLayer.SharpList) { foreach (var child in sharp.SharpList) { if (((VisualSharp)child).Color == Colors.Red) ((VisualSharp)child).Color = Colors.DarkGreen; else { ((VisualSharp)child).Color = Colors.Red; } } } foreach (var sharp in AreaLayer.SharpList) { foreach (var child in sharp.SharpList) { if (((VisualSharp)child).Color == Colors.Red) ((VisualSharp)child).Color = Colors.DarkGreen; else { ((VisualSharp)child).Color = Colors.Red; } } }
//移动
foreach (var sharp in AreaLayer1.SharpList)
{ sharp.StartTransformAnimation(new Point(sharp.OrgPos.X + 1000, sharp.OrgPos.Y + 1000), 1); } foreach (var sharp in AreaLayer1.SharpList) { sharp.StartTransformAnimation(new Point(sharp.OrgPos.X + 1000, sharp.OrgPos.Y + 1000), 1); }
//闪烁
foreach (var sharp in AreaLayer1.SharpList)
{ sharp.StartColorAnimation(Colors.Blue, Colors.Red, 3, true, true); }foreach (var sharp in AreaLayer.SharpList)
{ foreach (var visualSharp in sharp.SharpList) { visualSharp.StartColorAnimation(Colors.White, Colors.Black, 3, true, true); } return; } foreach (var sharp in AreaLayer1.SharpList) { sharp.StartColorAnimation(Colors.Blue, Colors.Red, 3, true, true); }foreach (var sharp in AreaLayer.SharpList)
{ foreach (var visualSharp in sharp.SharpList) { visualSharp.StartColorAnimation(Colors.White, Colors.Black, 3, true, true); } return; }
//取消闪烁
foreach (var sharp in AreaLayer1.SharpList) { sharp.CancelColorAnimation(Colors.Blue); } foreach (var sharp in AreaLayer1.SharpList) { sharp.CancelColorAnimation(Colors.Blue); }
//单击得到对象
private void visualMainWindow1_MouseLeftButtonDownGetVisual(object sender, System.EventArgs e) { MessageBox.Show("单击选中的对象"+((VisualSharp)sender).UniqueId, "单击选中的对象"); } private void visualMainWindow1_MouseLeftButtonDownGetVisual(object sender, System.EventArgs e) { MessageBox.Show("单击选中的对象"+((VisualSharp)sender).UniqueId, "单击选中的对象"); }
先写这些。。哈哈哈。。。困了。。去休息一下。。。