├── 3D-Bin-Packing ├── Resources │ ├── 3d_icon.png │ └── colorful-artistic-abstract-watercolor-ink-web-header.jpg ├── App.config ├── Properties │ ├── Settings.settings │ ├── Settings.Designer.cs │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ └── Resources.resx ├── Optimization.cs ├── Program.cs ├── Point3D.cs ├── MaxRectsBinPack.cs ├── Box.cs ├── Container.cs ├── 3D-Bin-Packing.csproj ├── Form1.Designer.cs ├── Form1.cs ├── Guillotine3D.cs └── Form1.resx ├── 3D-Bin-Packing.sln ├── README.md ├── .gitattributes ├── .gitignore └── LICENSE /3D-Bin-Packing/Resources/3d_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SahibYar/3D-Bin-Packing/HEAD/3D-Bin-Packing/Resources/3d_icon.png -------------------------------------------------------------------------------- /3D-Bin-Packing/Resources/colorful-artistic-abstract-watercolor-ink-web-header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SahibYar/3D-Bin-Packing/HEAD/3D-Bin-Packing/Resources/colorful-artistic-abstract-watercolor-ink-web-header.jpg -------------------------------------------------------------------------------- /3D-Bin-Packing/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /3D-Bin-Packing/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /3D-Bin-Packing/Optimization.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace _3D_Bin_Packing 4 | { 5 | class Optimization 6 | { 7 | private String id; 8 | private String type; 9 | 10 | public String OptimizationID 11 | { 12 | get { return this.id; } 13 | set { this.id = value; } 14 | } 15 | 16 | public String OptimizationType 17 | { 18 | get { return this.type; } 19 | set { this.type = value; } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /3D-Bin-Packing/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace _3D_Bin_Packing 5 | { 6 | static class Program 7 | { 8 | /// 9 | /// The main entry point for the application. 10 | /// 11 | [STAThread] 12 | static void Main() 13 | { 14 | Application.EnableVisualStyles(); 15 | Application.SetCompatibleTextRenderingDefault(false); 16 | Application.Run(new Form1()); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /3D-Bin-Packing/Point3D.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace _3D_Bin_Packing 8 | { 9 | class Point3D 10 | { 11 | private float x; 12 | private float y; 13 | private float z; 14 | 15 | public float X 16 | { 17 | get { return this.x; } 18 | set { this.x = value; } 19 | } 20 | 21 | public float Y 22 | { 23 | get { return this.y; } 24 | set { this.y = value; } 25 | } 26 | 27 | public float Z 28 | { 29 | get { return this.z; } 30 | set { this.z = value; } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /3D-Bin-Packing.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.23107.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "3D-Bin-Packing", "3D-Bin-Packing\3D-Bin-Packing.csproj", "{5854B8C8-C67D-4E2A-BB78-B0E4F64646F3}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {5854B8C8-C67D-4E2A-BB78-B0E4F64646F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {5854B8C8-C67D-4E2A-BB78-B0E4F64646F3}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {5854B8C8-C67D-4E2A-BB78-B0E4F64646F3}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {5854B8C8-C67D-4E2A-BB78-B0E4F64646F3}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | EndGlobal 23 | -------------------------------------------------------------------------------- /3D-Bin-Packing/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace _3D_Bin_Packing.Properties 12 | { 13 | 14 | 15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase 18 | { 19 | 20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 21 | 22 | public static Settings Default 23 | { 24 | get 25 | { 26 | return defaultInstance; 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /3D-Bin-Packing/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("3D-Bin-Packing")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("3D-Bin-Packing")] 13 | [assembly: AssemblyCopyright("Copyright © 2016")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("5854b8c8-c67d-4e2a-bb78-b0e4f64646f3")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 3d Bin Packing 2 | [![Build Status](https://img.shields.io/codeship/d6c1ddd0-16a3-0132-5f85-2e35c05e22b1/master.svg)]() 3 | [![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](https://raw.githubusercontent.com/SahibYar/3D-Bin-Packing/local_branch/LICENSE) 4 | 5 | A freelance project for packing the goods efficiently using some heuristic algorithms 6 | 7 | # Note: This project is currently under development. 8 |

3D BIN PACKING PROBLEM

9 | Development of an Optimization software for calculation of the best container box for a given amount of items (boxes) with 2 possibilities: 10 | 20 | -------------------------------------------------------------------------------- /3D-Bin-Packing/MaxRectsBinPack.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace _3D_Bin_Packing 5 | { 6 | class MaxRectsBinPack 7 | { 8 | public Int32 boxWidth = 0; 9 | public Int32 boxLength = 0; 10 | public Int32 boxHeight = 0; 11 | 12 | public Boolean allowRotations; 13 | 14 | public List usedContainers = new List(); 15 | public List freeContainers = new List(); 16 | 17 | public enum FreeContianerChoiceHeuristic 18 | { 19 | /// 20 | /// BSSF: Positions the Box against the short side of a free container into which it fits the best. 21 | /// 22 | ContainerBestShortSideFit, 23 | 24 | /// 25 | /// BLSF: Positions the Box against the long side of a free container into which it fits the best. 26 | /// 27 | ContainerBestLongSideFit, 28 | 29 | /// 30 | /// BAF: Positions the Box into the smallest free container into which it fits. 31 | /// 32 | ContainerBestVolumeFit, 33 | 34 | /// 35 | /// BL: Does the tetris placement. 36 | /// 37 | ContainerBottomLeftRule, 38 | 39 | /// 40 | /// CP: Chooses the placement where the Box touches other Containers/Box as much as possible. 41 | /// 42 | ContainerContactPointRule 43 | } 44 | 45 | public MaxRectsBinPack(Int32 width, Int32 length, Int32 height, Boolean rotations = true) 46 | { 47 | Init(width, length, height, rotations); 48 | } 49 | 50 | public void Init (Int32 width, Int32 length, Int32 height, Boolean rotations = true) 51 | { 52 | boxWidth = width; 53 | boxHeight = height; 54 | allowRotations = rotations; 55 | 56 | Containers n = new Containers(); 57 | n.Origin.X = 0; 58 | n.Origin.Y = 0; 59 | n.Origin.Z = 0; 60 | 61 | n.Width = width; 62 | n.Height = height; 63 | n.Length = length; 64 | 65 | usedContainers.Clear(); 66 | freeContainers.Clear(); 67 | freeContainers.Add(n); 68 | } 69 | 70 | public 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /3D-Bin-Packing/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace _3D_Bin_Packing.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("_3D_Bin_Packing.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Looks up a localized resource of type System.Drawing.Bitmap. 65 | /// 66 | internal static System.Drawing.Bitmap _3d_icon { 67 | get { 68 | object obj = ResourceManager.GetObject("_3d_icon", resourceCulture); 69 | return ((System.Drawing.Bitmap)(obj)); 70 | } 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.userosscache 8 | *.sln.docstates 9 | 10 | # User-specific files (MonoDevelop/Xamarin Studio) 11 | *.userprefs 12 | 13 | # Build results 14 | [Dd]ebug/ 15 | [Dd]ebugPublic/ 16 | [Rr]elease/ 17 | [Rr]eleases/ 18 | x64/ 19 | x86/ 20 | build/ 21 | bld/ 22 | [Bb]in/ 23 | [Oo]bj/ 24 | 25 | # Visual Studio 2015 cache/options directory 26 | .vs/ 27 | 28 | # MSTest test Results 29 | [Tt]est[Rr]esult*/ 30 | [Bb]uild[Ll]og.* 31 | 32 | # NUNIT 33 | *.VisualState.xml 34 | TestResult.xml 35 | 36 | # Build Results of an ATL Project 37 | [Dd]ebugPS/ 38 | [Rr]eleasePS/ 39 | dlldata.c 40 | 41 | # DNX 42 | project.lock.json 43 | artifacts/ 44 | 45 | *_i.c 46 | *_p.c 47 | *_i.h 48 | *.ilk 49 | *.meta 50 | *.obj 51 | *.pch 52 | *.pdb 53 | *.pgc 54 | *.pgd 55 | *.rsp 56 | *.sbr 57 | *.tlb 58 | *.tli 59 | *.tlh 60 | *.tmp 61 | *.tmp_proj 62 | *.log 63 | *.vspscc 64 | *.vssscc 65 | .builds 66 | *.pidb 67 | *.svclog 68 | *.scc 69 | 70 | # Chutzpah Test files 71 | _Chutzpah* 72 | 73 | # Visual C++ cache files 74 | ipch/ 75 | *.aps 76 | *.ncb 77 | *.opensdf 78 | *.sdf 79 | *.cachefile 80 | 81 | # Visual Studio profiler 82 | *.psess 83 | *.vsp 84 | *.vspx 85 | 86 | # TFS 2012 Local Workspace 87 | $tf/ 88 | 89 | # Guidance Automation Toolkit 90 | *.gpState 91 | 92 | # ReSharper is a .NET coding add-in 93 | _ReSharper*/ 94 | *.[Rr]e[Ss]harper 95 | *.DotSettings.user 96 | 97 | # JustCode is a .NET coding add-in 98 | .JustCode 99 | 100 | # TeamCity is a build add-in 101 | _TeamCity* 102 | 103 | # DotCover is a Code Coverage Tool 104 | *.dotCover 105 | 106 | # NCrunch 107 | _NCrunch_* 108 | .*crunch*.local.xml 109 | 110 | # MightyMoose 111 | *.mm.* 112 | AutoTest.Net/ 113 | 114 | # Web workbench (sass) 115 | .sass-cache/ 116 | 117 | # Installshield output folder 118 | [Ee]xpress/ 119 | 120 | # DocProject is a documentation generator add-in 121 | DocProject/buildhelp/ 122 | DocProject/Help/*.HxT 123 | DocProject/Help/*.HxC 124 | DocProject/Help/*.hhc 125 | DocProject/Help/*.hhk 126 | DocProject/Help/*.hhp 127 | DocProject/Help/Html2 128 | DocProject/Help/html 129 | 130 | # Click-Once directory 131 | publish/ 132 | 133 | # Publish Web Output 134 | *.[Pp]ublish.xml 135 | *.azurePubxml 136 | ## TODO: Comment the next line if you want to checkin your 137 | ## web deploy settings but do note that will include unencrypted 138 | ## passwords 139 | #*.pubxml 140 | 141 | *.publishproj 142 | 143 | # NuGet Packages 144 | *.nupkg 145 | # The packages folder can be ignored because of Package Restore 146 | **/packages/* 147 | # except build/, which is used as an MSBuild target. 148 | !**/packages/build/ 149 | # Uncomment if necessary however generally it will be regenerated when needed 150 | #!**/packages/repositories.config 151 | 152 | # Windows Azure Build Output 153 | csx/ 154 | *.build.csdef 155 | 156 | # Windows Store app package directory 157 | AppPackages/ 158 | 159 | # Visual Studio cache files 160 | # files ending in .cache can be ignored 161 | *.[Cc]ache 162 | # but keep track of directories ending in .cache 163 | !*.[Cc]ache/ 164 | 165 | # Others 166 | ClientBin/ 167 | [Ss]tyle[Cc]op.* 168 | ~$* 169 | *~ 170 | *.dbmdl 171 | *.dbproj.schemaview 172 | *.pfx 173 | *.publishsettings 174 | node_modules/ 175 | orleans.codegen.cs 176 | 177 | # RIA/Silverlight projects 178 | Generated_Code/ 179 | 180 | # Backup & report files from converting an old project file 181 | # to a newer Visual Studio version. Backup files are not needed, 182 | # because we have git ;-) 183 | _UpgradeReport_Files/ 184 | Backup*/ 185 | UpgradeLog*.XML 186 | UpgradeLog*.htm 187 | 188 | # SQL Server files 189 | *.mdf 190 | *.ldf 191 | 192 | # Business Intelligence projects 193 | *.rdl.data 194 | *.bim.layout 195 | *.bim_*.settings 196 | 197 | # Microsoft Fakes 198 | FakesAssemblies/ 199 | 200 | # Node.js Tools for Visual Studio 201 | .ntvs_analysis.dat 202 | 203 | # Visual Studio 6 build log 204 | *.plg 205 | 206 | # Visual Studio 6 workspace options file 207 | *.opt 208 | 209 | # LightSwitch generated files 210 | GeneratedArtifacts/ 211 | _Pvt_Extensions/ 212 | ModelManifest.xml 213 | -------------------------------------------------------------------------------- /3D-Bin-Packing/Box.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace _3D_Bin_Packing 4 | { 5 | class Box 6 | { 7 | #region Private Data Members 8 | private String b_id; 9 | private Int32 b_quantity; 10 | private Int32 b_length; 11 | private Int32 b_width; 12 | private Int32 b_height; 13 | private Double b_weight; 14 | private Boolean b_allowedRotation_x; 15 | private Boolean b_allowedRotation_y; 16 | private Boolean b_allowedRotation_z; 17 | private Boolean b_toponly; 18 | private Boolean b_bottomonly; 19 | 20 | //for output 21 | private Boolean b_is_placed; 22 | 23 | private Boolean Rotation_x; 24 | private Boolean Rotation_y; 25 | private Boolean Rotation_z; 26 | 27 | private String container_id; // id of the container, in which it is placed. 28 | private Point3D origin; //Point where its origin lies in the container; 29 | #endregion 30 | 31 | #region Functions 32 | 33 | //Returns true if Box i > Box j else false 34 | public static Boolean compareVolume(Box i, Box j) 35 | { 36 | return ((i.Height * i.Width * i.Length) > (j.Height * j.Width * j.Length)); 37 | } 38 | 39 | //returns volume of a box; 40 | public Double Volume () 41 | { 42 | return Height * Width * Length; 43 | } 44 | #endregion 45 | 46 | #region Properties 47 | public Boolean IsPlaced 48 | { 49 | get { return this.b_is_placed; } 50 | set { this.b_is_placed = value; } 51 | } 52 | public String BoxID 53 | { 54 | get { return this.b_id; } 55 | set { this.b_id = value; } 56 | } 57 | 58 | public Int32 Quantity 59 | { 60 | get { return this.b_quantity; } 61 | set { this.b_quantity = value; } 62 | } 63 | 64 | public Int32 Length 65 | { 66 | get { return this.b_length; } 67 | set { this.b_length = value; } 68 | } 69 | 70 | public Int32 Width 71 | { 72 | get { return this.b_width; } 73 | set { this.b_width = value; } 74 | } 75 | 76 | public Int32 Height 77 | { 78 | get { return this.b_height; } 79 | set { this.b_height = value; } 80 | } 81 | 82 | public Double Weight 83 | { 84 | get { return this.b_weight; } 85 | set { this.b_weight = value; } 86 | } 87 | 88 | public Boolean TopOnly 89 | { 90 | get { return this.b_toponly; } 91 | set { this.b_toponly = value; } 92 | } 93 | 94 | public Boolean BottomOnly 95 | { 96 | get { return this.b_bottomonly; } 97 | set { this.b_bottomonly = value; } 98 | } 99 | 100 | public Boolean AllowedRotationsX 101 | { 102 | get { return this.b_allowedRotation_x; } 103 | set { this.b_allowedRotation_x = value; } 104 | } 105 | 106 | public Boolean AllowedRotationsY 107 | { 108 | get { return this.b_allowedRotation_y; } 109 | set { this.b_allowedRotation_y = value; } 110 | } 111 | 112 | public Boolean AllowedRotationsZ 113 | { 114 | get { return this.b_allowedRotation_z; } 115 | set { this.b_allowedRotation_z = value; } 116 | } 117 | 118 | public Boolean RotationX 119 | { 120 | get { return this.Rotation_x; } 121 | set { this.Rotation_x = value; } 122 | } 123 | 124 | public Boolean RotationY 125 | { 126 | get { return this.Rotation_y; } 127 | set { this.Rotation_y = value; } 128 | } 129 | 130 | public Boolean RotationZ 131 | { 132 | get { return this.Rotation_z; } 133 | set { this.Rotation_z = value; } 134 | } 135 | 136 | public String ContainerID 137 | { 138 | get { return this.container_id; } 139 | set { this.container_id = value; } 140 | } 141 | 142 | public Point3D Origin 143 | { 144 | get { return this.origin; } 145 | set { this.origin = value; } 146 | } 147 | #endregion 148 | } 149 | } -------------------------------------------------------------------------------- /3D-Bin-Packing/Container.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace _3D_Bin_Packing 4 | { 5 | class Containers 6 | { 7 | #region data members 8 | private String c_id; 9 | private Int32 c_Length; 10 | private Int32 c_minLength; 11 | private Int32 c_maxLength; 12 | private Int32 c_stepLength; 13 | 14 | private Int32 c_Width; 15 | private Int32 c_minWidth; 16 | private Int32 c_maxWidth; 17 | private Int32 c_stepWidth; 18 | 19 | private Int32 c_Height; 20 | private Int32 c_minHeight; 21 | private Int32 c_maxHeight; 22 | private Int32 c_stepHeight; 23 | 24 | private Double c_maxWeight; 25 | private Int32 c_maxCount; 26 | 27 | private Boolean b_still_to_open; 28 | private Boolean closed; 29 | 30 | /* 31 | A---------------B 32 | /| /| 33 | / | / | 34 | E--|------------F | 35 | | | | | 36 | Orig|in-------------|--D 37 | | / | / 38 | G/--------------H/ 39 | 40 | */ 41 | private Point3D origin; 42 | #endregion 43 | 44 | #region Functions 45 | public Double volume() 46 | { 47 | return Height * Length * Width; 48 | } 49 | #endregion 50 | 51 | #region properties 52 | 53 | public Point3D Origin 54 | { 55 | get { return this.origin; } 56 | set { this.origin = value; } 57 | } 58 | 59 | public Boolean Still_to_Open 60 | { 61 | get { return this.b_still_to_open; } 62 | set { this.b_still_to_open = value; } 63 | } 64 | 65 | public Boolean Closed 66 | { 67 | get { return this.closed; } 68 | set { this.closed = value; } 69 | } 70 | 71 | public String ContainerID 72 | { 73 | get { return this.c_id; } 74 | set { this.c_id = value; } 75 | } 76 | 77 | public Int32 Length 78 | { 79 | get { return this.c_Length; } 80 | set { this.c_Length = value; } 81 | } 82 | 83 | public Int32 MinLength 84 | { 85 | get { return this.c_maxLength; } 86 | set { this.c_maxLength = value; } 87 | } 88 | 89 | public Int32 MaxLength 90 | { 91 | get { return this.c_maxLength; } 92 | set { this.c_maxLength = value; } 93 | } 94 | 95 | public Int32 StepLenght 96 | { 97 | get { return this.c_stepLength; } 98 | set { this.c_stepLength = value; } 99 | } 100 | 101 | public Int32 Width 102 | { 103 | get { return this.c_Width; } 104 | set { this.c_Width = value; } 105 | } 106 | 107 | public Int32 MinWidth 108 | { 109 | get { return this.c_minWidth; } 110 | set { this.c_minWidth = value; } 111 | } 112 | 113 | public Int32 MaxWidth 114 | { 115 | get { return this.c_maxWidth; } 116 | set { this.c_maxWidth = value; } 117 | } 118 | 119 | public Int32 StepWidth 120 | { 121 | get { return this.c_stepWidth; } 122 | set { this.c_stepWidth = value; } 123 | } 124 | 125 | public Int32 Height 126 | { 127 | get { return this.c_Height; } 128 | set { this.c_Height = value; } 129 | } 130 | 131 | public Int32 MinHeight 132 | { 133 | get { return this.c_minHeight; } 134 | set { this.c_minHeight = value; } 135 | } 136 | 137 | public Int32 MaxHeight 138 | { 139 | get { return this.c_maxHeight; } 140 | set { this.c_maxHeight = value; } 141 | } 142 | 143 | public Int32 StepHeight 144 | { 145 | get { return this.c_stepHeight; } 146 | set { this.c_maxHeight = value; } 147 | } 148 | 149 | public Double MaxWeight 150 | { 151 | get { return this.c_maxWeight; } 152 | set { this.c_maxWeight = value; } 153 | } 154 | 155 | public Int32 MaxCount 156 | { 157 | get { return this.c_maxCount; } 158 | set { this.c_maxCount = value; } 159 | } 160 | #endregion 161 | } 162 | } -------------------------------------------------------------------------------- /3D-Bin-Packing/3D-Bin-Packing.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {5854B8C8-C67D-4E2A-BB78-B0E4F64646F3} 8 | WinExe 9 | Properties 10 | _3D_Bin_Packing 11 | 3D-Bin-Packing 12 | v4.5.2 13 | 512 14 | true 15 | false 16 | publish\ 17 | true 18 | Disk 19 | false 20 | Foreground 21 | 7 22 | Days 23 | false 24 | false 25 | true 26 | 0 27 | 1.0.0.%2a 28 | false 29 | true 30 | 31 | 32 | AnyCPU 33 | true 34 | full 35 | false 36 | bin\Debug\ 37 | DEBUG;TRACE 38 | prompt 39 | 4 40 | 41 | 42 | AnyCPU 43 | pdbonly 44 | true 45 | bin\Release\ 46 | TRACE 47 | prompt 48 | 4 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | Form 68 | 69 | 70 | Form1.cs 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | Form1.cs 80 | 81 | 82 | ResXFileCodeGenerator 83 | Resources.Designer.cs 84 | Designer 85 | 86 | 87 | True 88 | Resources.resx 89 | True 90 | 91 | 92 | SettingsSingleFileGenerator 93 | Settings.Designer.cs 94 | 95 | 96 | True 97 | Settings.settings 98 | True 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | False 110 | Microsoft .NET Framework 4.5.2 %28x86 and x64%29 111 | true 112 | 113 | 114 | False 115 | .NET Framework 3.5 SP1 116 | false 117 | 118 | 119 | 120 | 121 | 122 | 123 | 130 | -------------------------------------------------------------------------------- /3D-Bin-Packing/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Resources\3d_icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | -------------------------------------------------------------------------------- /3D-Bin-Packing/Form1.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace _3D_Bin_Packing 2 | { 3 | partial class Form1 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); 32 | this.pictureBox1 = new System.Windows.Forms.PictureBox(); 33 | this.descriptionLabel1 = new System.Windows.Forms.Label(); 34 | this.xmlFileLabel = new System.Windows.Forms.Label(); 35 | this.addxmlbutton = new System.Windows.Forms.Button(); 36 | this.XML_openFileDialog = new System.Windows.Forms.OpenFileDialog(); 37 | this.generateButton = new System.Windows.Forms.Button(); 38 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); 39 | this.SuspendLayout(); 40 | // 41 | // pictureBox1 42 | // 43 | this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); 44 | this.pictureBox1.Location = new System.Drawing.Point(0, 0); 45 | this.pictureBox1.Name = "pictureBox1"; 46 | this.pictureBox1.Size = new System.Drawing.Size(616, 104); 47 | this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; 48 | this.pictureBox1.TabIndex = 0; 49 | this.pictureBox1.TabStop = false; 50 | // 51 | // descriptionLabel1 52 | // 53 | this.descriptionLabel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 54 | | System.Windows.Forms.AnchorStyles.Right))); 55 | this.descriptionLabel1.AutoSize = true; 56 | this.descriptionLabel1.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 57 | this.descriptionLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192))))); 58 | this.descriptionLabel1.Location = new System.Drawing.Point(21, 109); 59 | this.descriptionLabel1.Name = "descriptionLabel1"; 60 | this.descriptionLabel1.Size = new System.Drawing.Size(315, 17); 61 | this.descriptionLabel1.TabIndex = 5; 62 | this.descriptionLabel1.Text = "Add XML file showing total Boxes and Containers"; 63 | // 64 | // xmlFileLabel 65 | // 66 | this.xmlFileLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 67 | this.xmlFileLabel.AutoSize = true; 68 | this.xmlFileLabel.BackColor = System.Drawing.SystemColors.ButtonHighlight; 69 | this.xmlFileLabel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 70 | this.xmlFileLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 71 | this.xmlFileLabel.Location = new System.Drawing.Point(166, 129); 72 | this.xmlFileLabel.MinimumSize = new System.Drawing.Size(430, 20); 73 | this.xmlFileLabel.Name = "xmlFileLabel"; 74 | this.xmlFileLabel.Size = new System.Drawing.Size(430, 20); 75 | this.xmlFileLabel.TabIndex = 4; 76 | // 77 | // addxmlbutton 78 | // 79 | this.addxmlbutton.Location = new System.Drawing.Point(21, 129); 80 | this.addxmlbutton.Name = "addxmlbutton"; 81 | this.addxmlbutton.Size = new System.Drawing.Size(130, 23); 82 | this.addxmlbutton.TabIndex = 3; 83 | this.addxmlbutton.Text = "Add XML file"; 84 | this.addxmlbutton.UseVisualStyleBackColor = true; 85 | this.addxmlbutton.Click += new System.EventHandler(this.addxmlbutton_Click); 86 | // 87 | // XML_openFileDialog 88 | // 89 | this.XML_openFileDialog.Filter = "XML files (*.xml)|*.xml;"; 90 | // 91 | // generateButton 92 | // 93 | this.generateButton.Location = new System.Drawing.Point(469, 161); 94 | this.generateButton.Name = "generateButton"; 95 | this.generateButton.Size = new System.Drawing.Size(127, 27); 96 | this.generateButton.TabIndex = 8; 97 | this.generateButton.Text = "Calculate Results"; 98 | this.generateButton.UseVisualStyleBackColor = true; 99 | this.generateButton.Click += new System.EventHandler(this.generateButton_Click); 100 | // 101 | // Form1 102 | // 103 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 104 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 105 | this.ClientSize = new System.Drawing.Size(616, 199); 106 | this.Controls.Add(this.generateButton); 107 | this.Controls.Add(this.descriptionLabel1); 108 | this.Controls.Add(this.xmlFileLabel); 109 | this.Controls.Add(this.addxmlbutton); 110 | this.Controls.Add(this.pictureBox1); 111 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 112 | this.MaximizeBox = false; 113 | this.Name = "Form1"; 114 | this.Text = "3D Bin Packing"; 115 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); 116 | this.ResumeLayout(false); 117 | this.PerformLayout(); 118 | 119 | } 120 | 121 | #endregion 122 | 123 | private System.Windows.Forms.PictureBox pictureBox1; 124 | private System.Windows.Forms.Label descriptionLabel1; 125 | private System.Windows.Forms.Label xmlFileLabel; 126 | private System.Windows.Forms.Button addxmlbutton; 127 | private System.Windows.Forms.OpenFileDialog XML_openFileDialog; 128 | private System.Windows.Forms.Button generateButton; 129 | } 130 | } 131 | 132 | -------------------------------------------------------------------------------- /3D-Bin-Packing/Form1.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Windows.Forms; 4 | using System.Xml; 5 | 6 | namespace _3D_Bin_Packing 7 | { 8 | public partial class Form1 : Form 9 | { 10 | private string filePath; // a variable which will save the xml file path. 11 | public Form1() 12 | { 13 | InitializeComponent(); 14 | 15 | // loading the 3d_icon.png as bitmap image to be displayed as form icon 16 | Bitmap bmp = Properties.Resources._3d_icon; 17 | this.Icon = Icon.FromHandle(bmp.GetHicon()); 18 | } 19 | 20 | private void addxmlbutton_Click(object sender, EventArgs e) 21 | { 22 | DialogResult result = XML_openFileDialog.ShowDialog(); 23 | 24 | if (result == DialogResult.OK) 25 | { 26 | 27 | try 28 | { 29 | filePath = XML_openFileDialog.FileName; 30 | xmlFileLabel.Text = filePath.ToString(); //adding the selected path to the label. 31 | } 32 | catch (Exception ex) 33 | { 34 | MessageBox.Show("Error: Could not read xml file from disk.\nError Message: " + ex.Message); 35 | } 36 | } 37 | } 38 | 39 | private void generateButton_Click(object sender, EventArgs e) 40 | { 41 | Load_Data(); 42 | } //ending the event handler for Generate button 43 | 44 | private void Load_Data() 45 | { 46 | // Created an Optimization object for storing the OptimizationID 47 | // and OptimizationType of given xml file. 48 | Optimization optimization_object = new Optimization(); 49 | 50 | // Created an Containers object for storing the ContainerID, 51 | // Length, MinLength.... of the given Container 52 | Containers container_object = new Containers(); 53 | 54 | // Created an Box object for storing the BoxID, Quantity, 55 | // Length.... of the given Box 56 | Box box_object = new Box(); 57 | 58 | // Create a new xml document 59 | XmlDocument document = new XmlDocument(); 60 | 61 | // loaded the newly created xml document with the input of xml 62 | // file path 63 | document.Load(@"" + xmlFileLabel.Text.ToString()); 64 | 65 | // Created a list of all the child nodes of tag 66 | // which include OptimizationID, OptimizationType, 67 | // Containers, and Boxes. 68 | XmlNodeList xnList = document.SelectNodes("/xml[@*]"); 69 | 70 | foreach (XmlNode xn in xnList) 71 | { 72 | // Selecting the given child nodes of tag to 73 | // XmlNode class objects. 74 | XmlNode OptimizationID = xn.SelectSingleNode("OptimizationID"); 75 | XmlNode OptimizationType = xn.SelectSingleNode("OptimizationType"); 76 | XmlNode Containers = xn.SelectSingleNode("Containers"); 77 | XmlNode Boxes = xn.SelectSingleNode("Boxes"); 78 | 79 | // assigning the text of OptimizationID to Optimization class object 80 | if (OptimizationID != null) 81 | { 82 | optimization_object.OptimizationID = OptimizationID.InnerText; 83 | } 84 | 85 | // assigning the text of OptimizationType to Optimization class object 86 | if (OptimizationType != null) 87 | { 88 | optimization_object.OptimizationType = OptimizationType.InnerText; 89 | } 90 | 91 | if (Containers != null) 92 | { 93 | XmlNodeList innercontainers = Containers.SelectNodes("Containers/Container"); 94 | foreach (XmlNode node in innercontainers) 95 | { 96 | if (node != null) 97 | { 98 | Point3D point = new Point3D(); 99 | container_object.ContainerID = node["ContainerID"].InnerText; 100 | 101 | container_object.Length = Int32.Parse(node["Length"].InnerText); 102 | container_object.MinLength = Int32.Parse(node["MinLength"].InnerText); 103 | container_object.MaxLength = Int32.Parse(node["MaxLength"].InnerText); 104 | container_object.StepLenght = Int32.Parse(node["StepLength"].InnerText); 105 | 106 | container_object.Width = Int32.Parse(node["Width"].InnerText); 107 | container_object.MinWidth = Int32.Parse(node["MinWidth"].InnerText); 108 | container_object.MaxWidth = Int32.Parse(node["MaxWidth"].InnerText); 109 | container_object.StepWidth = Int32.Parse(node["StepWidth"].InnerText); 110 | 111 | container_object.Height = Int32.Parse(node["Height"].InnerText); 112 | container_object.MinHeight = Int32.Parse(node["MinHeight"].InnerText); 113 | container_object.MaxHeight = Int32.Parse(node["MaxHeight"].InnerText); 114 | container_object.StepHeight = Int32.Parse(node["StepHeight"].InnerText); 115 | 116 | container_object.MaxWeight = Double.Parse(node["MaxWeight"].InnerText); 117 | container_object.MaxCount = Int32.Parse(node["MaxCount"].InnerText); 118 | container_object.Still_to_Open = true; 119 | container_object.Closed = false; 120 | 121 | 122 | point.X = 0.0F; 123 | point.Y = 0.0F; 124 | point.Z = 0.0F; 125 | container_object.Origin = point; 126 | 127 | Guillotine3D.ContainerList.Add(container_object.ContainerID, container_object); 128 | } // ending if (node != null) 129 | } // ending foreach loop 130 | } // ending if (Containers != null) 131 | 132 | if (Boxes != null) 133 | { 134 | XmlNodeList boxlist = Boxes.SelectNodes("Boxes/Box"); 135 | foreach (XmlNode box in boxlist) 136 | { 137 | box_object.BoxID = box["BoxID"].InnerText; 138 | box_object.Quantity = Int32.Parse(box["Quantity"].InnerText); 139 | box_object.Length = Int32.Parse(box["Length"].InnerText); 140 | box_object.Width = Int32.Parse(box["Width"].InnerText); 141 | box_object.Height = Int32.Parse(box["Height"].InnerText); 142 | box_object.Weight = Double.Parse(box["Weight"].InnerText); 143 | 144 | if (box["AllowedRotations"].InnerText.Contains("X")) 145 | box_object.AllowedRotationsX = true; 146 | else 147 | box_object.AllowedRotationsX = false; 148 | 149 | if (box["AllowedRotations"].InnerText.Contains("Y")) 150 | box_object.AllowedRotationsY = true; 151 | else 152 | box_object.AllowedRotationsY = false; 153 | 154 | if (box["AllowedRotations"].InnerText.Contains("Z")) 155 | box_object.AllowedRotationsZ = true; 156 | else 157 | box_object.AllowedRotationsZ = false; 158 | 159 | box_object.IsPlaced = false; 160 | 161 | if (box["TopOnly"].InnerText.ToUpper() == "FALSE") 162 | box_object.TopOnly = false; 163 | else 164 | box_object.TopOnly = true; 165 | 166 | if (box["BottomOnly"].InnerText.ToUpper() == "FALSE") 167 | box_object.TopOnly = false; 168 | else 169 | box_object.TopOnly = true; 170 | 171 | Guillotine3D.BoxList.Add(box_object.BoxID, box_object); 172 | } // ending foreach (XmlNode box in boxlist) 173 | } // ending If (Boxes != null) 174 | } // ending foreach (XmlNode xn in xnList) 175 | } //ending the Load_Data() function 176 | } // ending Form1 class 177 | } // ending namespace 178 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /3D-Bin-Packing/Guillotine3D.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | 5 | namespace _3D_Bin_Packing 6 | { 7 | class Guillotine3D 8 | { 9 | // Created a list of containers for holding all the container objects 10 | public static Dictionary ContainerList = new Dictionary(); 11 | 12 | // Created a list of boxes for holding all the box objects 13 | public static Dictionary BoxList = new Dictionary(); 14 | 15 | 16 | // list of the splitted containers from the given containers 17 | //Dictionary 18 | Dictionary> Split_Container_open_list = new Dictionary>(); 19 | 20 | // list of all the boxes in the given container. 21 | public static Dictionary> Container_Containing_Boxes = new Dictionary>(); 22 | 23 | //sort the boxes in their descending volume 24 | List> sorted_box_List; 25 | 26 | /// 27 | /// This functions will find the smallest un-opened container from the container list. 28 | /// 29 | /// return the key of smallest un-opened container 30 | String find_smallest_unopen_container () 31 | { 32 | Double volume = ContainerList.First().Value.Height * ContainerList.First().Value.Width * ContainerList.First().Value.Length; 33 | String key = ContainerList.First().Key; 34 | 35 | foreach (KeyValuePair c in ContainerList) 36 | { 37 | if (volume > c.Value.Height * c.Value.Width * c.Value.Height && c.Value.Still_to_Open) 38 | { 39 | volume = c.Value.Height * c.Value.Width * c.Value.Height; 40 | key = c.Key; 41 | } 42 | } 43 | return key; 44 | } 45 | 46 | /* 47 | Fill the box with items in it not violating its maximum weight limit 48 | and other constraints 49 | */ 50 | // This funtion will try to put the best possible object which can be fitted in the given container 51 | void fill_container(String key) //here the key will be of the smallest available container. 52 | { 53 | // Still to open = false 54 | // means that it is currenlty open. 55 | ContainerList[key].Still_to_Open = false; 56 | 57 | // added the currently opened container in its splitted container list as it is. 58 | Split_Container_open_list[key].Add(ContainerList[key]); 59 | 60 | // rearranging the boxes in descending order of its volume. 61 | re_arranging_boxes(); 62 | 63 | foreach (KeyValuePair box in sorted_box_List) 64 | { 65 | if (box.Value.Quantity > 0) // if the box is not yet placed. 66 | { 67 | //to get the orientation in which the box will be placed in the given container 68 | Boolean? RotationX = null; 69 | Boolean? RotationY = null; 70 | Boolean? RotationZ = null; 71 | Int32? container_index = null; 72 | Int32? orientation_case = null; 73 | 74 | Point3D point = has_free_space(key, box.Value, out orientation_case, out container_index, out RotationX, out RotationY, out RotationZ); 75 | 76 | // checks if the box could be contained in the given container. 77 | if (point.X != float.NegativeInfinity && point.Y != float.NegativeInfinity && point.Z != float.NegativeInfinity && orientation_case.HasValue && 78 | RotationX.HasValue && RotationY.HasValue && RotationZ.HasValue && container_index.HasValue && has_free_weight(key, box.Value)) 79 | { 80 | if (place_the_object(key, container_index.Value, orientation_case.Value, box.Value, point, RotationX, RotationY, RotationZ)) 81 | { 82 | re_arranging_boxes(); 83 | } 84 | } 85 | } 86 | } 87 | } 88 | 89 | 90 | /// 91 | /// 92 | /// 93 | /// Key of the container in which the object has to be placed 94 | /// index of the Split_Container_open_list at which the box is placed 95 | /// This parametre will help in splitting the Containers, There are total of 6 cases. 96 | /// Box which is to be placed in the given container 97 | /// 3-Dimensional Point in the given container which will be the origin of the box 98 | /// if true, Rotate the box allong X-axis 99 | /// if true, Rotate the box allong Y-axis 100 | /// if true, Rotate the box allong Z-axis 101 | /// True if the object is placed successfully 102 | Boolean place_the_object(String Container_Key, Int32 index, Int32 orientation_case, Box box, Point3D point, Boolean? RotationX, Boolean? RotationY, Boolean? RotationZ) 103 | { 104 | BoxList[box.BoxID].Quantity = BoxList[Container_Key].Quantity - 1; 105 | BoxList[box.BoxID].ContainerID = Container_Key; 106 | BoxList[box.BoxID].RotationX = RotationX.Value; 107 | BoxList[box.BoxID].RotationY = RotationY.Value; 108 | BoxList[box.BoxID].RotationZ = RotationZ.Value; 109 | BoxList[box.BoxID].Origin = point; 110 | 111 | Container_Containing_Boxes[Container_Key].Add(BoxList[box.BoxID]); 112 | Split_Container(Container_Key, index, orientation_case, box, point, RotationX.Value, RotationY.Value, RotationZ.Value); 113 | 114 | return true; 115 | } 116 | 117 | void Split_Container(String Container_Key, Int32 index, Int32 orientation_case, Box box, Point3D point, Boolean RotationX, Boolean RotationY, Boolean RotationZ) 118 | { 119 | Containers old_container = Split_Container_open_list[Container_Key].ElementAt(index); 120 | Containers new_container1 = new Containers(); 121 | Containers new_container2 = new Containers(); 122 | Containers new_container3 = new Containers(); 123 | 124 | //no-rotation 125 | if (orientation_case == 0) 126 | { 127 | new_container1.Length = old_container.Length; 128 | new_container1.Width = old_container.Width - box.Width; 129 | new_container1.Height = old_container.Height; 130 | 131 | if (new_container1.Length > 0 && new_container1.Width > 0 && new_container1.Height > 0) 132 | { 133 | new_container1.Origin.X = point.X; 134 | new_container1.Origin.Y = point.Y + box.Width; 135 | new_container1.Origin.Z = point.Z; 136 | new_container1.Still_to_Open = true; 137 | Split_Container_open_list[Container_Key].Add(new_container1); 138 | } 139 | 140 | new_container2.Length = old_container.Length - box.Length; 141 | new_container2.Width = old_container.Width; 142 | new_container2.Height = old_container.Height; 143 | 144 | if (new_container2.Length > 0 && new_container2.Width > 0 && new_container2.Height > 0) 145 | { 146 | new_container2.Origin.X = point.X + box.Length; 147 | new_container2.Origin.Y = point.Y; 148 | new_container2.Origin.Z = point.Z; 149 | new_container2.Still_to_Open = true; 150 | Split_Container_open_list[Container_Key].Add(new_container2); 151 | } 152 | 153 | new_container3.Length = old_container.Length; 154 | new_container3.Width = old_container.Width; 155 | new_container3.Height = old_container.Height - box.Height; 156 | 157 | if (new_container3.Length > 0 && new_container3.Width > 0 && new_container3.Height > 0) 158 | { 159 | new_container3.Origin.X = point.X; 160 | new_container3.Origin.Y = point.Y; 161 | new_container3.Origin.Z = point.Z + box.Height; 162 | new_container3.Still_to_Open = true; 163 | Split_Container_open_list[Container_Key].Add(new_container3); 164 | } 165 | Split_Container_open_list[Container_Key].RemoveAt(index); 166 | 167 | /* 168 | foreach Free Container F in Split_Container_open_list 169 | { 170 | Compute F\Box and subdivide the result into at most six 171 | new containers C1, C2, C3...C6 and add them to 172 | Split_Container_open_list; 173 | and Delete F from Split_Containers_open_list. 174 | } 175 | */ 176 | Int32 tindex = 0; 177 | foreach (Containers F in Split_Container_open_list[Container_Key]) 178 | { 179 | //if the container is intersected by the container. 180 | if (box_intersect_container(box, box.Length, box.Width, box.Height, F)) 181 | {//New node at the top side of the used node. 182 | if (box.Origin.X < F.Origin.X + F.Length && box.Origin.X + box.Length > F.Origin.X ) 183 | { 184 | if (box.Origin.Y > F.Origin.Y && box.Origin.Y < F.Origin.Y + F.Width) 185 | { 186 | // make new container 187 | } 188 | } 189 | } 190 | +tindex; 191 | } 192 | } 193 | 194 | //rotation along X-axis 195 | else if (orientation_case == 1) 196 | { 197 | new_container1.Length = old_container.Length; 198 | new_container1.Width = old_container.Width - box.Height; 199 | new_container1.Height = old_container.Height; 200 | 201 | if (new_container1.Length > 0 && new_container1.Width > 0 && new_container1.Height > 0) 202 | { 203 | new_container1.Origin.X = point.X; 204 | new_container1.Origin.Y = point.Y + box.Height; 205 | new_container1.Origin.Z = point.Z; 206 | new_container1.Still_to_Open = true; 207 | Split_Container_open_list[Container_Key].Add(new_container1); 208 | } 209 | 210 | new_container2.Length = old_container.Length - box.Length; 211 | new_container2.Width = old_container.Width; 212 | new_container2.Height = old_container.Height; 213 | 214 | if (new_container2.Length > 0 && new_container2.Width > 0 && new_container2.Height > 0) 215 | { 216 | new_container2.Origin.X = point.X + box.Length; 217 | new_container2.Origin.Y = point.Y; 218 | new_container2.Origin.Z = point.Z; 219 | new_container2.Still_to_Open = true; 220 | Split_Container_open_list[Container_Key].Add(new_container2); 221 | } 222 | 223 | new_container3.Length = old_container.Length; 224 | new_container3.Width = old_container.Width; 225 | new_container3.Height = old_container.Height - box.Width; 226 | 227 | if (new_container3.Length > 0 && new_container3.Width > 0 && new_container3.Height > 0) 228 | { 229 | new_container3.Origin.X = point.X; 230 | new_container3.Origin.Y = point.Y; 231 | new_container3.Origin.Z = point.Z + box.Width; 232 | new_container3.Still_to_Open = true; 233 | Split_Container_open_list[Container_Key].Add(new_container3); 234 | } 235 | Split_Container_open_list[Container_Key].RemoveAt(index); 236 | } 237 | 238 | //rotation along Y-axis 239 | else if (orientation_case == 2) 240 | { 241 | new_container1.Length = old_container.Length; 242 | new_container1.Width = old_container.Width - box.Width; 243 | new_container1.Height = old_container.Height; 244 | 245 | if (new_container1.Length > 0 && new_container1.Width > 0 && new_container1.Height > 0) 246 | { 247 | new_container1.Origin.X = point.X; 248 | new_container1.Origin.Y = point.Y + box.Width; 249 | new_container1.Origin.Z = point.Z; 250 | new_container1.Still_to_Open = true; 251 | Split_Container_open_list[Container_Key].Add(new_container1); 252 | } 253 | 254 | new_container2.Length = old_container.Length - box.Height; 255 | new_container2.Width = old_container.Width; 256 | new_container2.Height = old_container.Height; 257 | 258 | if (new_container2.Length > 0 && new_container2.Width > 0 && new_container2.Height > 0) 259 | { 260 | new_container2.Origin.X = point.X + box.Height; 261 | new_container2.Origin.Y = point.Y; 262 | new_container2.Origin.Z = point.Z; 263 | new_container2.Still_to_Open = true; 264 | Split_Container_open_list[Container_Key].Add(new_container2); 265 | } 266 | 267 | new_container3.Length = old_container.Length; 268 | new_container3.Width = old_container.Width; 269 | new_container3.Height = old_container.Height - box.Length; 270 | 271 | if (new_container3.Length > 0 && new_container3.Width > 0 && new_container3.Height > 0) 272 | { 273 | new_container3.Origin.X = point.X; 274 | new_container3.Origin.Y = point.Y; 275 | new_container3.Origin.Z = point.Z + box.Length; 276 | new_container3.Still_to_Open = true; 277 | Split_Container_open_list[Container_Key].Add(new_container3); 278 | } 279 | Split_Container_open_list[Container_Key].RemoveAt(index); 280 | } 281 | 282 | //rotation along z-axis 283 | else if (orientation_case == 3) 284 | { 285 | new_container1.Length = old_container.Length; 286 | new_container1.Width = old_container.Width - box.Length; 287 | new_container1.Height = old_container.Height; 288 | 289 | if (new_container1.Length > 0 && new_container1.Width > 0 && new_container1.Height > 0) 290 | { 291 | new_container1.Origin.X = point.X; 292 | new_container1.Origin.Y = point.Y + box.Length; 293 | new_container1.Origin.Z = point.Z; 294 | new_container1.Still_to_Open = true; 295 | Split_Container_open_list[Container_Key].Add(new_container1); 296 | } 297 | 298 | new_container2.Length = old_container.Length - box.Width; 299 | new_container2.Width = old_container.Width; 300 | new_container2.Height = old_container.Height; 301 | 302 | if (new_container2.Length > 0 && new_container2.Width > 0 && new_container2.Height > 0) 303 | { 304 | new_container2.Origin.X = point.X + box.Width; 305 | new_container2.Origin.Y = point.Y; 306 | new_container2.Origin.Z = point.Z; 307 | new_container2.Still_to_Open = true; 308 | Split_Container_open_list[Container_Key].Add(new_container2); 309 | } 310 | 311 | new_container3.Length = old_container.Length; 312 | new_container3.Width = old_container.Width; 313 | new_container3.Height = old_container.Height - box.Height; 314 | 315 | if (new_container3.Length > 0 && new_container3.Width > 0 && new_container3.Height > 0) 316 | { 317 | new_container3.Origin.X = point.X; 318 | new_container3.Origin.Y = point.Y; 319 | new_container3.Origin.Z = point.Z + box.Height; 320 | new_container3.Still_to_Open = true; 321 | Split_Container_open_list[Container_Key].Add(new_container3); 322 | } 323 | Split_Container_open_list[Container_Key].RemoveAt(index); 324 | } 325 | 326 | else if (orientation_case == 4) 327 | { 328 | new_container1.Length = old_container.Length; 329 | new_container1.Width = old_container.Width - box.Length; 330 | new_container1.Height = old_container.Height; 331 | 332 | if (new_container1.Length > 0 && new_container1.Width > 0 && new_container1.Height > 0) 333 | { 334 | new_container1.Origin.X = point.X; 335 | new_container1.Origin.Y = point.Y + box.Length; 336 | new_container1.Origin.Z = point.Z; 337 | new_container1.Still_to_Open = true; 338 | Split_Container_open_list[Container_Key].Add(new_container1); 339 | } 340 | 341 | new_container2.Length = old_container.Length - box.Height; 342 | new_container2.Width = old_container.Width; 343 | new_container2.Height = old_container.Height; 344 | 345 | if (new_container2.Length > 0 && new_container2.Width > 0 && new_container2.Height > 0) 346 | { 347 | new_container2.Origin.X = point.X + box.Height; 348 | new_container2.Origin.Y = point.Y; 349 | new_container2.Origin.Z = point.Z; 350 | new_container2.Still_to_Open = true; 351 | Split_Container_open_list[Container_Key].Add(new_container2); 352 | } 353 | 354 | new_container3.Length = old_container.Length; 355 | new_container3.Width = old_container.Width; 356 | new_container3.Height = old_container.Height - box.Width; 357 | 358 | if (new_container3.Length > 0 && new_container3.Width > 0 && new_container3.Height > 0) 359 | { 360 | new_container3.Origin.X = point.X; 361 | new_container3.Origin.Y = point.Y; 362 | new_container3.Origin.Z = point.Z + box.Width; 363 | new_container3.Still_to_Open = true; 364 | Split_Container_open_list[Container_Key].Add(new_container3); 365 | } 366 | Split_Container_open_list[Container_Key].RemoveAt(index); 367 | } 368 | 369 | //no-rotation 370 | else if (orientation_case == 5) 371 | { 372 | new_container1.Length = old_container.Length; 373 | new_container1.Width = old_container.Width - box.Height; 374 | new_container1.Height = old_container.Height; 375 | 376 | if (new_container1.Length > 0 && new_container1.Width > 0 && new_container1.Height > 0) 377 | { 378 | new_container1.Origin.X = point.X; 379 | new_container1.Origin.Y = point.Y + box.Height; 380 | new_container1.Origin.Z = point.Z; 381 | new_container1.Still_to_Open = true; 382 | Split_Container_open_list[Container_Key].Add(new_container1); 383 | } 384 | 385 | new_container2.Length = old_container.Length - box.Width; 386 | new_container2.Width = old_container.Width; 387 | new_container2.Height = old_container.Height; 388 | 389 | if (new_container2.Length > 0 && new_container2.Width > 0 && new_container2.Height > 0) 390 | { 391 | new_container2.Origin.X = point.X + box.Width; 392 | new_container2.Origin.Y = point.Y; 393 | new_container2.Origin.Z = point.Z; 394 | new_container2.Still_to_Open = true; 395 | Split_Container_open_list[Container_Key].Add(new_container2); 396 | } 397 | 398 | new_container3.Length = old_container.Length; 399 | new_container3.Width = old_container.Width; 400 | new_container3.Height = old_container.Height - box.Length; 401 | 402 | if (new_container3.Length > 0 && new_container3.Width > 0 && new_container3.Height > 0) 403 | { 404 | new_container3.Origin.X = point.X; 405 | new_container3.Origin.Y = point.Y; 406 | new_container3.Origin.Z = point.Z + box.Length; 407 | new_container3.Still_to_Open = true; 408 | Split_Container_open_list[Container_Key].Add(new_container3); 409 | } 410 | Split_Container_open_list[Container_Key].RemoveAt(index); 411 | } 412 | } 413 | 414 | Boolean box_intersect_container(Box b, Int32 box_length, Int32 box_width, Int32 box_height, Containers c) 415 | { 416 | if (b.Origin.X >= c.Origin.X + c.Length || b.Origin.X + box_length <= c.Origin.X || 417 | b.Origin.Y >= c.Origin.Y + c.Width || b.Origin.Y + box_width <= c.Origin.Y || 418 | b.Origin.Z >= c.Origin.Z + c.Height || b.Origin.Z + box_height <= c.Origin.Z) 419 | return false; 420 | else 421 | return true; 422 | } 423 | /// this function checks if the container has enough weight limit remaning 424 | /// It is the key of the Container in which the box has to be placed, 425 | /// I used this key for accessing the container from dictionary data-structure. 426 | /// Box which is to be contained in the given contianer. 427 | /// Returns true if weight of box is less than weight of container else false. 428 | Boolean has_free_weight(String Container_key, Box box) 429 | { 430 | List temp_list = Container_Containing_Boxes[Container_key]; 431 | Double weight = box.Weight; 432 | 433 | foreach (Box ibox in temp_list) weight += ibox.Weight; 434 | if (weight >= ContainerList[Container_key].MaxWeight) return false; 435 | else return true; 436 | } 437 | 438 | /// 439 | /// This Function checks if the given box can be contained in the container or not. 440 | /// Flow: 441 | /// It 1st checks for all the sub splitted containers of the given container individually that whether 442 | /// they could occumulate the box or not. 443 | /// Foreach container, it checks all the orientations X, Y or Z (if the rotations are allowed) for each box. 444 | /// 445 | /// 446 | /// It is the key of the Container in which the box has to be placed,I used this key for accessing the container from dictionary data-structure. 447 | /// Box which is to be contained in the given contianer. 448 | /// This parametre will help in splitting the Containers, There are total of 6 cases. 449 | /// Exact index at which the box will be placed in the given container. 450 | /// Out pramatre showing if the box was rotated along X co-ordinate 451 | /// Out pramatre showing if the box was rotated along Y co-ordinate 452 | /// Out pramatre showing if the box was rotated along Z co-ordinate 453 | /// It returns the Origin of the container in which the box has to be placed. (If available)If not available, returns a point (-infinity, -infinity, -infinity) 454 | Point3D has_free_space(String Container_Key, Box box, out Int32? Orientation_case, out Int32? container_index, out Boolean? RotationX, out Boolean? RotationY, out Boolean? RotationZ) 455 | { 456 | //could be placed in only touching the bottom 457 | if (box.BottomOnly) 458 | { 459 | Int32 index = 0; 460 | foreach (Containers container in Split_Container_open_list[Container_Key]) 461 | { 462 | //as the object is bottom only so it should be placed on xy-plane only 463 | if (container.Origin.Z == 0.0F && container.volume() >= box.Volume()) //z-axis value should be zero. 464 | { 465 | //no rotation 466 | if (container.Height >= box.Height && container.Length >= box.Length && container.Width >= box.Width) 467 | { 468 | RotationX = false; 469 | RotationY = false; 470 | RotationZ = false; 471 | container_index = index; 472 | Orientation_case = 0; 473 | return container.Origin; 474 | } 475 | 476 | //if X rotation is allowed. 477 | else if (box.AllowedRotationsX && container.Width >= box.Height && container.Height >= box.Width && container.Length >= box.Length) 478 | { 479 | RotationX = true; 480 | RotationY = false; 481 | RotationZ = false; 482 | container_index = index; 483 | Orientation_case = 1; 484 | return container.Origin; 485 | } 486 | 487 | // if Y rotation is allowed 488 | else if (box.AllowedRotationsY && container.Width >= box.Width && container.Length >= box.Height && container.Height >= box.Length) 489 | { 490 | RotationX = false; 491 | RotationY = true; 492 | RotationZ = false; 493 | container_index = index; 494 | Orientation_case = 2; 495 | return container.Origin; 496 | } 497 | 498 | //if Z rotation is allowed 499 | else if (box.AllowedRotationsZ && container.Height >= box.Height && container.Width >= box.Length && container.Length >= box.Width) 500 | { 501 | RotationX = false; 502 | RotationY = false; 503 | RotationZ = true; 504 | container_index = index; 505 | Orientation_case = 3; 506 | return container.Origin; 507 | } 508 | //along yx-rotation 509 | else if (box.AllowedRotationsY && box.AllowedRotationsX) 510 | { 511 | if (container.Width >= box.Height && container.Length >= box.Width && container.Height >= box.Length) 512 | { 513 | RotationX = true; 514 | RotationY = true; 515 | RotationZ = false; 516 | container_index = index; 517 | Orientation_case = 4; 518 | return container.Origin; 519 | } 520 | else if (container.Width >= box.Length && container.Length >= box.Height && container.Height >= box.Width) 521 | { 522 | RotationX = true; 523 | RotationY = true; 524 | RotationZ = false; 525 | container_index = index; 526 | Orientation_case = 5; 527 | return container.Origin; 528 | } 529 | } 530 | 531 | //along xz-rotation 532 | else if (box.AllowedRotationsX && box.AllowedRotationsZ ) 533 | { 534 | if (container.Width >= box.Height && container.Length >= box.Width && container.Height >= box.Length) 535 | { 536 | RotationX = true; 537 | RotationY = false; 538 | RotationZ = true; 539 | container_index = index; 540 | Orientation_case = 4; 541 | return container.Origin; 542 | } 543 | else if (container.Width >= box.Length && container.Length >= box.Height && container.Height >= box.Width) 544 | { 545 | RotationX = true; 546 | RotationY = false; 547 | RotationZ = true; 548 | container_index = index; 549 | Orientation_case = 5; 550 | return container.Origin; 551 | } 552 | } 553 | 554 | //along zy-rotation 555 | else if (box.AllowedRotationsZ && box.AllowedRotationsY) 556 | { 557 | if (container.Width >= box.Height && container.Length >= box.Width && container.Height >= box.Length) 558 | { 559 | RotationX = false; 560 | RotationY = true; 561 | RotationZ = true; 562 | container_index = index; 563 | Orientation_case = 4; 564 | return container.Origin; 565 | } 566 | else if (container.Width >= box.Length && container.Length >= box.Height && container.Height >= box.Width) 567 | { 568 | RotationX = false; 569 | RotationY = true; 570 | RotationZ = true; 571 | container_index = index; 572 | Orientation_case = 5; 573 | return container.Origin; 574 | } 575 | } 576 | } 577 | ++index; 578 | } 579 | } 580 | else if (box.TopOnly) 581 | { 582 | Int32 index = 0; 583 | foreach (Containers container in Split_Container_open_list[Container_Key]) 584 | { 585 | //as the object is top only only so it should be placed on xy-plane + only 586 | if (container.Origin.Z + container.Height == ContainerList[Container_Key].Height && container.volume() >= box.Volume()) 587 | { 588 | //no rotation 589 | if (container.Height >= box.Height && container.Length >= box.Length && container.Width >= box.Width) 590 | { 591 | RotationX = false; 592 | RotationY = false; 593 | RotationZ = false; 594 | container_index = index; 595 | Orientation_case = 0; 596 | return container.Origin; 597 | } 598 | 599 | //if X rotation is allowed. 600 | else if (box.AllowedRotationsX && container.Width >= box.Height && container.Height >= box.Width && container.Length >= box.Length) 601 | { 602 | RotationX = true; 603 | RotationY = false; 604 | RotationZ = false; 605 | container_index = index; 606 | Orientation_case = 1; 607 | return container.Origin; 608 | } 609 | 610 | // if Y rotation is allowed 611 | else if (box.AllowedRotationsY && container.Width >= box.Width && container.Length >= box.Height && container.Height >= box.Length) 612 | { 613 | RotationX = false; 614 | RotationY = true; 615 | RotationZ = false; 616 | container_index = index; 617 | Orientation_case = 2; 618 | return container.Origin; 619 | } 620 | 621 | //if Z rotation is allowed 622 | else if (box.AllowedRotationsZ && container.Height >= box.Height && container.Width >= box.Length && container.Length >= box.Width) 623 | { 624 | RotationX = false; 625 | RotationY = false; 626 | RotationZ = true; 627 | container_index = index; 628 | Orientation_case = 3; 629 | return container.Origin; 630 | } 631 | //along yx-rotation 632 | else if (box.AllowedRotationsY && box.AllowedRotationsX) 633 | { 634 | if (container.Width >= box.Height && container.Length >= box.Width && container.Height >= box.Length) 635 | { 636 | RotationX = true; 637 | RotationY = true; 638 | RotationZ = false; 639 | container_index = index; 640 | Orientation_case = 4; 641 | return container.Origin; 642 | } 643 | else if (container.Width >= box.Length && container.Length >= box.Height && container.Height >= box.Width) 644 | { 645 | RotationX = true; 646 | RotationY = true; 647 | RotationZ = false; 648 | container_index = index; 649 | Orientation_case = 5; 650 | return container.Origin; 651 | } 652 | } 653 | 654 | //along xz-rotation 655 | else if (box.AllowedRotationsX && box.AllowedRotationsZ) 656 | { 657 | if (container.Width >= box.Height && container.Length >= box.Width && container.Height >= box.Length) 658 | { 659 | RotationX = true; 660 | RotationY = false; 661 | RotationZ = true; 662 | container_index = index; 663 | Orientation_case = 4; 664 | return container.Origin; 665 | } 666 | else if (container.Width >= box.Length && container.Length >= box.Height && container.Height >= box.Width) 667 | { 668 | RotationX = true; 669 | RotationY = false; 670 | RotationZ = true; 671 | container_index = index; 672 | Orientation_case = 5; 673 | return container.Origin; 674 | } 675 | } 676 | 677 | //along zy-rotation 678 | else if (box.AllowedRotationsZ && box.AllowedRotationsY) 679 | { 680 | if (container.Width >= box.Height && container.Length >= box.Width && container.Height >= box.Length) 681 | { 682 | RotationX = false; 683 | RotationY = true; 684 | RotationZ = true; 685 | container_index = index; 686 | Orientation_case = 4; 687 | return container.Origin; 688 | } 689 | else if (container.Width >= box.Length && container.Length >= box.Height && container.Height >= box.Width) 690 | { 691 | RotationX = false; 692 | RotationY = true; 693 | RotationZ = true; 694 | container_index = index; 695 | Orientation_case = 5; 696 | return container.Origin; 697 | } 698 | } 699 | } 700 | ++index; 701 | } 702 | } 703 | //place the box whereever it is fissible 704 | else 705 | { 706 | Int32 index = 0; 707 | foreach (Containers container in Split_Container_open_list[Container_Key]) 708 | { 709 | if (container.volume() >= box.Volume()) 710 | { 711 | //no rotation 712 | if (container.Height >= box.Height && container.Length >= box.Length && container.Width >= box.Width) 713 | { 714 | RotationX = false; 715 | RotationY = false; 716 | RotationZ = false; 717 | container_index = index; 718 | Orientation_case = 0; 719 | return container.Origin; 720 | } 721 | 722 | //if X rotation is allowed. 723 | else if (box.AllowedRotationsX && container.Width >= box.Height && container.Height >= box.Width && container.Length >= box.Length) 724 | { 725 | RotationX = true; 726 | RotationY = false; 727 | RotationZ = false; 728 | container_index = index; 729 | Orientation_case = 1; 730 | return container.Origin; 731 | } 732 | 733 | // if Y rotation is allowed 734 | else if (box.AllowedRotationsY && container.Width >= box.Width && container.Length >= box.Height && container.Height >= box.Length) 735 | { 736 | RotationX = false; 737 | RotationY = true; 738 | RotationZ = false; 739 | container_index = index; 740 | Orientation_case = 2; 741 | return container.Origin; 742 | } 743 | 744 | //if Z rotation is allowed 745 | else if (box.AllowedRotationsZ && container.Height >= box.Height && container.Width >= box.Length && container.Length >= box.Width) 746 | { 747 | RotationX = false; 748 | RotationY = false; 749 | RotationZ = true; 750 | container_index = index; 751 | Orientation_case = 3; 752 | return container.Origin; 753 | } 754 | //along yx-rotation 755 | else if (box.AllowedRotationsY && box.AllowedRotationsX) 756 | { 757 | if (container.Width >= box.Height && container.Length >= box.Width && container.Height >= box.Length) 758 | { 759 | RotationX = true; 760 | RotationY = true; 761 | RotationZ = false; 762 | container_index = index; 763 | Orientation_case = 4; 764 | return container.Origin; 765 | } 766 | else if (container.Width >= box.Length && container.Length >= box.Height && container.Height >= box.Width) 767 | { 768 | RotationX = true; 769 | RotationY = true; 770 | RotationZ = false; 771 | container_index = index; 772 | Orientation_case = 5; 773 | return container.Origin; 774 | } 775 | } 776 | 777 | //along xz-rotation 778 | else if (box.AllowedRotationsX && box.AllowedRotationsZ) 779 | { 780 | if (container.Width >= box.Height && container.Length >= box.Width && container.Height >= box.Length) 781 | { 782 | RotationX = true; 783 | RotationY = false; 784 | RotationZ = true; 785 | container_index = index; 786 | Orientation_case = 4; 787 | return container.Origin; 788 | } 789 | else if (container.Width >= box.Length && container.Length >= box.Height && container.Height >= box.Width) 790 | { 791 | RotationX = true; 792 | RotationY = false; 793 | RotationZ = true; 794 | container_index = index; 795 | Orientation_case = 5; 796 | return container.Origin; 797 | } 798 | } 799 | 800 | //along zy-rotation 801 | else if (box.AllowedRotationsZ && box.AllowedRotationsY) 802 | { 803 | if (container.Width >= box.Height && container.Length >= box.Width && container.Height >= box.Length) 804 | { 805 | RotationX = false; 806 | RotationY = true; 807 | RotationZ = true; 808 | container_index = index; 809 | Orientation_case = 4; 810 | return container.Origin; 811 | } 812 | else if (container.Width >= box.Length && container.Length >= box.Height && container.Height >= box.Width) 813 | { 814 | RotationX = false; 815 | RotationY = true; 816 | RotationZ = true; 817 | container_index = index; 818 | Orientation_case = 5; 819 | return container.Origin; 820 | } 821 | } 822 | } 823 | ++index; 824 | } 825 | } 826 | 827 | // if still not available. 828 | Point3D invalid_point = new Point3D(); 829 | invalid_point.X = float.NegativeInfinity; 830 | invalid_point.Y = float.NegativeInfinity; 831 | invalid_point.Z = float.NegativeInfinity; 832 | RotationX = null; 833 | RotationY = null; 834 | RotationZ = null; 835 | container_index = null; 836 | Orientation_case = null; 837 | return invalid_point; 838 | } 839 | 840 | /// This function rearrange the boxes in descending order of there volumes. 841 | void re_arranging_boxes() 842 | { 843 | sorted_box_List = BoxList.ToList(); 844 | sorted_box_List.Sort((firstPair, nextPair) => ( firstPair.Value.Width * firstPair.Value.Height * firstPair.Value.Length).CompareTo (nextPair.Value.Length * nextPair.Value.Width * nextPair.Value.Height)); 845 | sorted_box_List.Reverse(); 846 | } 847 | } 848 | } -------------------------------------------------------------------------------- /3D-Bin-Packing/Form1.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | 123 | 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 989 | 990 | 991 | 992 | 17, 17 993 | 994 | --------------------------------------------------------------------------------