示例#1
0
        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();
        }
示例#2
0
        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();
        }
示例#3
0
        ///<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();
        }