Ejemplo n.º 1
0
        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());
            }
        }
Ejemplo n.º 3
0
        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);
        }