public TestBookDetailViewModel(Book book)
 {
     Id = book.Id;
     CustomerId = book.CustomerId;
     TemplateId = book.TemplateId;
     PersonalMessage = book.PersonalMessage;
     Character = book.Character;
     Pages = book.Pages;
 }
Пример #2
0
        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;
        }