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; }
/// <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); }