Esempio n. 1
0
        /// <summary>
        /// 有损压缩,将一些很小的对象合并成大的对象提高运行效率
        /// </summary>
        public void LossCompression(LossCompressionConfig config)
        {
            //int compression = 0;
            ////对多段线进行压缩
            //foreach (var LWPOLYLINE in ENTITIES.LWPOLYLINEList)
            //{
            //    for (int i = 0; i < LWPOLYLINE.P2D.Count - 2; i++)
            //    {
            //        P2D p1 = LWPOLYLINE.P2D[i];
            //        P2D p2 = LWPOLYLINE.P2D[i + 1];
            //        P2D p3 = LWPOLYLINE.P2D[i + 2];

            //        //计算出两条线的夹角
            //        var A = Math.Atan2(p2.Y - p1.Y, p2.X - p1.X);
            //        var B = Math.Atan2(p3.Y - p2.Y, p3.X - p2.X);
            //        var C = (B - A) / Math.PI * 180;
            //        var abcC = Math.Abs(C);

            //        //计算出两条线最远端的距离
            //        var d2 = ((p1.X - p3.X) * (p1.X - p3.X) + (p1.Y - p3.Y) * (p1.Y - p3.Y)) / 2;

            //        if (d2 <= config.Length2)
            //        {
            //            //计算当前长度所在的比例
            //            var bl = (d2 - config.Length1) / (config.Length2 - config.Length1);
            //            //计算当前角度
            //            var bd = (config.Deg2 - config.Deg1) * (1 - bl) + config.Deg1;

            //            if ((abcC >= 0 && abcC <= bd) || (abcC >= 180 - bd && abcC <= 180 + bd) || (abcC >= 360 - bd && abcC <= 360))
            //            {
            //                LWPOLYLINE.P2D.RemoveAt(i + 1);
            //                compression++;

            //                if (config.IsDoubleCompression == true) i--;
            //            }
            //        }
            //    }
            //}
        }
        /// <summary>
        /// 有损压缩,将一些很小的对象合并成大的对象提高运行效率
        /// </summary>
        public void LossCompression(LossCompressionConfig config)
        {
            //int compression = 0;
            ////对多段线进行压缩
            //foreach (var LWPOLYLINE in ENTITIES.LWPOLYLINEList)
            //{
            //    for (int i = 0; i < LWPOLYLINE.P2D.Count - 2; i++)
            //    {
            //        P2D p1 = LWPOLYLINE.P2D[i];
            //        P2D p2 = LWPOLYLINE.P2D[i + 1];
            //        P2D p3 = LWPOLYLINE.P2D[i + 2];

            //        //计算出两条线的夹角
            //        var A = Math.Atan2(p2.Y - p1.Y, p2.X - p1.X);
            //        var B = Math.Atan2(p3.Y - p2.Y, p3.X - p2.X);
            //        var C = (B - A) / Math.PI * 180;
            //        var abcC = Math.Abs(C);

            //        //计算出两条线最远端的距离
            //        var d2 = ((p1.X - p3.X) * (p1.X - p3.X) + (p1.Y - p3.Y) * (p1.Y - p3.Y)) / 2;

            //        if (d2 <= config.Length2)
            //        {
            //            //计算当前长度所在的比例
            //            var bl = (d2 - config.Length1) / (config.Length2 - config.Length1);
            //            //计算当前角度
            //            var bd = (config.Deg2 - config.Deg1) * (1 - bl) + config.Deg1;

            //            if ((abcC >= 0 && abcC <= bd) || (abcC >= 180 - bd && abcC <= 180 + bd) || (abcC >= 360 - bd && abcC <= 360))
            //            {
            //                LWPOLYLINE.P2D.RemoveAt(i + 1);
            //                compression++;

            //                if (config.IsDoubleCompression == true) i--;
            //            }
            //        }
            //    }
            //}
        }