public static void GetLayers(Vector3D caseDim, double caseWeight, int palletIndex, double palletWeight, int layerNumber, bool bestLayersOnly, ref List <LayerDetails> listLayers) { // case var boxProperties = new BoxProperties(null, caseDim.X, caseDim.Y, caseDim.Z) { TapeColor = Color.Tan, TapeWidth = new OptDouble(true, 50.0) }; boxProperties.SetWeight(caseWeight); boxProperties.SetAllColors(Enumerable.Repeat(Color.Beige, 6).ToArray()); // pallet Vector3D palletDim = PalletIndexToDim3D(palletIndex); var palletProperties = new PalletProperties(null, PalletIndexToPalletType(palletIndex), palletDim.X, palletDim.Y, palletDim.Z) { Weight = palletWeight, Color = Color.Yellow }; // ### define a constraintset object var constraintSet = new ConstraintSetCasePallet() { OptMaxNumber = new OptInt(false, 0), OptMaxWeight = new OptDouble(true, 1000.0), Overhang = Vector2D.Zero, }; constraintSet.SetAllowedOrientations(new bool[] { false, false, true }); constraintSet.OptMaxLayerNumber = layerNumber; Vector3D vPalletDim = palletProperties.GetStackingDimensions(constraintSet); // ### // get a list of all possible layers and fill ListView control ILayerSolver solver = new LayerSolver(); var layers = solver.BuildLayers(boxProperties.OuterDimensions, new Vector2D(vPalletDim.X, vPalletDim.Y), 0.0, constraintSet, bestLayersOnly); foreach (var layer in layers) { listLayers.Add( new LayerDetails( layer.Name, layer.LayerDescriptor.ToString(), layer.Count, layer.NoLayers(caseDim.Z), caseDim.X, caseDim.Y, caseDim.Z, palletIndex) ); } }
private void OnBestCombinationClicked(object sender, EventArgs e) { try { Packable packable = cbCases.SelectedType as Packable; PalletProperties palletProperties = cbPallets.SelectedType as PalletProperties; if (null == packable || null == palletProperties) { return; } ConstraintSetAbstract constraintSet = BuildConstraintSet(); // get best combination List <KeyValuePair <LayerDesc, int> > listLayer = new List <KeyValuePair <LayerDesc, int> >(); LayerSolver.GetBestCombination( packable.OuterDimensions, palletProperties.GetStackingDimensions(constraintSet), constraintSet, ref listLayer); // select best layers List <LayerDesc> listLayerDesc = new List <LayerDesc>(); foreach (KeyValuePair <LayerDesc, int> kvp in listLayer) { listLayerDesc.Add(kvp.Key); } uCtrlLayerList.SelectLayers(listLayerDesc); _item = _document.CreateNewAnalysisCasePallet( ItemName, ItemDescription , SelectedPackable, SelectedPallet , new List <InterlayerProperties>() , null, null, null , BuildConstraintSet() , listLayer ); Close(); } catch (Exception ex) { _log.Error(ex.ToString()); } }
public List <AnalysisLayered> BuildAnalyses(bool allowMultipleLayerOrientations) { var analyses = new List <AnalysisLayered>(); var constraintSetCasePallet = ConstraintSet as ConstraintSetCasePallet; if (null == constraintSetCasePallet) { return(analyses); } Vector2D overhang = constraintSetCasePallet.Overhang; if (allowMultipleLayerOrientations) { var listLayerEncap = new List <KeyValuePair <LayerEncap, int> >(); LayerSolver.GetBestCombination( Packable.OuterDimensions, PalletProperties.GetStackingDimensions(ConstraintSet), ConstraintSet, ref listLayerEncap); SolutionLayered.SetSolver(new LayerSolver()); var analysis = new AnalysisCasePallet(Packable, PalletProperties, ConstraintSet); analysis.AddSolution(listLayerEncap); // only add analysis if it has a valid solution if (analysis.Solution.ItemCount > 0) { analyses.Add(analysis); } } else { // build layer list var solver = new LayerSolver(); List <Layer2DBrickImp> layers = solver.BuildLayers( Packable.OuterDimensions , new Vector2D(PalletProperties.Length + 2.0 * overhang.X, PalletProperties.Width + 2.0 * overhang.Y) , PalletProperties.Height , constraintSetCasePallet , true ); SolutionLayered.SetSolver(solver); // loop on layers foreach (Layer2DBrickImp layer in layers) { var layerDescs = new List <LayerDesc> { layer.LayerDescriptor }; var analysis = new AnalysisCasePallet(Packable, PalletProperties, ConstraintSet); analysis.AddSolution(layerDescs); // only add analysis if it has a valid solution if (analysis.Solution.ItemCount > 0) { analyses.Add(analysis); } } } return(analyses); }