示例#1
0
        //Convert Miscellany Container to CromulentBisgetti Container
        private static Container ContainerToCB(Miscellany.ContainerPacking.Entities.Container c)
        {
            decimal   dLength     = Miscellany.Math.Functions.ToDecimal(c.Length);
            decimal   dWidth      = Miscellany.Math.Functions.ToDecimal(c.Width);
            decimal   dHeight     = Miscellany.Math.Functions.ToDecimal(c.Height);
            Container cbContainer = new Container(c.ID, dLength, dWidth, dHeight);

            return(cbContainer);
        }
示例#2
0
        public static Dictionary <string, object> PackContainer(Miscellany.ContainerPacking.Entities.Container container, List <Miscellany.ContainerPacking.Entities.Item> itemsToPack, int algorithm = 1)
        {
            //Create CromulentBisgetti Container
            Container con = ContainerToCB(container);

            //Create CromulentBisgetti Items
            List <Item> items = new List <Item>();

            foreach (Miscellany.ContainerPacking.Entities.Item i in itemsToPack)
            {
                Item cbItem = ItemToCB(i);
                items.Add(cbItem);
            }

            //Create list with single container
            List <Container> containers = new List <Container> {
                con
            };

            //Select algorithm using integer
            List <int> algorithms = new List <int> {
                algorithm
            };

            //Get container packing result
            ContainerPackingResult containerPackingResult = CromulentBisgetti.ContainerPacking.PackingService.Pack(containers, items, algorithms).FirstOrDefault();

            //Get the single algorthim packing result from the container packing result
            AlgorithmPackingResult algorithmPackingResult = containerPackingResult.AlgorithmPackingResults.FirstOrDefault();
            bool   IsCompletePack               = algorithmPackingResult.IsCompletePack;
            int    PackTimeInMilliseconds       = Convert.ToInt32(algorithmPackingResult.PackTimeInMilliseconds); //Max limit of int32 for milliseconds is596 hours
            double PercentContainerVolumePacked = Miscellany.Math.Functions.ToDouble(algorithmPackingResult.PercentContainerVolumePacked);
            double PercentItemVolumePacked      = Miscellany.Math.Functions.ToDouble(algorithmPackingResult.PercentItemVolumePacked);
            //int BestFitOrientation = algorithmPackingResult.best

            //Convert CromulentBisgetti items to Miscellany Items
            //Packed Items
            List <Miscellany.ContainerPacking.Entities.Item> itemsPacked = new List <Miscellany.ContainerPacking.Entities.Item>();

            foreach (Item i in algorithmPackingResult.PackedItems)
            {
                Miscellany.ContainerPacking.Entities.Item mItem = ItemToMiscellany(i);
                itemsPacked.Add(mItem);
            }
            //Unpacked Items
            List <Miscellany.ContainerPacking.Entities.Item> itemsUnpacked = new List <Miscellany.ContainerPacking.Entities.Item>();

            foreach (Item i in algorithmPackingResult.UnpackedItems)
            {
                Miscellany.ContainerPacking.Entities.Item mItem = ItemToMiscellany(i);
                itemsUnpacked.Add(mItem);
            }

            //Return values
            var d = new Dictionary <string, object>();

            d.Add("packedItems", itemsPacked);
            d.Add("unpackedItems", itemsUnpacked);
            d.Add("isCompletePack", IsCompletePack);
            d.Add("packTimeInMilliseconds", PackTimeInMilliseconds);
            d.Add("percentContainerVolumePacked", PercentContainerVolumePacked);
            d.Add("percentItemVolumePacked", PercentItemVolumePacked);
            d.Add("orientation", PercentItemVolumePacked);
            return(d);
        }