//public String WellnessPictureDirectory { get; set; } //public String SportPictureDirectory { get; set; } public void CreateActuallDynamicPictures(Dictionary<String, DateTime> DatesToRunFor, int FullWidth, int FullHeight) { Data.DbServer3.AEAG.BookingEntries.Load_ForTimePeriode(DatesToRunFor.Values.First(), DatesToRunFor.Values.Last()); //Debug.WriteLine("Alle"); //int AlleCounter = 0; //foreach (BookingEntry bookingEntry in Data.DbServer3.AEAG.BookingEntries // .Collection) // { // Debug.WriteLine(++AlleCounter + " " + bookingEntry.BookingStatus + " " + bookingEntry.BookedFor + " - " + bookingEntry.BookableUnit.NameId); // } foreach (String DateName in DatesToRunFor.Keys) { Debug.WriteLine(DateName + " - " + DatesToRunFor[DateName]); int Counter = 0; foreach (BookingEntry bookingEntry in Data.DbServer3.AEAG.BookingEntries .Collection.Where(sel => ((DateTime)sel.BookedFor).Date == DatesToRunFor[DateName])) { Debug.WriteLine(++Counter + " " + bookingEntry.BookingStatus + " " + bookingEntry.BookedFor + " - " + bookingEntry.BookableUnit.NameId); } } foreach (String DateName in DatesToRunFor.Keys) { foreach (Ressource ressource in Data.DbServer3.AEAG.Ressources.DistinctBy(dis => dis.DisplayOn) .OrderBy(ord => ord.DisplayOn)) { DrawingStandards Standards = new DrawingStandards(); Standards.FullWidth = FullWidth; Standards.FullHeight = FullHeight; List<List<DrawingValues>> DrawingsGrid = new List<List<DrawingValues>>(); Debug.WriteLine("PictureName = " + ressource.DisplayOn + "-" + DateName); DrawingsGrid.Add(new List<DrawingValues>() { new DrawingValues(TopHeaderText(), DrawingValues.ContentType.GlobalHeadLine) }); List<DrawingValues> HeadLine = new List<DrawingValues>(); DrawingsGrid.Add(HeadLine); HeadLine.Add(new DrawingValues(TopLeftHeaderText(DatesToRunFor[DateName]), DrawingValues.ContentType.RowHeadColumnHead)); foreach (BookableUnit bookableUnit in ressource.BookableUnits .OrderBy(ord => ord.TimeTableEntry.DisplayInColumnOrder)) { HeadLine.Add(new DrawingValues(bookableUnit.TimeTableEntry.HeadLineShortText, DrawingValues.ContentType.ColumnHead)); } foreach (Ressource singelResource in Data.DbServer3.AEAG.Ressources .Where(sel => sel.DisplayOn == ressource.DisplayOn) .OrderBy(ord => ord.Adresse).ThenBy(then => then.NameId)) { List<DrawingValues> ContentRow = new List<DrawingValues>(); DrawingsGrid.Add(ContentRow); ContentRow.Add(new DrawingValues(singelResource.NameId, DrawingValues.ContentType.RowHead)); foreach (BookableUnit contentUnit in Data.DbServer3.AEAG.BookableUnits .Where(sel => sel.Ressource == singelResource) .OrderBy(ord => ord.TimeTableEntry.DisplayInColumnOrder)) { BookingEntry ExistingBooking = Data.DbServer3.AEAG.BookingEntries .Find_By_BookableUnitsIDAndBookingFor(contentUnit.Id, DatesToRunFor[DateName]); String BookingStatus = String.Empty; if (ExistingBooking != null) BookingStatus = ExistingBooking.BookingStatus; ContentRow.Add(new DrawingValues(BookingStatus, DrawingValues.ContentType.Content)); } } DrawThePicture(ressource.DisplayOn, DateName, Standards, DrawingsGrid); } } }
void CalculateDrawingDetails(List<List<DrawingValues>> DrawingsGrid, DrawingStandards Standards, String PictureName) { Standards.UsedFrame = GetDrawingFrame(PictureName); Standards.TargetWidth = ((double)Standards.FullWidth * ((double)Standards.UsedFrame.PositionRight - (double)Standards.UsedFrame.PositionLeft)) / 100; double FullTargetHeight = ((double)Standards.FullHeight * ((double)Standards.UsedFrame.PositionBottom - (double)Standards.UsedFrame.PositionTop)) / 100; int NumberOfLines = DrawingsGrid.Count(); if (PictureName.Contains("Sport")) { Standards.HeightUnit = FullTargetHeight / ((double)6 + 0.2); Standards.TargetHeight = Standards.HeightUnit*(NumberOfLines + 0.2); } else { Standards.HeightUnit = FullTargetHeight / ((double)11 + 0.2); Standards.TargetHeight = Standards.HeightUnit * (NumberOfLines + 0.2); } Standards.HeightUnit = Standards.TargetHeight/((double) NumberOfLines + 0.2); int NumberOfColumns = DrawingsGrid.Last().Count(); Standards.WidthUnit = Standards.TargetWidth / ((double)NumberOfColumns + 4); Standards.RowStartings = new List<double>(); Standards.ColumnStartings = new List<double>(); double MarginXValue = 4; double MarginYValue = 4; int RunningIndex = 0; foreach (List<DrawingValues> drawingValueses in DrawingsGrid) { if (RunningIndex == 0) { Standards.RowStartings.Add(0); } else if (RunningIndex == 2) { Standards.RowStartings.Add(Standards.RowStartings.Last() + (Standards.HeightUnit * 1.2)); } else Standards.RowStartings.Add(Standards.RowStartings.Last( ) + Standards.HeightUnit); if (RunningIndex > 0) { SetTop(drawingValueses, Standards.RowStartings.Last(), MarginYValue); if (RunningIndex == 1) SetBottom(drawingValueses, Standards.RowStartings.Last() + (Standards.HeightUnit*1.2), MarginYValue); else SetBottom(drawingValueses, Standards.RowStartings.Last() + Standards.HeightUnit, MarginYValue); } RunningIndex++; } RunningIndex = 0; foreach (DrawingValues drawingValues in DrawingsGrid.Last()) { if (RunningIndex == 0) { Standards.ColumnStartings.Add(0); SetLeft(GetColumnDrawingValues(DrawingsGrid, RunningIndex), 0, MarginXValue); SetRight(GetColumnDrawingValues(DrawingsGrid, RunningIndex), (Standards.WidthUnit * 5), MarginXValue); RunningIndex++; continue; } if (RunningIndex == 1) { Standards.ColumnStartings.Add(Standards.ColumnStartings[0] + (Standards.WidthUnit * 5)); SetLeft(GetColumnDrawingValues(DrawingsGrid, RunningIndex), Standards.ColumnStartings.Last(), MarginXValue); SetRight(GetColumnDrawingValues(DrawingsGrid, RunningIndex), Standards.ColumnStartings.Last() + (Standards.WidthUnit), MarginXValue); RunningIndex++; continue; } Standards.ColumnStartings.Add(Standards.ColumnStartings[RunningIndex - 1] + Standards.WidthUnit); SetLeft(GetColumnDrawingValues(DrawingsGrid, RunningIndex), Standards.ColumnStartings.Last(), MarginXValue); SetRight(GetColumnDrawingValues(DrawingsGrid, RunningIndex), Standards.ColumnStartings.Last() + (Standards.WidthUnit), MarginXValue); RunningIndex++; } DrawingsGrid[0][0].OuterTop = 0; DrawingsGrid[0][0].OuterLeft = 0; DrawingsGrid[0][0].OuterBottom = Standards.HeightUnit; DrawingsGrid[0][0].OuterRight = Standards.TargetWidth; DrawingsGrid[0][0].MarginTop = DrawingsGrid[0][0].OuterTop + MarginYValue; DrawingsGrid[0][0].MarginLeft = DrawingsGrid[0][0].OuterLeft + MarginXValue; DrawingsGrid[0][0].MarginBottom = DrawingsGrid[0][0].OuterBottom - MarginYValue; DrawingsGrid[0][0].MarginRight = DrawingsGrid[0][0].OuterRight - MarginXValue; }
void CalculateDrawingFontSizes(List<List<DrawingValues>> DrawingsGrid, DrawingStandards Standards, String PictureName) { foreach (List<DrawingValues> drawingValueses in DrawingsGrid) { foreach (DrawingValues drawingValues in drawingValueses) { FormattedText formattedText = FormatText(drawingValues.Text, drawingValues.DrawingRect, -1); if (!Standards.FontSizes.Keys.Contains(drawingValues.Type)) { Standards.FontSizes[drawingValues.Type] = double.MaxValue; } if (formattedText.Height < Standards.FontSizes[drawingValues.Type]) Standards.FontSizes[drawingValues.Type] = formattedText.Height; } } }
private void DrawThePicture(String PictureName, String DateName, DrawingStandards Standards, List<List<DrawingValues>> DrawingsGrid) { double _rowNumber = 0; double _columnNumber = 0; int NumberOfContentRows = 0; int SummOfHeightOfContentRows = 0; int NumberOfContentColumns = 0; int SummOfWidthOfContentColumns = 0; CalculateDrawingDetails(DrawingsGrid, Standards, PictureName); CalculateDrawingFontSizes(DrawingsGrid, Standards, PictureName); ShowDebugPictureContent(PictureName, DrawingsGrid); DrawingVisual DrawingBoard = new DrawingVisual(); DrawingContext BoardContext = DrawingBoard.RenderOpen(); BoardContext.DrawRectangle(Brushes.AliceBlue, new Pen(Brushes.Black, 10), new Rect (new Size(Standards.TargetWidth, Standards.TargetHeight))); foreach (double rowStarting in Standards.RowStartings) { BoardContext.DrawLine(new Pen(Brushes.DarkGray,4), new Point ( 0, rowStarting), new Point ( Standards.TargetWidth, rowStarting)); } foreach (double columnStartings in Standards.ColumnStartings) { BoardContext.DrawLine(new Pen(Brushes.DarkGray, 4), new Point(columnStartings, Standards.RowStartings[1]), new Point(columnStartings, Standards.TargetHeight)); } foreach (List<DrawingValues> drawingValueses in DrawingsGrid) { foreach (DrawingValues drawingValues in drawingValueses) { if (drawingValues.Text == "W") { BoardContext.DrawRectangle(Brushes.DarkGray, null, drawingValues.DrawingRect); //BoardContext.DrawText(FormatText(drawingValues.Text, // drawingValues.DrawingRect, drawingValues.Type), drawingValues.DrawingRect.TopLeft); } else if (drawingValues.Text == "R") { BoardContext.DrawRectangle(Brushes.DarkGray, null, drawingValues.DrawingRect); //BoardContext.DrawText(FormatText(drawingValues.Text, // drawingValues.DrawingRect, drawingValues.Type), drawingValues.DrawingRect.TopLeft); } else if (drawingValues.Text == "B") { BoardContext.DrawRectangle(Brushes.Crimson, null, drawingValues.DrawingRect); //BoardContext.DrawText(FormatText(drawingValues.Text, // drawingValues.DrawingRect, drawingValues.Type), drawingValues.DrawingRect.TopLeft); } else if (String.IsNullOrEmpty(drawingValues.Text)) { BoardContext.DrawRectangle(Brushes.ForestGreen, null, drawingValues.DrawingRect); //BoardContext.DrawText(FormatText(drawingValues.Text, // drawingValues.DrawingRect, drawingValues.Type), drawingValues.DrawingRect.TopLeft); } else { BoardContext.DrawRectangle(Brushes.WhiteSmoke, null, drawingValues.DrawingRect); FormattedText formattedText = FormatText(drawingValues.Text, drawingValues.DrawingRect, Standards.FontSizes[ drawingValues.Type]); Point StartingPoint = drawingValues.DrawingRect.TopLeft; if (formattedText.Height < drawingValues.DrawingRect.Height) StartingPoint.Y += (drawingValues.DrawingRect.Height - formattedText.Height)/2; BoardContext.DrawText(formattedText, StartingPoint); } } } //foreach (List<DrawingValues> drawingValueses in DrawingsGrid) // { // foreach (DrawingValues drawingValues in drawingValueses) // { // BoardContext.DrawText(Brushes.Red, null, drawingValues.DrawingRect); // } // } BoardContext.Close(); // by sac RenderTargetBitmap DrawingBitmap = new RenderTargetBitmap ((int)Standards.TargetWidth, (int)Standards.TargetHeight, 96, 96, PixelFormats.Pbgra32); DrawingBitmap.Render(DrawingBoard); FileInfo OutputFile = null; if (PictureName.Contains("Sport")) OutputFile = new FileInfo(VisualBasics.GetSportCacheFileName(PictureName + "_" + DateName + ".jpg")); else OutputFile = new FileInfo(VisualBasics.GetWellnessCacheFileName(PictureName + "_" + DateName + ".jpg")); byte[] NewContent = ((BitmapSource) BitmapFrame.Create(DrawingBitmap)).ConvertTo_JpgByteArray(); // SaveAs_JpgFile(OutputFile); if (OutputFile.Exists) { String NewHashCode = NewContent.Sha1Hash().ConvertTo_Hex(); String OldHashCode = OutputFile.LoadAs_ByteArray().Sha1Hash().ConvertTo_Hex(); if (OldHashCode == NewHashCode) return; } NewContent.SaveTo_File(OutputFile); }