コード例 #1
0
        /// <summary>
        /// 生成外轮廓多边形
        /// </summary>
        /// <param name="grid"></param>
        /// <param name="me"></param>
        /// <param name="startSearchPoint"></param>
        /// <param name="limitDistance"></param>
        /// <param name="isBlockOutPoly">是否为挡格的轮廓多边形,是的时候需要倒序处理</param>
        /// <returns></returns>
        private static ContourPoly GeneralOutPoly(RLEGridMap grid, MapElement me, Float2 startSearchPoint, float limitDistance, bool isBlockOutPoly)
        {
            ContourPoly    poly   = new ContourPoly();
            List <Double2> points = me.GetContourPoints(grid, startSearchPoint);

            if (isBlockOutPoly == true)
            {
                points.Reverse();
            }
            List <int>     listIndex = ConvexPolygon2D.GenerateConvexPolygonIndex(points.ToArray());
            List <Double2> polys     = new List <Double2>();

            for (int i = 0; i < listIndex.Count; i++)
            {
                if (i < listIndex.Count - 1)
                {
                    OptimizationContourConvexLine(listIndex[i], listIndex[i + 1], false, limitDistance, points, ref polys);
                }
                else
                {
                    OptimizationContourConvexLine(listIndex[i], listIndex[0], true, limitDistance, points, ref polys);
                }
            }
            poly.InitData(polys);
            return(poly);
        }
コード例 #2
0
 /// <summary>
 /// 添加挡格轮廓多边形
 /// </summary>
 /// <param name="unit"></param>
 public void AddBlockPoly(ContourPoly poly)
 {
     if (poly == null)
     {
         return;
     }
     blockPolys.Add(poly);
 }
コード例 #3
0
        /// <summary>
        /// 生成外轮廓多边形
        /// </summary>
        /// <param name="grid"></param>
        /// <param name="limitDistance"></param>
        /// <returns></returns>
        public static ContourUnit GeneralContourUnit(RLEGridMap grid, MapElement me, float limitDistance)
        {
            ContourPoly poly = GeneralOutPoly(grid, me, me.GetKeyPoint(), limitDistance, false);
            ContourUnit unit = new ContourUnit(poly);;

            if (me is MapArea)
            {
                Float2 keyPoint = Float2.zero;
                while (poly.FindKeyPoint(grid, ref keyPoint) == true)
                {
                    ContourPoly poly1 = GeneralOutPoly(grid, me, keyPoint, limitDistance, true);
                    unit.AddBlockPoly(poly1);
                }
            }
            return(unit);
        }
コード例 #4
0
 public ContourUnit(ContourPoly outPoly)
 {
     OutPoly = outPoly;
 }