Skip to content

qianqing-wanggg/StonePacking-3D

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dense packing for stone masonry wall generation

gallery

Wang, Q., dos Santos, K. R., & Beyer, K. Geometric planning for masonry wall construction with natural stones using discrete convolution. Engineering Structures

@article{Wang_2025, 
title={Geometric planning for masonry wall construction with natural stones using discrete convolution}, volume={329}, 
ISSN={0141-0296}, 
url={http://dx.doi.org/10.1016/j.engstruct.2025.119695}, 
DOI={10.1016/j.engstruct.2025.119695}, 
journal={Engineering Structures}, 
publisher={Elsevier BV}, 
author={Wang, Qianqing and dos Santos, Ketson R.M. and Beyer, Katrin}, 
year={2025}, 
month=apr, 
pages={119695} }

Important Tips

👉 A 2D version of the generator is able to generate dense and stable stacked stones given pixelized shapes 2D stacking.

🤖 The generator has been used as geometric planner for a real wall construction work using robots robot wall.

💡 The convention of the packing space is that the X direction is the Height direction.

💡 Make sure the scale of the input stone meshes matches the order of magnitude of the wall’s dimensions.

Dataset

Some pre-generated stone walls can be found here 👉 zenodo.

Set up Environment

Tested on Ubuntu 20.04.6 LTS.

Step 1: Build Virtual Environment

python -m venv ./venv/
source ./venv/bin/activate

Step 2: Install dependencies

pip install -r requirements.txt

Usage

Examples

Packing

python main.py --dataID 19 --stoneRep available_stones --stoneIni stone_

Packing followed by prerotation

python prerotate_stones_flat.py --dataID 19
python main.py --dataID 19 --stoneRep available_stones_rot --stoneIni S

Packing considering multiple poses per stone

python prerotate_stones_flat.py --dataID 19
python main.py --dataID 19 --stoneRep available_stones_rot --stoneIni S --nPose 4

Input and output

The input (stone meshes) are triangular suface meshes in .obj format stored in ./data/example*/[stoneRep]/.

The output files are :

  • stone with id m placed in iteration n in its resulting position represented in triangular mesh: wall_1_iteration[n]_valid_refined_[m]_best_pose_random_sequence.obj

  • stone with id m placed in iteration n in its resulting position represented in voxel: wall_1_iteration[n]_valid_voxel_[m]_best_pose_random_sequence.ply

  • Failured placement at iteration n will generate stone meshes in their initial position: wall_1_iteration[n]_invalid_stone_[m]_best_pose_random_sequence.ply

Features

  • wallDimX/Y/Z

Switching the size of the bounding box of the packing space for generating stone walls of different sizes.

  • wallMaxX

Using a mask as top boundary of the packing space such that stones cannot be placed higher than this limit. This is useful if you want to enforce a layer-wise packing.

  • nPose

Number of candidate poses to evaluate per stone. Candidate poses are generated by uniformly rotating the stone around the x-axis from 0 to 360 degrees.

  • seq

The sequence of stones provided to the algorithm can be random or sorted by volume from largest to smallest.

Preprocessing tools

The script prerotate_stones_flat.py rotates stone meshes such that the shortest dimension of the stone is aligned with the X direction of the packing space, the other two main dimensions of the stone are aligned with the Y and Z directions of the packing space.

Visualization

Triangular meshes can be visualized using Meshlab.

Command Line Switches

./main.py [OPTIONS]
OPTIONS:
--dataID INT                    The ID of the dataset in ../data/example[dataID] 
--wallDimX INT                  The dimension of the wall in X direction (default: 70)
--wallDimY INT                  The dimension of the wall in Y direction (default: 70)
--wallDimZ INT                  The dimension of the wall in Z direction (default: 40)
--wallMaxX INT                  The maximum packing height in X direction (default: None)
--stoneRep TEXT                 The folder name of the stone representation 
                                (default:available_stones_rot)
--stoneIni TEXT                 The prefix of the stone file names (default: S)
--nPose INI                     Number of candidate poses to evaluate per stone (default: 1)
--seq TEXT:random/volume        The sequence of stone placement: random or volume (default: random)

Contact

For questions and feedback, please contact:

Qianqing Wang at Earthquake Engineering and Structural Dynamics (EESD)

📧 Email: [qianqing.wang@epfl.ch]

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages