private void BuildAnalyses(object status)
        {
            try
            {
                IProgressCallback callback = status as IProgressCallback;
                callback.SetRange(0, CheckedIndices.Count - 1);
                callback.Begin();

                int           expectedCount = uCtrlNumberPerCase.Value.Activated ? uCtrlNumberPerCase.Value.Value : -1;
                PackableBrick packable      = cbBoxes.SelectedType as PackableBrick;

                // build list of analyses
                for (int i = 0; i < CheckedIndices.Count; ++i)
                {
                    try
                    {
                        if (callback.IsAborting)
                        {
                            break;
                        }
                        callback.StepTo(i);
                        callback.SetText(string.Format(Resources.ID_EVALUATINGCASE, i + 1, CheckedIndices.Count));

                        if ((chklbCases.Items[CheckedIndices[i]] as ItemBaseCB).Item is BoxProperties caseProperties)
                        {
                            // build constraint set
                            ConstraintSetBoxCase constraintSet = new ConstraintSetBoxCase(caseProperties);
                            constraintSet.SetAllowedOrientations(uCtrlCaseOrient.AllowedOrientations);
                            if (uCtrlNumberPerCase.Value.Activated)
                            {
                                constraintSet.SetMaxNumber(uCtrlNumberPerCase.Value.Value);
                            }
                            // build solver + get analyses
                            SolverBoxCase solver       = new SolverBoxCase(packable, caseProperties);
                            var           listAnalyses = solver.BuildAnalyses(constraintSet, false);
                            foreach (var analysis in listAnalyses)
                            {
                                if ((-1 == expectedCount) || (expectedCount == analysis.Solution.ItemCount))
                                {
                                    Analyses.Add(analysis);
                                }
                            }
                        }
                    }
                    catch (Exception) {}
                }
                callback.SetText(Resources.ID_SORTINGSOLUTIONS);
                // sort analysis
                Analyses.Sort(new AnalysisComparer());
                callback.End();
            }
            catch (Exception) {}
        }
예제 #2
0
        protected void ComputeSolutions()
        {
            // sanity checks
            if (cbBoxes.Items.Count == 0 || chklbCases.Items.Count == 0)
            {
                return;
            }
            // clear existing analyses
            _analyses.Clear();

            int expectedCount = uCtrlNumberPerCase.Value.Activated ? uCtrlNumberPerCase.Value.Value : -1;

            try
            {
                PackableBrick packable = cbBoxes.SelectedType as PackableBrick;

                // build list of analyses
                for (int i = 0; i < _checkedIndices.Count; ++i)
                {
                    if ((chklbCases.Items[_checkedIndices[i]] as ItemBaseCB).Item is BoxProperties caseProperties)
                    {
                        // build constraint set
                        ConstraintSetBoxCase constraintSet = new ConstraintSetBoxCase(caseProperties);
                        constraintSet.SetAllowedOrientations(uCtrlCaseOrient.AllowedOrientations);
                        if (uCtrlNumberPerCase.Value.Activated)
                        {
                            constraintSet.SetMaxNumber(uCtrlNumberPerCase.Value.Value);
                        }
                        // build solver + get analyses
                        SolverBoxCase solver       = new SolverBoxCase(packable, caseProperties);
                        var           listAnalyses = solver.BuildAnalyses(constraintSet, false);
                        foreach (var analysis in listAnalyses)
                        {
                            if ((-1 == expectedCount) || (expectedCount == analysis.Solution.ItemCount))
                            {
                                _analyses.Add(analysis);
                            }
                        }
                    }
                }
                // sort analysis
                _analyses.Sort(new AnalysisComparer());
                // fill grid
                FillGrid();
            }
            catch (Exception ex)
            {
                _log.Error(ex.Message);
            }
        }