static void Main(string[] args) { // define box properties BoxProperties boxProperties = new BoxProperties(null, 120.0, 100.0, 70.0); // define pallet properties PalletProperties palletProperties = new PalletProperties(null, "Block", 1200, 1000, 150); // define pallet constraintSet CasePalletConstraintSet constraintSet = new CasePalletConstraintSet(); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_X_N, true); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_X_P, true); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Y_N, true); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Y_P, true); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Z_N, true); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Z_P, true); constraintSet.SetAllowedPattern("Column"); constraintSet.SetAllowedPattern("Diagonale"); constraintSet.SetAllowedPattern("Interlocked"); constraintSet.SetAllowedPattern("Trilock"); constraintSet.SetAllowedPattern("Spirale"); constraintSet.AllowAlignedLayers = true; constraintSet.AllowAlternateLayers = true; constraintSet.MaximumHeight = 2000; constraintSet.MaximumNumberOfItems = 2000; constraintSet.UseMaximumHeight = true; constraintSet.UseMaximumPalletWeight = false; constraintSet.UseMaximumWeightOnBox = false; Console.WriteLine("=== Constraint set ==="); Console.WriteLine(constraintSet.ToString()); // define case optim constraintSet ParamSetPackOptim caseOptimConstraintSet = new ParamSetPackOptim( new int[3] { 2, 2, 4 } , 4.0, 0.01 , new Vector3D(30.0, 30.0, 70.0) , new Vector3D(500.0, 500.0, 500.0) , false ); PackOptimizer caseOptimizer = new PackOptimizer(boxProperties, palletProperties, constraintSet, caseOptimConstraintSet); // get all valid case definitions foreach (CaseDefinition caseDefinition in caseOptimizer.CaseDefinitions(48)) { Console.WriteLine(caseDefinition.ToString() + caseDefinition.OuterDimensions(boxProperties, caseOptimConstraintSet)); } // build list of solutions List <CaseOptimSolution> caseOptimSolutions = caseOptimizer.CaseOptimSolutions(48); foreach (CaseOptimSolution caseOptimSolution in caseOptimSolutions) { Console.WriteLine(caseOptimSolution.ToString()); } }
/// <summary> /// Edit specified pallet analysis /// </summary> /// <param name="analysis"></param> public void EditCasePalletAnalysis(CasePalletAnalysis analysis) { // do we need to recompute analysis bool recomputeRequired = false; if (analysis.IsBoxAnalysis) { FormNewAnalysisLegacy form = new FormNewAnalysisLegacy(this, analysis); form.Cases = Cases.ToArray(); form.Pallets = Pallets.ToArray(); form.Interlayers = Interlayers.ToArray(); form.PalletCorners = ListByType(typeof(PalletCornerProperties)).ToArray(); form.PalletCaps = ListByType(typeof(PalletCapProperties)).ToArray(); form.PalletFilms = ListByType(typeof(PalletFilmProperties)).ToArray(); if (recomputeRequired = (DialogResult.OK == form.ShowDialog())) { // analysis name / description analysis.Name = form.AnalysisName; analysis.Description = form.AnalysisDescription; // box / palet / interlayer analysis.BProperties = form.SelectedBox; analysis.PalletProperties = form.SelectedPallet; analysis.InterlayerProperties = form.SelectedInterlayer; analysis.InterlayerPropertiesAntiSlip = form.SelectedInterlayerAntiSlip; // build constraint set CasePalletConstraintSet constraintSet = analysis.ConstraintSet as CasePalletConstraintSet; // overhang / underhang constraintSet.OverhangX = form.OverhangX; constraintSet.OverhangY = form.OverhangY; // allowed axes constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_X_N, form.AllowVerticalX); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_X_P, form.AllowVerticalX); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Y_N, form.AllowVerticalY); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Y_P, form.AllowVerticalY); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Z_N, form.AllowVerticalZ); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Z_P, form.AllowVerticalZ); // allowed dir change constraintSet.AllowTwoLayerOrientations = form.AllowTwoLayerOrientations; constraintSet.AllowLastLayerOrientationChange = form.AllowLastLayerOrientationChange; // allowed patterns constraintSet.ClearAllowedPatterns(); foreach (string s in form.AllowedPatterns) { constraintSet.SetAllowedPattern(s); } // allow alternate layer constraintSet.AllowAlternateLayers = form.AllowAlternateLayers; constraintSet.AllowAlignedLayers = form.AllowAlignedLayers; // interlayers constraintSet.HasInterlayer = form.HasInterlayers; constraintSet.InterlayerPeriod = form.InterlayerPeriod; constraintSet.HasInterlayerAntiSlip = form.HasInterlayerAntiSlip; // pallet corner analysis.PalletCornerProperties = form.SelectedPalletCorners; // pallet cap analysis.PalletCapProperties = form.SelectedPalletCap; // pallet film analysis.PalletFilmProperties = form.SelectedPalletFilm; // stop criterion constraintSet.UseMaximumHeight = form.UseMaximumPalletHeight; constraintSet.UseMaximumNumberOfCases = form.UseMaximumNumberOfBoxes; constraintSet.UseMaximumPalletWeight = form.UseMaximumPalletWeight; constraintSet.UseMaximumWeightOnBox = form.UseMaximumLoadOnBox; constraintSet.MaximumHeight = form.MaximumPalletHeight; constraintSet.MaximumNumberOfItems = form.MaximumNumberOfBoxes; constraintSet.MaximumPalletWeight = form.MaximumPalletWeight; constraintSet.MaximumWeightOnBox = form.MaximumLoadOnBox; // number of solution kept constraintSet.UseNumberOfSolutionsKept = Properties.Settings.Default.KeepBestSolutions; if (constraintSet.UseNumberOfSolutionsKept) { constraintSet.NumberOfSolutionsKept = Properties.Settings.Default.NoSolutionsToKeep; } // pallet film turns constraintSet.PalletFilmTurns = form.PalletFilmTurns; } } else if (analysis.IsBundleAnalysis) { FormNewAnalysisBundle form = new FormNewAnalysisBundle(this, analysis); form.Boxes = Bundles.ToArray(); form.Pallets = Pallets.ToArray(); if (recomputeRequired = (DialogResult.OK == form.ShowDialog())) { // analysis name / description analysis.Name = form.ItemName; analysis.Description = form.ItemDescription; // analysis bundle / pallet analysis.BProperties = form.SelectedBundle; analysis.PalletProperties = form.SelectedPallet; // build constraintSet BundlePalletConstraintSet constraintSet = analysis.ConstraintSet as BundlePalletConstraintSet; // overhang / underhang constraintSet.OverhangX = form.OverhangX; constraintSet.OverhangY = form.OverhangY; // allowed patterns constraintSet.ClearAllowedPatterns(); foreach (string s in form.AllowedPatterns) { constraintSet.SetAllowedPattern(s); } // allow aligned / alternate layer constraintSet.AllowAlternateLayers = form.AllowAlternateLayers; constraintSet.AllowAlignedLayers = form.AllowAlignedLayers; // stop criterions constraintSet.UseMaximumHeight = form.UseMaximumPalletHeight; constraintSet.UseMaximumNumberOfCases = form.UseMaximumNumberOfBoxes; constraintSet.UseMaximumPalletWeight = form.UseMaximumPalletWeight; constraintSet.MaximumHeight = form.MaximumPalletHeight; constraintSet.MaximumNumberOfItems = form.MaximumNumberOfBoxes; constraintSet.MaximumPalletWeight = form.MaximumPalletWeight; } } if (recomputeRequired) { analysis.OnEndUpdate(null); } }
/// <summary> /// Creates a new palet analysis /// </summary> /// <returns>created palet analysis</returns> public CasePalletAnalysis CreateNewCasePalletAnalysisUI() { if (!CanCreateCasePalletAnalysis) { return(null); } FormNewAnalysis form = new FormNewAnalysis(this); form.Cases = Cases.ToArray(); form.Pallets = Pallets.ToArray(); form.Interlayers = Interlayers.ToArray(); form.PalletCorners = ListByType(typeof(PalletCornerProperties)).ToArray(); form.PalletCaps = ListByType(typeof(PalletCapProperties)).ToArray(); form.PalletFilms = ListByType(typeof(PalletFilmProperties)).ToArray(); if (DialogResult.OK == form.ShowDialog()) { // build constraint set CasePalletConstraintSet constraintSet = new CasePalletConstraintSet(); // overhang / underhang constraintSet.OverhangX = form.OverhangX; constraintSet.OverhangY = form.OverhangY; // allowed axes constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_X_N, form.AllowVerticalX); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_X_P, form.AllowVerticalX); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Y_N, form.AllowVerticalY); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Y_P, form.AllowVerticalY); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Z_N, form.AllowVerticalZ); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Z_P, form.AllowVerticalZ); // allowed patterns constraintSet.ClearAllowedPatterns(); foreach (string s in form.AllowedPatterns) { constraintSet.SetAllowedPattern(s); } // allow alternate layer constraintSet.AllowAlternateLayers = form.AllowAlternateLayers; constraintSet.AllowAlignedLayers = form.AllowAlignedLayers; // interlayers constraintSet.HasInterlayer = form.HasInterlayers; constraintSet.InterlayerPeriod = form.InterlayerPeriod; constraintSet.HasInterlayerAntiSlip = form.HasInterlayerAntiSlip; // stop criterion constraintSet.UseMaximumHeight = form.UseMaximumPalletHeight; constraintSet.UseMaximumNumberOfCases = form.UseMaximumNumberOfBoxes; constraintSet.UseMaximumPalletWeight = form.UseMaximumPalletWeight; constraintSet.UseMaximumWeightOnBox = form.UseMaximumLoadOnBox; constraintSet.MaximumHeight = form.MaximumPalletHeight; constraintSet.MaximumNumberOfItems = form.MaximumNumberOfBoxes; constraintSet.MaximumPalletWeight = form.MaximumPalletWeight; constraintSet.MaximumWeightOnBox = form.MaximumLoadOnBox; // number of solution kept constraintSet.UseNumberOfSolutionsKept = Properties.Settings.Default.KeepBestSolutions; if (constraintSet.UseNumberOfSolutionsKept) { constraintSet.NumberOfSolutionsKept = Properties.Settings.Default.NoSolutionsToKeep; } // number of pallet film turns constraintSet.PalletFilmTurns = form.PalletFilmTurns; return(CreateNewCasePalletAnalysis( form.AnalysisName, form.AnalysisDescription, form.SelectedBox, form.SelectedPallet, form.SelectedInterlayer, form.SelectedInterlayerAntiSlip, form.SelectedPalletCorners, form.SelectedPalletCap, form.SelectedPalletFilm, constraintSet, new CasePalletSolver())); } return(null); }
public bool onFileNew(ref string fileName) { // INTEX data are in cms UnitsManager.CurrentUnitSystem = UnitsManager.UnitSystem.UNIT_METRIC2; string dbPath = Properties.Settings.Default.DatabasePathINTEX; if (string.IsNullOrWhiteSpace(dbPath) || !File.Exists(dbPath)) { OpenFileDialog fd = new OpenFileDialog(); fd.DefaultExt = "xls"; fd.AddExtension = false; fd.Filter = "Microsoft Excel File (*.xls)|*.xls|All files (*.*)|*.*"; fd.FilterIndex = 0; fd.RestoreDirectory = true; fd.CheckFileExists = true; if (DialogResult.OK != fd.ShowDialog()) { return(false); } dbPath = fd.FileName; Properties.Settings.Default.DatabasePathINTEX = dbPath; Properties.Settings.Default.Save(); } // load INTEX excel file List <DataItemINTEX> listItems = null; List <DataPalletINTEX> listPallets = null; List <DataCaseINTEX> listCases = null; try { // Set cursor as hourglass Cursor.Current = Cursors.WaitCursor; // load excel file if (!ExcelDataReader.ExcelDataReader.LoadIntexFile(dbPath, ref listItems, ref listPallets, ref listCases)) { Cursor.Current = Cursors.Default; string message = string.Empty; if (null == listItems || listItems.Count < 1) { message = string.Format(Properties.Resources.ID_ERROR_NOITEMFOUND, "article", "Articles"); } else if (null == listPallets || listPallets.Count < 1) { message = string.Format(Properties.Resources.ID_ERROR_NOITEMFOUND, "palette", "Palettes"); } else { message = string.Format(Properties.Resources.ID_ERROR_INVALIDFILE, dbPath); } if (!string.IsNullOrEmpty(message)) { MessageBox.Show(message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); } return(false); } } catch (Exception ex) { MessageBox.Show( ex.Message , Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); _log.Error(ex.Message); } finally { Cursor.Current = Cursors.Default; } // do we have a valid list if (null == listItems || 0 == listItems.Count) { return(false); } // proceed : buid project file try { FormNewINTEX form = new FormNewINTEX(); form._listItems = listItems; form._listPallets = listPallets; form._listCases = listCases; if (DialogResult.OK != form.ShowDialog()) { return(false); } // create document DataItemINTEX item = form._currentItem; Document document = new Document(item._ref, item._description, "INTEX", DateTime.Now, null); // create box properties Color[] colorsCase = new Color[6]; for (int i = 0; i < 6; ++i) { colorsCase[i] = Color.Chocolate; } BoxProperties itemProperties = null; if (!form.UseIntermediatePacking) { itemProperties = document.CreateNewCase( item._ref , string.Format("{0};EAN14 : {1};UPC : {2};PCB : {3}", item._description, item._gencode, item._UPC, item._PCB) , UnitsManager.ConvertLengthFrom(item._length, UnitsManager.UnitSystem.UNIT_METRIC2) , UnitsManager.ConvertLengthFrom(item._width, UnitsManager.UnitSystem.UNIT_METRIC2) , UnitsManager.ConvertLengthFrom(item._height, UnitsManager.UnitSystem.UNIT_METRIC2) , UnitsManager.ConvertLengthFrom(item._length - 0.6, UnitsManager.UnitSystem.UNIT_METRIC2) , UnitsManager.ConvertLengthFrom(item._width - 0.6, UnitsManager.UnitSystem.UNIT_METRIC2) , UnitsManager.ConvertLengthFrom(item._height - 0.6, UnitsManager.UnitSystem.UNIT_METRIC2) , UnitsManager.ConvertMassFrom(item._weight, UnitsManager.UnitSystem.UNIT_METRIC2) , colorsCase); } else { itemProperties = document.CreateNewBox( item._ref , string.Format("{0};EAN14 : {1};UPC : {2};PCB : {3}", item._description, item._gencode, item._UPC, item._PCB) , UnitsManager.ConvertLengthFrom(item._length, UnitsManager.UnitSystem.UNIT_METRIC2) , UnitsManager.ConvertLengthFrom(item._width, UnitsManager.UnitSystem.UNIT_METRIC2) , UnitsManager.ConvertLengthFrom(item._height, UnitsManager.UnitSystem.UNIT_METRIC2) , UnitsManager.ConvertMassFrom(item._weight, UnitsManager.UnitSystem.UNIT_METRIC2) , colorsCase); } itemProperties.ShowTape = true; itemProperties.TapeColor = Color.Beige; itemProperties.TapeWidth = 5.0; InsertPictogram(ref itemProperties); BoxProperties currentCase = null; if (form.UseIntermediatePacking) { // create cases foreach (DataCaseINTEX dataCase in listCases) { double lengthInt = dataCase._lengthInt > 0 ? dataCase._lengthInt : dataCase._lengthExt - 2 * form.DefaultCaseThickness; double widthInt = dataCase._widthInt > 0 ? dataCase._widthInt : dataCase._widthExt - 2 * form.DefaultCaseThickness; double heightInt = dataCase._heightInt > 0 ? dataCase._heightInt : dataCase._heightExt - 2 * form.DefaultCaseThickness; BoxProperties intercaseProperties = document.CreateNewCase( dataCase._ref , string.Format("{0:0.0}*{1:0.0}*{2:0.0}", dataCase._lengthExt, dataCase._widthExt, dataCase._heightExt) , UnitsManager.ConvertLengthFrom(dataCase._lengthExt, UnitsManager.UnitSystem.UNIT_METRIC2) , UnitsManager.ConvertLengthFrom(dataCase._widthExt, UnitsManager.UnitSystem.UNIT_METRIC2) , UnitsManager.ConvertLengthFrom(dataCase._heightExt, UnitsManager.UnitSystem.UNIT_METRIC2) , UnitsManager.ConvertLengthFrom(lengthInt, UnitsManager.UnitSystem.UNIT_METRIC2) , UnitsManager.ConvertLengthFrom(widthInt, UnitsManager.UnitSystem.UNIT_METRIC2) , UnitsManager.ConvertLengthFrom(heightInt, UnitsManager.UnitSystem.UNIT_METRIC2) , UnitsManager.ConvertMassFrom(dataCase._weight, UnitsManager.UnitSystem.UNIT_METRIC2) , colorsCase); intercaseProperties.ShowTape = true; intercaseProperties.TapeColor = Color.Beige; intercaseProperties.TapeWidth = 5.0; if (string.Equals(form._currentCase._ref, intercaseProperties.Name)) { currentCase = intercaseProperties; } } } if (form.UseIntermediatePacking) { // Case constraint set BoxCaseConstraintSet boxCaseConstraintSet = new BoxCaseConstraintSet(); boxCaseConstraintSet.SetAllowedOrthoAxisAll(); if (boxCaseConstraintSet.IsValid) { // create case analysis BoxCaseAnalysis analysis = document.CreateNewBoxCaseAnalysis( string.Format(Properties.Resources.ID_PACKING, item._ref) , item._description , itemProperties , currentCase , boxCaseConstraintSet , new BoxCaseSolver()); } } // create pallets PalletProperties currentPallet = null; foreach (DataPalletINTEX pallet in listPallets) { PalletProperties palletProperties = document.CreateNewPallet( pallet._type, pallet._type, "EUR" , UnitsManager.ConvertLengthFrom(pallet._length, UnitsManager.UnitSystem.UNIT_METRIC2) , UnitsManager.ConvertLengthFrom(pallet._width, UnitsManager.UnitSystem.UNIT_METRIC2) , UnitsManager.ConvertLengthFrom(pallet._height, UnitsManager.UnitSystem.UNIT_METRIC2) , UnitsManager.ConvertMassFrom(pallet._weight, UnitsManager.UnitSystem.UNIT_METRIC2)); if (string.Equals(form._currentPallet._type, pallet._type)) { currentPallet = palletProperties; } } // *** pallet analysis *** // constraint set CasePalletConstraintSet constraintSet = new CasePalletConstraintSet(); constraintSet.UseMaximumHeight = true; constraintSet.MaximumHeight = UnitsManager.ConvertLengthFrom(form.PalletHeight, UnitsManager.UnitSystem.UNIT_METRIC2); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Z_P, true); constraintSet.AllowAlignedLayers = true; constraintSet.AllowAlternateLayers = true; constraintSet.SetAllowedPattern("Column"); constraintSet.SetAllowedPattern("Diagonale"); constraintSet.SetAllowedPattern("Interlocked"); constraintSet.SetAllowedPattern("Trilock"); constraintSet.SetAllowedPattern("Spirale"); constraintSet.SetAllowedPattern("Enlarged spirale"); if (constraintSet.IsValid) { // create analysis CasePalletSolver solver = new CasePalletSolver(); CasePalletAnalysis palletAnalysis = document.CreateNewCasePalletAnalysis( item._ref, item.ToString() , form.UseIntermediatePacking ? currentCase : itemProperties , currentPallet, null, null, null, null, null, constraintSet, solver); } // save document fileName = form.FilePath; document.Write(form.FilePath); // return true to let application open return(File.Exists(fileName)); } catch (Exception ex) { MessageBox.Show(ex.Message); return(false); } }
private static void RunBoxTest(bool useSingleColor, Document doc, PalletProperties palletProperties) { // define box properties var boxProperties = new BoxProperties(doc, 162, 210, 250); //boxProperties.Name = "Box1"; boxProperties.SetWeight(3.0); if (!useSingleColor) { boxProperties.SetColor(HalfAxis.HAxis.AXIS_X_N, Color.Red); boxProperties.SetColor(HalfAxis.HAxis.AXIS_X_P, Color.Red); boxProperties.SetColor(HalfAxis.HAxis.AXIS_Y_N, Color.Green); boxProperties.SetColor(HalfAxis.HAxis.AXIS_Y_P, Color.Green); boxProperties.SetColor(HalfAxis.HAxis.AXIS_Z_N, Color.Blue); boxProperties.SetColor(HalfAxis.HAxis.AXIS_Z_P, Color.Blue); } else { boxProperties.SetColor(Color.Chocolate); } Console.WriteLine(boxProperties.ToString()); InterlayerProperties interlayerProperties = null; // define constraints var constraintSet = new CasePalletConstraintSet(); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_X_N, true); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_X_P, true); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Y_N, true); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Y_P, true); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Z_N, true); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Z_P, true); constraintSet.SetAllowedPattern("Trilock"); constraintSet.AllowAlignedLayers = true; constraintSet.AllowAlternateLayers = false; constraintSet.MaximumPalletWeight = 2000; constraintSet.MaximumNumberOfItems = 2000; constraintSet.MaximumHeight = 2000.0; constraintSet.UseMaximumHeight = true; constraintSet.UseMaximumPalletWeight = true; constraintSet.UseMaximumWeightOnBox = false; constraintSet.AllowLastLayerOrientationChange = true; Console.WriteLine("=== Constraint set ==="); Console.WriteLine(constraintSet.ToString()); // initialize analysis var analysis = new CasePalletAnalysis( boxProperties, palletProperties, interlayerProperties, null, null, null, null, constraintSet); // initialize solver var solver = new CasePalletSolver(); solver.ProcessAnalysis(analysis); Console.WriteLine("=== Solutions ==="); int solIndex = 0; foreach (CasePalletSolution sol in analysis.Solutions) { // instantiate graphics Graphics3DImage graphics = new Graphics3DImage(new Size(1000, 1000)); graphics.CameraPosition = new Vector3D(10000.0, 10000.0, 10000.0); graphics.Target = Vector3D.Zero; graphics.SetViewport(-500.0f, -500.0f, 500.0f, 500.0f); // instantiate solution viewer CasePalletSolutionViewer sv = new CasePalletSolutionViewer(sol); sv.Draw(graphics); graphics.Flush(); // save string fileName = string.Format("Pallet_{0}.bmp", solIndex++); string filePath = Path.Combine(Path.GetTempPath(), fileName); Console.WriteLine("Saving file " + filePath + "..."); graphics.SaveAs(filePath); } }
static int Main(string[] args) { ILog log = LogManager.GetLogger(typeof(Program)); XmlConfigurator.Configure(); try { bool useSingleColor = false; // instantiate document Document doc = new Document("Test", "Test", "fga", DateTime.Now, null); // define pallet properties PalletProperties palletProperties = new PalletProperties(doc, "EUR2", 1200, 1000, 150); Console.WriteLine("=== Pallet properties ==="); Console.WriteLine(palletProperties.ToString()); bool testCylinder = false; if (!testCylinder) { // define box properties BoxProperties boxProperties = new BoxProperties(doc, 162, 210, 250); boxProperties.Name = "Box1"; boxProperties.Weight = 3.0; if (!useSingleColor) { boxProperties.SetColor(HalfAxis.HAxis.AXIS_X_N, Color.Red); boxProperties.SetColor(HalfAxis.HAxis.AXIS_X_P, Color.Red); boxProperties.SetColor(HalfAxis.HAxis.AXIS_Y_N, Color.Green); boxProperties.SetColor(HalfAxis.HAxis.AXIS_Y_P, Color.Green); boxProperties.SetColor(HalfAxis.HAxis.AXIS_Z_N, Color.Blue); boxProperties.SetColor(HalfAxis.HAxis.AXIS_Z_P, Color.Blue); } else { boxProperties.SetColor(Color.Chocolate); } Console.WriteLine(boxProperties.ToString()); InterlayerProperties interlayerProperties = null; // define constraints CasePalletConstraintSet constraintSet = new CasePalletConstraintSet(); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_X_N, true); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_X_P, true); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Y_N, true); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Y_P, true); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Z_N, true); constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Z_P, true); constraintSet.SetAllowedPattern("Trilock"); constraintSet.AllowAlignedLayers = true; constraintSet.AllowAlternateLayers = false; constraintSet.MaximumPalletWeight = 2000; constraintSet.MaximumNumberOfItems = 2000; constraintSet.MaximumHeight = 2000.0; constraintSet.UseMaximumHeight = true; constraintSet.UseMaximumPalletWeight = true; constraintSet.UseMaximumWeightOnBox = false; constraintSet.AllowLastLayerOrientationChange = true; Console.WriteLine("=== Constraint set ==="); Console.WriteLine(constraintSet.ToString()); // initialize analysis CasePalletAnalysis analysis = new CasePalletAnalysis( boxProperties, palletProperties, interlayerProperties, null, null, null, null, constraintSet); // initialize solver CasePalletSolver solver = new CasePalletSolver(); solver.ProcessAnalysis(analysis); Console.WriteLine("=== Solutions ==="); int solIndex = 0; foreach (CasePalletSolution sol in analysis.Solutions) { // instantiate graphics Graphics3DImage graphics = new Graphics3DImage(new Size(1000, 1000)); graphics.CameraPosition = new Vector3D(10000.0, 10000.0, 10000.0); graphics.Target = Vector3D.Zero; graphics.SetViewport(-500.0f, -500.0f, 500.0f, 500.0f); // instantiate solution viewer CasePalletSolutionViewer sv = new CasePalletSolutionViewer(sol); sv.Draw(graphics); graphics.Flush(); // save string fileName = string.Format("Pallet_{0}.bmp", solIndex++); string filePath = Path.Combine(Path.GetTempPath(), fileName); Console.WriteLine("Saving file " + filePath + "..."); graphics.SaveAs(filePath); } } else { // cylinder Console.WriteLine("=== Cylinder properties ==="); CylinderProperties cylProperties = new CylinderProperties(doc, "Cylinder", "Default cylinder", 90, 45.0, 100, 1.5, Color.Gray, Color.SkyBlue, Color.SkyBlue); Console.WriteLine(cylProperties.ToString()); // constraint set Console.WriteLine("=== Constraint set ==="); CylinderPalletConstraintSet constraintSet = new CylinderPalletConstraintSet(); constraintSet.UseMaximumPalletHeight = true; constraintSet.MaximumPalletHeight = 1200.0; constraintSet.UseMaximumPalletWeight = true; constraintSet.MaximumPalletWeight = 2000; constraintSet.UseMaximumNumberOfItems = true; constraintSet.MaximumNumberOfItems = 2000; Console.WriteLine(constraintSet.ToString()); // cylinder analysis CylinderPalletAnalysis analysis = new CylinderPalletAnalysis(cylProperties, palletProperties, null, null, constraintSet); // initialize solver CylinderSolver solver = new CylinderSolver(); solver.ProcessAnalysis(analysis); Console.WriteLine("=== Solutions ==="); int solIndex = 0; foreach (CylinderPalletSolution sol in analysis.Solutions) { // instantiate graphics Graphics3DImage graphics = new Graphics3DImage(new Size(512, 512)); graphics.CameraPosition = new Vector3D(10000.0, 10000.0, 10000.0); graphics.Target = Vector3D.Zero; graphics.SetViewport(-500.0f, -500.0f, 500.0f, 500.0f); // instantiate solution viewer CylinderPalletSolutionViewer sv = new CylinderPalletSolutionViewer(sol); sv.Draw(graphics); string fileName = string.Format("Pallet_{0}.jpg", solIndex++); string filePath = Path.Combine(Path.GetTempPath(), fileName); Console.WriteLine("Saving file " + filePath + "..."); graphics.SaveAs(filePath); } } } catch (Exception ex) { log.Error(ex.ToString()); } return(0); }