예제 #1
0
        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());
        }