Example #1
0
        public void GenerateTopologyRelatation(ContourPolyline[] contourLines)
        {
            double    BottomY = agisControl.MBR_Origin.MinY;
            double    TopY    = agisControl.MBR_Origin.MaxY;
            double    LeftX   = agisControl.MBR_Origin.MinX;
            double    RightX  = agisControl.MBR_Origin.MaxX;
            double    CenterX = (LeftX + RightX) / 2;
            double    CenterY = (BottomY + TopY) / 2;
            DataPoint rectP0  = new DataPoint(-10000, "Rect0", CenterX, CenterY, this.agisControl.GetGridInterpolationValue(CenterX, CenterY));
            DataPoint rectP1  = new DataPoint(-10001, "Rect1", CenterX, TopY, this.agisControl.GetGridInterpolationValue(CenterX, TopY));
            DataPoint rectP2  = new DataPoint(-10002, "Rect2", RightX, TopY, this.agisControl.GetGridInterpolationValue(RightX, TopY));
            DataPoint rectP3  = new DataPoint(-10003, "Rect3", RightX, CenterY, this.agisControl.GetGridInterpolationValue(RightX, CenterY));
            DataPoint rectP4  = new DataPoint(-10004, "Rect4", RightX, BottomY, this.agisControl.GetGridInterpolationValue(RightX, BottomY));
            DataPoint rectP5  = new DataPoint(-10005, "Rect5", CenterX, BottomY, this.agisControl.GetGridInterpolationValue(CenterX, BottomY));
            DataPoint rectP6  = new DataPoint(-10006, "Rect6", LeftX, BottomY, this.agisControl.GetGridInterpolationValue(LeftX, BottomY));
            DataPoint rectP7  = new DataPoint(-10007, "Rect7", LeftX, CenterY, this.agisControl.GetGridInterpolationValue(LeftX, CenterY));
            DataPoint rectP8  = new DataPoint(-10008, "Rect8", LeftX, TopY, this.agisControl.GetGridInterpolationValue(LeftX, TopY));
            //给定的边
            List <Edge> GivenEdges = new List <Edge>();

            //矩形边缘
            GivenEdges.Add(new Edge(rectP1, rectP2));
            GivenEdges.Add(new Edge(rectP2, rectP3));
            GivenEdges.Add(new Edge(rectP3, rectP4));
            GivenEdges.Add(new Edge(rectP4, rectP5));
            GivenEdges.Add(new Edge(rectP5, rectP6));
            GivenEdges.Add(new Edge(rectP6, rectP7));
            GivenEdges.Add(new Edge(rectP7, rectP8));
            GivenEdges.Add(new Edge(rectP8, rectP1));
            //矩形中心
            GivenEdges.Add(new Edge(rectP0, rectP1));
            GivenEdges.Add(new Edge(rectP0, rectP2));
            GivenEdges.Add(new Edge(rectP0, rectP3));
            GivenEdges.Add(new Edge(rectP0, rectP4));
            GivenEdges.Add(new Edge(rectP0, rectP5));
            GivenEdges.Add(new Edge(rectP0, rectP6));
            GivenEdges.Add(new Edge(rectP0, rectP7));
            GivenEdges.Add(new Edge(rectP0, rectP8));
            //产生的结果
            List <ContourPolyline> resultPolylineList = new List <ContourPolyline>();

            resultPolylineList.AddRange(contourLines);
            List <Edge> resultEdgeList = new List <Edge>();

            //resultEdgeList.AddRange(GivenEdges.ToArray());
            for (int i = 0; i < GivenEdges.Count; i++)
            {
                Object[] resIntersect = ContourPolyline.IntersectResult(resultPolylineList.ToArray(), GivenEdges[i]);
                List <ContourPolyline> subPolyline = (List <ContourPolyline>)resIntersect[0];
                List <Edge>            subEdge     = (List <Edge>)resIntersect[1];
                resultPolylineList = subPolyline;
                resultEdgeList.AddRange(subEdge);
            }
            this.mSubPolyline = resultPolylineList;
            this.mSubEdge     = resultEdgeList;
            return;
        }
Example #2
0
        /// <summary>
        /// 获取实际折线在屏幕上的投影
        /// </summary>
        /// <param name="polyline"></param>
        /// <returns></returns>
        public PointF[] GetScreenEdge(ContourPolyline polyline)
        {
            List <PointF> tempPointList = new List <PointF>();

            foreach (var point in polyline.PointList)
            {
                tempPointList.Add(new PointF((float)GetScreenLocX(point.X), (float)GetScreenLocY(point.Y)));
            }
            return(tempPointList.ToArray());
        }
        //           2
        //       ___________
        //      |           |
        //      |           |
        //    3 |           |  5
        //      |           |
        //      |___________|
        //  (i,j)     7
        //
        //生成所有等值线
        public List <ContourPolyline> CreateContourLines()
        {
            List <ContourPolyline> tempPolylineLsit = new List <ContourPolyline>();

            for (int i = 0; i < XCount; i++)
            {
                for (int j = 0; j <= YCount; j++)
                {
                    if (HH[i, j] < 2)
                    {
                        ContourPolyline tempPolyline = CreateContourLine(i, j, 2);
                        if (tempPolyline != null)
                        {
                            tempPolylineLsit.Add(tempPolyline);
                        }
                        tempPolyline = CreateContourLine(i, j, 7);
                        if (tempPolyline != null)
                        {
                            tempPolylineLsit.Add(tempPolyline);
                        }
                    }
                }
            }
            for (int i = 0; i <= XCount; i++)
            {
                for (int j = 0; j < YCount; j++)
                {
                    if (SS[i, j] < 2)
                    {
                        ContourPolyline tempPolyline = CreateContourLine(i, j, 3);
                        if (tempPolyline != null)
                        {
                            tempPolylineLsit.Add(tempPolyline);
                        }
                        tempPolyline = CreateContourLine(i, j, 5);
                        if (tempPolyline != null)
                        {
                            tempPolylineLsit.Add(tempPolyline);
                        }
                    }
                }
            }
            return(tempPolylineLsit);
        }