//判断点是否在区域内 public bool IfPointInRegion(TopoPoint todeterPoint) { TopoPoint[] points = this.ConvertToPointArray(); TopoPoint rayPoint = new TopoPoint(todeterPoint.X * 2, todeterPoint.Y, todeterPoint.Z, false); int intersectCount = 0; for (int i = 0; i < points.Length - 1; i++) { if (TopoPolygon.IntersectPoint(points[i], points[i + 1], todeterPoint, rayPoint) == true) { intersectCount++; } } return(intersectCount / 2 != 0); }
/// <summary> /// 根据点的拓扑关系,生成多边形的拓扑关系 /// </summary> /// <returns></returns> public TopoPolygonSet GenerateTopoPolygonSet() { List <TopoPolygon> polygonList = new List <TopoPolygon>(); foreach (var tpPoint in this.TopoNodeList) { List <Tuple <TopoPoint, double, double, int, TopoPolyline> > curPointStructList = new List <Tuple <TopoPoint, double, double, int, TopoPolyline> >(); List <TopoPolyline> relaArcs = tpPoint.TopologyArcs; foreach (var arc in relaArcs) { int direct = arc.IsNode(tpPoint); double angle = -1; double otherNodeAngle = -2; switch (direct) { case 1: angle = arc.GetBeginNodeAngle(); otherNodeAngle = arc.GetEndNodeAngle(); break; case -1: angle = arc.GetEndNodeAngle(); otherNodeAngle = arc.GetBeginNodeAngle(); break; default: break; } Tuple <TopoPoint, double, double, int, TopoPolyline> curPointStruct = new Tuple <TopoPoint, double, double, int, TopoPolyline>(arc.GetAnotherNode(tpPoint), angle, otherNodeAngle, direct, arc); curPointStructList.Add(curPointStruct); } List <TopoPolyline> curPolygon = new List <TopoPolyline>(); List <int> directList = new List <int>(); foreach (var pointStruct in curPointStructList) { var iterationTuple = pointStruct; while (iterationTuple.Item1.PointID != tpPoint.PointID) { curPolygon.Add(iterationTuple.Item5); directList.Add(iterationTuple.Item4); iterationTuple = this.GetNextNode(iterationTuple); } curPolygon.Add(iterationTuple.Item5); directList.Add(iterationTuple.Item4); //追踪成功 if (curPolygon.Count > 0) { TopoPolygon tempPolygon = new TopoPolygon(curPolygon.ToArray()); for (int i = 0; i < directList.Count; i++) { if (directList[i] > 0) { curPolygon[i].RightPolygon = tempPolygon; } else if (directList[i] < 0) { curPolygon[i].LeftPolygon = tempPolygon; } } polygonList.Add(tempPolygon); curPolygon = new List <TopoPolyline>(); directList = new List <int>(); } } } return(new TopoPolygonSet(polygonList.ToArray())); }