Exemplo n.º 1
0
 /// <summary>
 /// 获取车体预览图
 /// </summary>
 /// <param name="imageWidth">图片宽度</param>
 /// <param name="imageHeight">图片高度</param>
 /// <param name="points">坐标点</param>
 /// <returns></returns>
 public Bitmap GetPreviewBitmap(int imageWidth, int imageHeight, ePointStyle pointStyle = ePointStyle.Number)
 {
     return(GetPreviewBitmap(imageWidth, imageHeight, new List <Point>(), pointStyle));
 }
Exemplo n.º 2
0
        /// <summary>
        /// 获取车体预览图
        /// </summary>
        /// <param name="imageWidth">图片宽度</param>
        /// <param name="imageHeight">图片高度</param>
        /// <param name="points">坐标点</param>
        /// <returns></returns>
        public Bitmap GetPreviewBitmap(int imageWidth, int imageHeight, List <Point> points, bool Rotate180FlipNone = false, ePointStyle pointStyle = ePointStyle.Point)
        {
            Bitmap res = new Bitmap(imageWidth, imageHeight);

            if (!Rotate180FlipNone)
            {
                Graphics g = Graphics.FromImage(res);
                // 填充背景
                g.FillRectangle(new SolidBrush(ColorTranslator.FromHtml("#F7F7F7")), new Rectangle(0, 0, res.Width, res.Height));

                // 边距
                float padding = imageWidth * 0.02f;
                // 整体缩放比例
                float zoomRate = Math.Min((imageWidth - padding * 2) / this.truckMeasure.TruckTotalLength, (imageHeight - padding * 2 - 40) / this.truckMeasure.CarriageWidth);
                // 汽车总长
                float truckTotalLength = this.truckMeasure.TruckTotalLength * zoomRate;
                // 车厢宽
                float carriageWidth = this.truckMeasure.CarriageWidth * zoomRate;
                // 车头长
                float truckHeadLength = this.truckMeasure.TruckHeadLength * zoomRate;
                // 车厢长
                float carriageLength = this.truckMeasure.CarriageLength * zoomRate;
                // 车厢尾部到第1根拉筋距离
                float fromTailObstacle1 = this.truckMeasure.FromTailObstacle1 * zoomRate;
                // 车厢尾部到第2根拉筋距离
                float fromTailObstacle2 = this.truckMeasure.FromTailObstacle2 * zoomRate;
                // 车厢尾部到第3根拉筋距离
                float fromTailObstacle3 = this.truckMeasure.FromTailObstacle3 * zoomRate;
                // 车厢尾部到第4根拉筋距离
                float fromTailObstacle4 = this.truckMeasure.FromTailObstacle4 * zoomRate;
                // 车厢尾部到第5根拉筋距离
                float fromTailObstacle5 = this.truckMeasure.FromTailObstacle5 * zoomRate;
                // 车厢尾部到第6根拉筋距离
                float fromTailObstacle6 = this.truckMeasure.FromTailObstacle6 * zoomRate;

                // x轴位移
                float xOffest = (imageWidth - padding * 2 - truckTotalLength) / 2f;
                // y轴位移
                float yOffest = (imageHeight - padding * 2 - carriageWidth) / 2f;

                // 绘制车头
                float truckHeadDecrement = Math.Max(2.5f, carriageWidth * 0.02f);
                g.DrawRectangle(Pens.RoyalBlue, padding + xOffest, padding + yOffest + truckHeadDecrement, truckHeadLength - truckHeadDecrement * 2, carriageWidth - truckHeadDecrement * 2);
                g.FillRectangle(Brushes.RoyalBlue, padding + xOffest, padding + yOffest + truckHeadDecrement, truckHeadLength - truckHeadDecrement * 2, carriageWidth - truckHeadDecrement * 2);
                // 绘制车厢
                g.DrawRectangle(new Pen(Color.RoyalBlue, 4), padding + xOffest + truckHeadLength, padding + yOffest, carriageLength, carriageWidth);
                g.FillRectangle(new SolidBrush(ColorTranslator.FromHtml("#D5D5D5")), padding + xOffest + truckHeadLength, padding + yOffest, carriageLength, carriageWidth);
                // 绘制拉筋
                Pen obstaclePen = new Pen(Color.Red, 1)
                {
                    DashStyle = System.Drawing.Drawing2D.DashStyle.Dash
                };
                Font obstacleFont = new Font("微软雅黑", 8, FontStyle.Regular);
                if (this.truckMeasure.Obstacle1 > 0)
                {
                    g.DrawString("拉筋一", obstacleFont, Brushes.Blue, padding + xOffest + truckTotalLength - fromTailObstacle1 - 18, padding + yOffest - 20);
                    g.DrawString(this.truckMeasure.FromTailObstacle1.ToString(), obstacleFont, Brushes.Blue, padding + xOffest + truckTotalLength - fromTailObstacle1 - 11, padding + carriageWidth + yOffest + 5);
                    g.DrawLine(obstaclePen, padding + xOffest + truckTotalLength - fromTailObstacle1, padding + yOffest, padding + xOffest + truckTotalLength - fromTailObstacle1, padding + carriageWidth + yOffest);
                }
                if (this.truckMeasure.Obstacle2 > 0)
                {
                    g.DrawString("拉筋二", obstacleFont, Brushes.Blue, padding + xOffest + truckTotalLength - fromTailObstacle2 - 18, padding + yOffest - 20);
                    g.DrawString(this.truckMeasure.FromTailObstacle2.ToString(), obstacleFont, Brushes.Blue, padding + xOffest + truckTotalLength - fromTailObstacle2 - 11, padding + carriageWidth + yOffest + 5);
                    g.DrawLine(obstaclePen, padding + xOffest + truckTotalLength - fromTailObstacle2, padding + yOffest, padding + xOffest + truckTotalLength - fromTailObstacle2, padding + carriageWidth + yOffest);
                }
                if (this.truckMeasure.Obstacle3 > 0)
                {
                    g.DrawString("拉筋三", obstacleFont, Brushes.Blue, padding + xOffest + truckTotalLength - fromTailObstacle3 - 18, padding + yOffest - 20);
                    g.DrawString(this.truckMeasure.FromTailObstacle3.ToString(), obstacleFont, Brushes.Blue, padding + xOffest + truckTotalLength - fromTailObstacle3 - 11, padding + carriageWidth + yOffest + 5);
                    g.DrawLine(obstaclePen, padding + xOffest + truckTotalLength - fromTailObstacle3, padding + yOffest, padding + xOffest + truckTotalLength - fromTailObstacle3, padding + carriageWidth + yOffest);
                }
                if (this.truckMeasure.Obstacle4 > 0)
                {
                    g.DrawString("拉筋四", obstacleFont, Brushes.Blue, padding + xOffest + truckTotalLength - fromTailObstacle4 - 18, padding + yOffest - 20);
                    g.DrawString(this.truckMeasure.FromTailObstacle4.ToString(), obstacleFont, Brushes.Blue, padding + xOffest + truckTotalLength - fromTailObstacle4 - 11, padding + carriageWidth + yOffest + 5);
                    g.DrawLine(obstaclePen, padding + xOffest + truckTotalLength - fromTailObstacle4, padding + yOffest, padding + xOffest + truckTotalLength - fromTailObstacle4, padding + carriageWidth + yOffest);
                }
                if (this.truckMeasure.Obstacle5 > 0)
                {
                    g.DrawString("拉筋五", obstacleFont, Brushes.Blue, padding + xOffest + truckTotalLength - fromTailObstacle5 - 18, padding + yOffest - 20);
                    g.DrawString(this.truckMeasure.FromTailObstacle5.ToString(), obstacleFont, Brushes.Blue, padding + xOffest + truckTotalLength - fromTailObstacle5 - 11, padding + carriageWidth + yOffest + 5);
                    g.DrawLine(obstaclePen, padding + xOffest + truckTotalLength - fromTailObstacle5, padding + yOffest, padding + xOffest + truckTotalLength - fromTailObstacle5, padding + carriageWidth + yOffest);
                }
                if (this.truckMeasure.Obstacle6 > 0)
                {
                    g.DrawString("拉筋六", obstacleFont, Brushes.Blue, padding + xOffest + truckTotalLength - fromTailObstacle6 - 18, padding + yOffest - 20);
                    g.DrawString(this.truckMeasure.FromTailObstacle6.ToString(), obstacleFont, Brushes.Blue, padding + xOffest + truckTotalLength - fromTailObstacle6 - 11, padding + carriageWidth + yOffest + 5);
                    g.DrawLine(obstaclePen, padding + xOffest + truckTotalLength - fromTailObstacle6, padding + yOffest, padding + xOffest + truckTotalLength - fromTailObstacle6, padding + carriageWidth + yOffest);
                }

                // 绘制坐标点
                if (pointStyle == ePointStyle.Point)
                {
                    float pointSize = (float)Math.Floor(Math.Max(2, this.AiguilleRadius * zoomRate));
                    foreach (Point point in points)
                    {
                        g.FillRectangle(Brushes.Green, padding + xOffest + truckTotalLength - point.X * zoomRate - pointSize, point.Y * zoomRate + yOffest - pointSize, 2 * pointSize, 2 * pointSize);
                    }
                }
                else if (pointStyle == ePointStyle.Number)
                {
                    Font pointFont = new Font("微软雅黑", (float)Math.Floor(Math.Max(6, this.AiguilleRadius * zoomRate)), FontStyle.Regular);
                    for (int i = 0; i < points.Count; i++)
                    {
                        g.DrawString((i + 1).ToString(), pointFont, Brushes.Black, padding + xOffest + truckTotalLength - points[i].X * zoomRate, points[i].Y * zoomRate + yOffest);
                    }
                }
            }
            else
            {
                Graphics g = Graphics.FromImage(res);
                // 填充背景
                g.FillRectangle(new SolidBrush(ColorTranslator.FromHtml("#F7F7F7")), new Rectangle(0, 0, res.Width, res.Height));

                // 边距
                float padding = imageWidth * 0.02f;
                // 整体缩放比例
                float zoomRate = Math.Min((imageWidth - padding * 2) / this.truckMeasure.TruckTotalLength, (imageHeight - padding * 2 - 40) / this.truckMeasure.CarriageWidth);
                // 汽车总长
                float truckTotalLength = this.truckMeasure.TruckTotalLength * zoomRate;
                // 车厢宽
                float carriageWidth = this.truckMeasure.CarriageWidth * zoomRate;
                // 车头长
                float truckHeadLength = this.truckMeasure.TruckHeadLength * zoomRate;
                // 车厢长
                float carriageLength = this.truckMeasure.CarriageLength * zoomRate;
                // 车厢尾部到第1根拉筋距离
                float fromTailObstacle1 = this.truckMeasure.FromTailObstacle1 * zoomRate;
                // 车厢尾部到第2根拉筋距离
                float fromTailObstacle2 = this.truckMeasure.FromTailObstacle2 * zoomRate;
                // 车厢尾部到第3根拉筋距离
                float fromTailObstacle3 = this.truckMeasure.FromTailObstacle3 * zoomRate;
                // 车厢尾部到第4根拉筋距离
                float fromTailObstacle4 = this.truckMeasure.FromTailObstacle4 * zoomRate;
                // 车厢尾部到第5根拉筋距离
                float fromTailObstacle5 = this.truckMeasure.FromTailObstacle5 * zoomRate;
                // 车厢尾部到第6根拉筋距离
                float fromTailObstacle6 = this.truckMeasure.FromTailObstacle6 * zoomRate;

                // x轴位移
                float xOffest = (imageWidth - padding * 2 - truckTotalLength) / 2f;
                // y轴位移
                float yOffest = (imageHeight - padding * 2 - carriageWidth) / 2f;

                // 绘制车头
                float truckHeadDecrement = Math.Max(2.5f, carriageWidth * 0.02f);
                g.DrawRectangle(Pens.RoyalBlue, imageWidth - (padding + xOffest) - (truckHeadLength - truckHeadDecrement * 2), imageHeight - (padding + yOffest + truckHeadDecrement) - (carriageWidth - truckHeadDecrement * 2), truckHeadLength - truckHeadDecrement * 2, carriageWidth - truckHeadDecrement * 2);
                g.FillRectangle(Brushes.RoyalBlue, imageWidth - (padding + xOffest) - (truckHeadLength - truckHeadDecrement * 2), imageHeight - (padding + yOffest + truckHeadDecrement) - (carriageWidth - truckHeadDecrement * 2), truckHeadLength - truckHeadDecrement * 2, carriageWidth - truckHeadDecrement * 2);
                // 绘制车厢
                g.DrawRectangle(new Pen(Color.RoyalBlue, 4), imageWidth - (padding + xOffest + truckHeadLength) - carriageLength, imageHeight - (padding + yOffest) - carriageWidth, carriageLength, carriageWidth);
                g.FillRectangle(new SolidBrush(ColorTranslator.FromHtml("#D5D5D5")), imageWidth - (padding + xOffest + truckHeadLength) - carriageLength, imageHeight - (padding + yOffest) - carriageWidth, carriageLength, carriageWidth);
                // 绘制拉筋
                Pen obstaclePen = new Pen(Color.Red, 1)
                {
                    DashStyle = System.Drawing.Drawing2D.DashStyle.Dash
                };
                Font obstacleFont = new Font("微软雅黑", 8, FontStyle.Regular);
                if (this.truckMeasure.Obstacle1 > 0)
                {
                    g.DrawString("拉筋一", obstacleFont, Brushes.Blue, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle1 + 18), padding + yOffest - 20);
                    g.DrawString(this.truckMeasure.FromTailObstacle1.ToString(), obstacleFont, Brushes.Blue, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle1 + 11), padding + carriageWidth + yOffest + 5);
                    g.DrawLine(obstaclePen, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle1), padding + yOffest, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle1), padding + carriageWidth + yOffest);
                }
                if (this.truckMeasure.Obstacle2 > 0)
                {
                    g.DrawString("拉筋二", obstacleFont, Brushes.Blue, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle2 + 18), padding + yOffest - 20);
                    g.DrawString(this.truckMeasure.FromTailObstacle2.ToString(), obstacleFont, Brushes.Blue, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle2 + 11), padding + carriageWidth + yOffest + 5);
                    g.DrawLine(obstaclePen, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle2), padding + yOffest, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle2), padding + carriageWidth + yOffest);
                }
                if (this.truckMeasure.Obstacle3 > 0)
                {
                    g.DrawString("拉筋三", obstacleFont, Brushes.Blue, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle3 + 18), padding + yOffest - 20);
                    g.DrawString(this.truckMeasure.FromTailObstacle3.ToString(), obstacleFont, Brushes.Blue, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle3 + 11), padding + carriageWidth + yOffest + 5);
                    g.DrawLine(obstaclePen, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle3), padding + yOffest, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle3), padding + carriageWidth + yOffest);
                }
                if (this.truckMeasure.Obstacle4 > 0)
                {
                    g.DrawString("拉筋四", obstacleFont, Brushes.Blue, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle4 + 18), padding + yOffest - 20);
                    g.DrawString(this.truckMeasure.FromTailObstacle4.ToString(), obstacleFont, Brushes.Blue, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle4 + 11), padding + carriageWidth + yOffest + 5);
                    g.DrawLine(obstaclePen, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle4), padding + yOffest, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle4), padding + carriageWidth + yOffest);
                }
                if (this.truckMeasure.Obstacle5 > 0)
                {
                    g.DrawString("拉筋五", obstacleFont, Brushes.Blue, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle5 + 18), padding + yOffest - 20);
                    g.DrawString(this.truckMeasure.FromTailObstacle5.ToString(), obstacleFont, Brushes.Blue, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle5 + 11), padding + carriageWidth + yOffest + 5);
                    g.DrawLine(obstaclePen, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle5), padding + yOffest, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle5), padding + carriageWidth + yOffest);
                }
                if (this.truckMeasure.Obstacle6 > 0)
                {
                    g.DrawString("拉筋六", obstacleFont, Brushes.Blue, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle6 + 18), padding + yOffest - 20);
                    g.DrawString(this.truckMeasure.FromTailObstacle6.ToString(), obstacleFont, Brushes.Blue, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle6 + 11), padding + carriageWidth + yOffest + 5);
                    g.DrawLine(obstaclePen, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle6), padding + yOffest, imageWidth - (padding + xOffest + truckTotalLength - fromTailObstacle6), padding + carriageWidth + yOffest);
                }

                // 绘制坐标点
                if (pointStyle == ePointStyle.Point)
                {
                    float pointSize = (float)Math.Floor(Math.Max(2, this.AiguilleRadius * zoomRate));
                    foreach (Point point in points)
                    {
                        g.FillRectangle(Brushes.Green, imageWidth - (padding + xOffest + truckTotalLength - point.X * zoomRate - pointSize) - (2 * pointSize), imageHeight - (point.Y * zoomRate + yOffest - pointSize) - (2 * pointSize), 2 * pointSize, 2 * pointSize);
                    }
                }
                else if (pointStyle == ePointStyle.Number)
                {
                    Font pointFont = new Font("微软雅黑", (float)Math.Floor(Math.Max(6, this.AiguilleRadius * zoomRate)), FontStyle.Regular);
                    for (int i = 0; i < points.Count; i++)
                    {
                        g.DrawString((i + 1).ToString(), pointFont, Brushes.Black, padding + xOffest + truckTotalLength - points[i].X * zoomRate, points[i].Y * zoomRate + yOffest);
                    }
                }
            }

            return(res);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 获取车体预览图
        /// </summary>
        /// <param name="imageWidth">图片宽度</param>
        /// <param name="imageHeight">图片高度</param>
        /// <param name="points">坐标点</param>
        /// <returns></returns>
        public Bitmap GetPreviewBitmap(int imageWidth, int imageHeight, List <Point> points, ePointStyle pointStyle = ePointStyle.Number)
        {
            Bitmap res = new Bitmap(imageWidth, imageHeight);

            Graphics g = Graphics.FromImage(res);

            // 填充背景
            g.FillRectangle(new SolidBrush(ColorTranslator.FromHtml("#F7F7F7")), new Rectangle(0, 0, res.Width, res.Height));

            // 边距
            float padding = imageWidth * 0.02f;
            // 整体缩放比例
            float zoomRate = (imageWidth - padding * 2) / this.trainMeasure.CarriageLength;
            // 车厢宽
            float carriageWidth = this.trainMeasure.CarriageWidth * zoomRate;
            // 车厢长度
            float carriageLength = this.trainMeasure.CarriageLength * zoomRate;

            // y轴位移
            float yOffest = (imageHeight - padding * 2 - carriageWidth) / 2f;

            // 绘制车厢
            g.DrawRectangle(new Pen(Color.RoyalBlue, 4), padding, padding + yOffest, carriageLength, carriageWidth);
            g.FillRectangle(new SolidBrush(ColorTranslator.FromHtml("#D5D5D5")), padding, padding + yOffest, carriageLength, carriageWidth);

            // 绘制坐标点
            if (pointStyle == ePointStyle.Point)
            {
                float pointSize = (float)Math.Floor(Math.Max(2, this.AiguilleRadius * zoomRate));
                foreach (Point point in points)
                {
                    g.FillRectangle(Brushes.Green, padding + point.X * zoomRate, point.Y * zoomRate + yOffest, pointSize, pointSize);
                }
            }
            else if (pointStyle == ePointStyle.Number)
            {
                Font pointFont = new Font("微软雅黑", (float)Math.Floor(Math.Max(6, this.AiguilleRadius * zoomRate)), FontStyle.Regular);
                for (int i = 0; i < points.Count; i++)
                {
                    g.DrawString((i + 1).ToString(), pointFont, Brushes.Black, padding + points[i].X * zoomRate, points[i].Y * zoomRate + yOffest);
                }
            }

            return(res);
        }