//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); }
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); }