public TestBookDetailViewModel(Book book) { Id = book.Id; CustomerId = book.CustomerId; TemplateId = book.TemplateId; PersonalMessage = book.PersonalMessage; Character = book.Character; Pages = book.Pages; }
public static Book BuildBook(BookTemplate bookTemplate, Dictionary<string, string> selectedCharacterOptions, Dictionary<string, string> selectedPageOptions) { Book book = new Book { CustomerId = selectedCharacterOptions["CustomerId"], PersonalMessage = selectedCharacterOptions["PersonalMessage"], TemplateId = bookTemplate.Id }; // Create character book.Character = new Character { Name = selectedCharacterOptions["Name"], Gender = selectedCharacterOptions["Gender"], HairColour = selectedCharacterOptions["HairColour"], SkinColour = selectedCharacterOptions["SkinColour"] }; // Create pages based on template ** Currently assuming there is only one option for each page book.Pages = new List<Page>(); foreach (PageTemplate pageTemplate in bookTemplate.PageTemplates) { // Check to see if this page template is the selected option // ** // TO DO // ** // // >>>> USE pageOptions !!!! <<<< // if (pageTemplate.OptionCondition.Value != null && pageTemplate.OptionCondition.Value != selectedPageOptions[pageTemplate.OptionCondition.Key]) continue; Page page = new Page(); page.Index = pageTemplate.Index; page.TemplateId = pageTemplate.Id; page.TemplateOptionId = pageTemplate.OptionId; // Copy new base image based on base page image string baseImageFile = bookTemplate.TemplateImagesFolder + pageTemplate.BaseImageLayer.File; page.ImageFile = bookTemplate.OutputFolder + book.Id + @"-" + pageTemplate.Id + ".png"; page.ImageFileRelative = @"../Output/" + book.Id + @"-" + pageTemplate.Id + ".png"; File.Copy(baseImageFile, page.ImageFile, true); // Determine which image layers to include depending on specified conditions List<ImageLayer> processedImageLayers = new List<ImageLayer>(); foreach (ImageLayer imageLayer in pageTemplate.ImageLayers) { bool include = true; if (imageLayer.Conditions != null) { foreach (KeyValuePair<string, string> condition in imageLayer.Conditions) { if (selectedCharacterOptions[condition.Key] != condition.Value) { include = false; break; } } } if (include) { processedImageLayers.Add(imageLayer); } } // Word replacement logic for text layers List<TextLayer> processedTextLayers = new List<TextLayer>(); foreach (TextLayer textLayer in pageTemplate.TextLayers) { textLayer.Text = WordReplaceHelper.Replace(book.Character, textLayer.Text); processedTextLayers.Add(textLayer); } // Physically create the layers and add page Image newPageImage = AddLayers(bookTemplate.TemplateImagesFolder, page.ImageFile, processedImageLayers, processedTextLayers, bookTemplate.PageWidth, bookTemplate.PageHeight); newPageImage.Save(page.ImageFile); newPageImage.Save(page.ImageFileRelative.Replace("..", @"C:\git\ImageSandpit\ImageSandpit")); // << + duplicated for website access [**to be reviewed**] book.Pages.Add(page); } return book; }