/// <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)); }
/// <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); }
/// <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); }