void initContour() { if (!root.earth.objManager.zLayers.TryGetValue("负荷等值图层", out containerLayer)) { root.earth.objManager.AddLayer("负荷等值图层", "负荷等值图层", "负荷等值图层"); containerLayer = root.earth.objManager.zLayers["负荷等值图层"]; } //========= double minx, miny, maxx, maxy; miny = dots.Min(p => p.location.X); maxy = dots.Max(p => p.location.X); //将经度换为X坐标, 纬度换为Y坐标 minx = dots.Min(p => p.location.Y); maxx = dots.Max(p => p.location.Y); double w = maxx - minx; double h = maxy - miny; minx = minx - w * 0.2; maxx = maxx + w * 0.2; miny = miny - h * 0.2; maxy = maxy + h * 0.2; w = maxx - minx; h = maxy - miny; //经纬换为屏幕坐标 int size = 1024; foreach (ContourGraph.ValueDot dot in dots) { dot.location = new Point((dot.location.Y - minx) / w * size, (maxy - dot.location.X) / h * size); //重新赋与新的平面点位置, 注,纬度取反,仅适用北半球 } double maxvalue = dots.Max(p => p.value); //设置计算参数 con = new ContourGraph.Contour(); con.dots = dots; con.opacityType = ContourGraph.Contour.EOpacityType.正坡形; con.opacityRange = 0.9; con.minOpacity = 0.3; con.maxOpacity = 1; con.canvSize = new Size(size, size); con.gridXCount = 200; con.gridYCount = 200; con.Span = 30; con.maxvalue = maxvalue * 0.9; con.minvalue = 0; con.dataFillValue = 0; con.dataFillMode = ContourGraph.Contour.EFillMode.八角点包络填充; con.isDrawGrid = false; con.isDrawLine = false; con.isFillLine = true; gcon = new pContour(containerLayer) { id = "负荷等值图" }; // { minJD = minx, maxJD = maxx, minWD = miny, maxWD = maxy }; gcon.setRange(minx, maxx, miny, maxy); gcon.brush = con.ContourBrush; containerLayer.AddObject("负荷等值图", gcon); con.GenCompleted += new EventHandler(con_GenCompleted); con.GenContourAsync(); //异步开始生成 root.earth.UpdateModel(); }
void showcontour(bool isShow) { if (isShow) { if (!root.earth.objManager.zLayers.TryGetValue("等高图层", out containerLayer)) { root.earth.objManager.AddLayer("等高图层", "等高图层", "等高图层"); containerLayer = root.earth.objManager.zLayers["等高图层"]; containerLayer.deepOrder = -1; //导入和重新计算点位置 pSymbolObject ps; dots = new List <ContourGraph.ValueDot>(); IEnumerable <PowerBasicObject> tmpobjs = root.earth.objManager.getAllObjListBelongtoCategory("变压器"); foreach (PowerBasicObject obj in tmpobjs)//.Where(p => p.busiRunData != null)) { ps = obj as pSymbolObject; double tmpvalue = 0.85 + 0.3 * rd.NextDouble();//(ps.busiRunData as RunDataNodeP).voltPUV; dots.Add(new ContourGraph.ValueDot() { id = obj.id, location = Point.Parse(ps.location), value = tmpvalue }); objs.Add(ps.id, ps); obj.busiData.busiValue1 = tmpvalue; //存储电压标幺值 , busiValue已被变电站负载占用 obj.busiData.busiValue2 = (tmpvalue - 0.85) / 0.3 * 100; //存储模板用位置信息,避免写转换 //更复杂应用应使用busiData自定义类来处理 obj.busiData.busiStr2 = tmpvalue.ToString("f2"); } double minx, miny, maxx, maxy; miny = dots.Min(p => p.location.X); maxy = dots.Max(p => p.location.X); //将经度换为X坐标, 纬度换为Y坐标 minx = dots.Min(p => p.location.Y); maxx = dots.Max(p => p.location.Y); double w = maxx - minx; double h = maxy - miny; minx = minx - w * 0.2; maxx = maxx + w * 0.2; miny = miny - h * 0.2; maxy = maxy + h * 0.2; w = maxx - minx; h = maxy - miny; //经纬换为屏幕坐标 int size = 1024; foreach (ContourGraph.ValueDot dot in dots) { dot.location = new Point((dot.location.Y - minx) / w * size, (maxy - dot.location.X) / h * size); //重新赋与新的平面点位置, 注,纬度取反,仅适用北半球 } //设置计算参数 con = new ContourGraph.Contour(); con.dots = dots; con.opacityType = ContourGraph.Contour.EOpacityType.倒梯形; con.canvSize = new Size(size, size); con.gridXCount = 300; con.gridYCount = 300; con.Span = 30; con.maxvalue = 1.15; con.minvalue = 0.85; con.dataFillValue = 1; con.dataFillMode = ContourGraph.Contour.EFillMode.单点包络填充; con.dataFillDictance = 100; con.dataFillSpan = 10; con.isDrawGrid = false; con.isDrawLine = false; con.isFillLine = true; //con.isShowData = true; //计算 //con.GenContour(); //创建图形 gcon = new pContour(containerLayer) { id = "等值图" }; // { minJD = minx, maxJD = maxx, minWD = miny, maxWD = maxy }; gcon.setRange(minx, maxx, miny, maxy); gcon.brush = con.ContourBrush; containerLayer.AddObject("等值线", gcon); //contourtimer.Start(); //timer模拟刷新 con.GenCompleted += new EventHandler(con_GenCompleted); con.GenContourAsync(); //异步开始生成 } containerLayer.logicVisibility = true; } else { if (root.earth.objManager.zLayers.TryGetValue("等高图层", out containerLayer)) { containerLayer.logicVisibility = false; } //contourtimer.Stop(); } root.earth.UpdateModel(); }
///<summary>示例:等高线</summary> void showContour(bool isShow) { pLayer containerLayer; if (isShow) { if (!uc.objManager.zLayers.TryGetValue("等高图层", out containerLayer)) { uc.objManager.AddLayer("等高图层", "等高图层", "等高图层"); containerLayer = uc.objManager.zLayers["等高图层"]; containerLayer.deepOrder = -1; //导入和重新计算点位置 pSymbolObject ps; dots = new List <ContourGraph.ValueDot>(); foreach (pLayer layer in uc.objManager.zLayers.Values) { foreach (PowerBasicObject obj in layer.pModels.Values) { if (obj is pSymbolObject) { ps = obj as pSymbolObject; dots.Add(new ContourGraph.ValueDot() { location = Point.Parse(ps.location), value = rd.Next(2200) }); } } } double minx, miny, maxx, maxy; miny = dots.Min(p => p.location.X); maxy = dots.Max(p => p.location.X); //将经度换为X坐标, 纬度换为Y坐标 minx = dots.Min(p => p.location.Y); maxx = dots.Max(p => p.location.Y); double w = maxx - minx; double h = maxy - miny; minx = minx - w * 0.2; maxx = maxx + w * 0.2; miny = miny - h * 0.2; maxy = maxy + h * 0.2; w = maxx - minx; h = maxy - miny; //经纬换为屏幕坐标 int size = 1024; foreach (ContourGraph.ValueDot dot in dots) { dot.location = new Point((dot.location.Y - minx) / w * size, (maxy - dot.location.X) / h * size); //重新赋与新的平面点位置, 注,纬度取反,仅适用北半球 } //设置计算参数 con = new ContourGraph.Contour(); con.dots = dots; con.opacityType = ContourGraph.Contour.EOpacityType.倒梯形; con.canvSize = new Size(size, size); con.gridXCount = 200; con.gridYCount = 200; con.Span = 30; con.maxvalue = 2000; con.minvalue = 200; con.dataFillValue = 1000; con.dataFillMode = ContourGraph.Contour.EFillMode.八角点包络填充; con.isDrawGrid = false; con.isDrawLine = false; con.isFillLine = true; //计算 //con.GenContour(); //创建图形 gcon = new pContour(containerLayer) { id = "等值图" }; // { minJD = minx, maxJD = maxx, minWD = miny, maxWD = maxy }; gcon.setRange(minx, maxx, miny, maxy); gcon.brush = con.ContourBrush; containerLayer.AddObject("等值线", gcon); contourtimer.Tick += new EventHandler(contourtimer_Tick); contourtimer.Start(); con.GenCompleted += new EventHandler(con_GenCompleted); con.GenContourAsync(); } containerLayer.logicVisibility = true; } else { if (uc.objManager.zLayers.TryGetValue("等高图层", out containerLayer)) { containerLayer.logicVisibility = false; } contourtimer.Stop(); } uc.UpdateModel(); }