static void Go(string instructionsPath) { var instructionsDir = Path.GetDirectoryName(instructionsPath); var instructions = JObjectX.FromFile(instructionsPath); var directions = new Directions(((JArray)instructions["Images"]).ToObject <List <JObject> >()); var imagesToPrint = directions.ExtractImages(new ImageDetails(instructionsDir)); var pageNumber = 1; var pages = new List <Page> { new Page(1) }; imagesToPrint.ForEach(x => Enumerable.Range(0, x.Count).ForEach(_ => { if (!pages.Last().CanAdd(x)) { pages.Add(new Page(++pageNumber)); } pages.Last().Add(x); })); pages.ForEach(x => x.Create(PathX.Build(instructionsDir, instructions.GetPropertyValue("SavePath")), instructions.GetPropertyValue("SaveName"))); imagesToPrint.ForEach(x => x.Dispose()); }
static void Go(string instructionsPath) { var instructionsDir = Path.GetDirectoryName(instructionsPath); var instructions = JObjectX.FromFile(instructionsPath); var savePath = instructions.GetPropertyValue("SavePath"); var decks = ((JArray)instructions["Decks"]).ToObject <List <JObject> >(); decks.ForEach(deck => { var cards = new DirectoryInfo(PathX.Build(instructionsDir, deck.GetPropertyValue("Path"))).GetFiles("*.png").ToList(); var sampleCard = Image.FromFile(cards[0].FullName); var width = sampleCard.Width; var height = sampleCard.Height; sampleCard.Dispose(); var deckSheets = new List <List <FileInfo> >(); for (int i = 0; i < cards.Count; i += 70) { deckSheets.Add(cards.GetRange(i, Math.Min(70, cards.Count - i))); } for (var deckIndex = 0; deckIndex < deckSheets.Count; deckIndex++) { var deckSheet = deckSheets[deckIndex]; var bitmap = new Bitmap(width * 10, height * 7); bitmap.WithGraphics(g => { for (var cardIndex = 0; cardIndex < deckSheet.Count; cardIndex++) { using (var cardImage = Image.FromFile(deckSheet[cardIndex].FullName)) g.DrawImage(cardImage, new Point(cardIndex % 10 * width, (int)Math.Floor((decimal)cardIndex / 10) * height)); } g.Flush(); var result = deck.ContainsKey("Scale") ? ResizeImage(bitmap, (int)(bitmap.Width * (decimal)deck["Scale"]), (int)(bitmap.Height * (decimal)deck["Scale"])) : bitmap; result.Save(PathX.Build(instructionsDir, savePath, deck.GetPropertyValue("Name") + deckIndex + ".png"), ImageFormat.Png); }); } SaveCardBack(width, height, instructionsDir, deck, savePath); }); }
private static void Go(string instructionsPath) { var instructionsDir = Path.GetDirectoryName(instructionsPath); var instructions = JObjectX.FromFile(instructionsPath); var propertyInstructions = ((JArray)instructions["Properties"]).Select(x => new PropertyInstruction((JObject)x)).ToList(); var itemProcessor = new JObjectBuilder(propertyInstructions); var spreadsheetID = instructions.GetPropertyValue("SpreadSheetID"); var range = instructions.GetPropertyValue("Range"); var unprocessedItems = GetDataFromGoogleSheets(spreadsheetID, range); var items = unprocessedItems.Select(x => itemProcessor.Build(x)).ToList(); if (instructions.ContainsKey("Sort")) { items.Sort((a, b) => a.GetPropertyValue(instructions.GetPropertyValue("Sort")).CompareTo(b.GetPropertyValue(instructions.GetPropertyValue("Sort")))); } var jArray = new JArray(items); dynamic jObject = new JObject(); jObject.Items = jArray; var output = instructions.GetPropertyValue("Output"); File.WriteAllText(PathX.Build(instructionsDir, output), jObject.ToString()); }