Skip to content

R-Besson/n-dimensional-strip-packing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

packer-3d

Example of what you can make. Rendered using the Bevy data-driven game engine.
Example of what you can expect

Quickstart

Run this in your rust project to add packer-3d to your dependencies.

cargo add packer-3d

Example

After adding the dependency, you can test it with this example:

use packer_3d::{box3d::Box3D, sorting::Sorting, vector3d::Vector3D, PackerInstance};

fn main() {
	let my_boxes = vec![
		Box3D::from_xyz_whl(0, 0, 0, 100, 200, 300, 1, 0),
		Box3D::from_xyz_whl(0, 0, 0, 100, 200, 300, 2, 0),
		Box3D::from_xyz_whl(0, 0, 0, 100, 200, 300, 3, 0),
	];

	let mut my_instance = PackerInstance::new(
		my_boxes.clone(),            // Our boxes
		Vector3D::new(500, 0, 500),  // Our container size
		true,                        // No rotations
		(false, true, false),        // Minimize height only
		Sorting::descending_volume,  // Our initial sorting heuristic
	);

	// for _ in 0..3 {
	//     match my_instance.pack_next() {
	//         Err(error) => println!("Error: {}", error),
	//         Ok(()) => {}
	//     }
	// }

	match my_instance.pack_all() {
		Err(errors) => println!("Errors: {:#?}", errors),
		Ok(()) => {}
	}

	println!("{:#?}", my_instance.boxes());
}

Which should output:

[
	Box3D {
		position: Vector3D {
			x: 0,
			y: 0,
			z: 0,
		},
		size: Vector3D {
			x: 300,
			y: 100,
			z: 200,
		},
		id: 1,
		origin: 0,
	},
	Box3D {
		position: Vector3D {
			x: 300,
			y: 0,
			z: 0,
		},
		size: Vector3D {
			x: 200,
			y: 100,
			z: 300,
		},
		id: 2,
		origin: 0,
	},
	Box3D {
		position: Vector3D {
			x: 0,
			y: 0,
			z: 200,
		},
		size: Vector3D {
			x: 300,
			y: 100,
			z: 200,
		},
		id: 3,
		origin: 0,
	},
]

About

Packing algorithm for 3D boxes which optimizes for any combination of final container dimensions. Includes N-dimensional Constructive Solid Geometry (CSG) subtraction generator for Rust allowing the generalization of the main algorithm to N dimensions. O(N^3) time, O(N) space

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors