static ExitCode ProceedBoxPacker(ParsingTarget cliArgs) { FileInfo requestFileInfo = new FileInfo(cliArgs.requestPath); if (!requestFileInfo.Exists) { throw new FileNotFoundException($"File not found: {requestFileInfo.FullName}", requestFileInfo.FullName); } BoxPackerRequest request; using (StreamReader file = File.OpenText(requestFileInfo.FullName)) { JsonSerializer serializer = new JsonSerializer(); request = (BoxPackerRequest)serializer.Deserialize(file, typeof(BoxPackerRequest)); } BoxPackerResult result; using (var strategy = new BoxPackerCloneStrategy()) { strategy.options.MaxBoxesToBalanceWeight = 15; using (var packer = new SharpPacker.Base.BoxPacker(strategy)) { result = packer.Pack(request); } } using (StreamWriter file = File.CreateText(cliArgs.resultPath)) { JsonSerializer serializer = new JsonSerializer() { Formatting = Formatting.Indented }; serializer.Serialize(file, result); } return(ExitCode.DONE); }
public void TestIssue38() { var boxList = new List <BoxType>(); var bundlesList = new List <ItemsBundle>(); boxList.Add(new BoxType("Box1") { OuterDimensions = new Dimensions(2, 2, 2), EmptyWeight = 0, InnerDimensions = new Dimensions(2, 2, 2), MaxWeight = 1000, }); boxList.Add(new BoxType("Box2") { OuterDimensions = new Dimensions(4, 4, 4), EmptyWeight = 0, InnerDimensions = new Dimensions(4, 4, 4), MaxWeight = 1000, }); bundlesList.Add( new ItemsBundle( new Item("Item1") { Dimensions = new Dimensions(1, 1, 1), Weight = 100, AllowedRotations = RotationFlags.AllRotations, }, 4)); bundlesList.Add( new ItemsBundle( new Item("Item5") { Dimensions = new Dimensions(2, 2, 2), Weight = 100, AllowedRotations = RotationFlags.AllRotations, }, 4)); bundlesList.Add( new ItemsBundle( new Item("Item9") { Dimensions = new Dimensions(4, 4, 4), Weight = 100, AllowedRotations = RotationFlags.AllRotations, }, 1)); var request = new BoxPackerRequest { BoxTypes = boxList, Bundles = bundlesList }; var packer = new BoxPackerCloneStrategy(); packer.options.MaxBoxesToBalanceWeight = 12; var result = packer.Pack(request); Assert.Equal(2, result.PackedBoxes.Count()); }