This folder provides a snapshot of the code with the paper "InverseCSG: automatic conversion of 3D models to CSG trees" when it was submitted to Siggraph Asia 2018.
The current repository is modified from the original code snapshot recovered from the supplementary material hosted on the ACM digital library. Any changes in this repo are those of the authors of this forked repo and do not necessarily reflect the views of the original authors.
Linux
(tested onUbuntu 14.04
andUbuntu 16.04
)Windows Linux Subsystem
(tested onUbuntu 16.04 LTS
)
C++
toolchain:sudo apt-get install build-essential autoconf libtool flex bison mercurial zsh cmake
.Python 3.7+
(required by the latest sklearn)- using a python distribution within a conda environment is highly recommended. You can follow this tutorial to install miniconda on an ubuntu OS instance. Then, create and activate a conda environment with python 3.7 by:
conda create -n inv_csg_env python=3.7 conda activate inv_csg_env python3 --version # you should see "Python 3.7.7"
- The latest
Sketch
. Java >= 1.8
(needed bySketch
).maven >= 2.2.1
(needed bySketch
).
The easiest way is to navigate to the root folder and run:
python3 install.py -d <build_folder>
# e.g. python3 install.py -d ./build
where build_folder
can be any folder that you have write access to. We recommend you use a build_folder
outside the root folder. This Python script will compile the source code in cpp/
and attempt to install any missing dependencies, which might need your sudo
privilege.
You can see more options by python3 install.py -h
.
-
Run
sudo apt-get install build-essential autoconf libtool flex bison mercurial zsh cmake
-
Navigate to your
build_folder
, create acpp
subfolder, and compile theC++
code:cd <build_folder> mkdir cpp cd cpp cmake <root_folder>/cpp make
-
Follow the instructions in sketch-backend and sketch-frontend to install
Sketch
. More info can be found at Prof. Armando Solar-Lezama's webpage.
If the installation is successful, you can navigate to the root folder and try running:
python3 run_tests.py <build_folder> one_cube
This solves a simple cube. The whole process should finish within a minute. You can replace one_cube
with other example names rerun the command. Please see run_tests.py
for all example names.
If you want to see some quick results, you can try:
python3 run_tests.py <build_folder> ex_011
python3 run_tests.py <build_folder> ex_067
python3 run_tests.py <build_folder> ex_096
python3 run_tests.py <build_folder> ex_144
python3 run_tests.py <build_folder> ex_145
The dataset of our 50 CAD models can be found in the example
folder.
The solutions to all of our examples are in the solution
folder. Each subfolder has two SCAD files: sketch.scad
is the output of our method before simplification, and sketch_final.scad
is the final resuls after simplification.
When you use OpenSCAD to open and render these solutions, you will notice there are a lot of degenerated planes. These planes come from a CSG intersection or difference operation that applies to two solids with same dimensions. To illustrate this point, consider subtracting a cylinder from the center of a cube that happens to have the same height, then the top and bottom circles of the cylinder can be either considered inside or outside the solution and the behavior is therefore undefined. As a result, these artifacts do not mean our solutions have an volumetric error.
If you find this work useful, please cite:
@article{du2018inversecsg,
title={Inversecsg: Automatic conversion of 3d models to csg trees},
author={Du, Tao and Inala, Jeevana Priya and Pu, Yewen and Spielberg, Andrew and Schulz, Adriana and Rus, Daniela and Solar-Lezama, Armando and Matusik, Wojciech},
journal={ACM Transactions on Graphics (TOG)},
volume={37},
number={6},
pages={1--16},
year={2018},
publisher={ACM New York, NY, USA}
}