Exemplo n.º 1
0
        //判断点是否在区域内
        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);
        }
Exemplo n.º 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()));
        }