Home

Awesome

OCC-CSG

Build Status Build status

Simple but powerful CSG tool based on the OpenCascade CAD Kernel

This tool provides a simple command-line interface for applying boolean operations and transformations to 3D objects specified in either BREP/STEP or STL format. It contains a convenient STL importer for converting mesh based geometries to an eqivalent BREP representation (might cause performance issues for large STL files). Geometries can be exported as STL files as well.

There is a Java library VCSG and the corresponding VRL-Studio plugin for using OCC-CSG from Java and VRL-Studio.

Installation

To get started quickly, download a binary release (available for Linux, macOS and Windows on x64). On macOS occ-csg can be installed via Homebrew:

brew install miho/tap/occ-csg

Sample

These three lines

occ-csg --create box -5,-5,-5,5,5,5 box.stp
occ-csg --create sphere 0,0,0,6.5 sphere.stp
occ-csg --csg difference box.stp sphere.stp cut.stp

produce this hollow cube:

<img src="resources/img/sample.jpg" width="400px">

To convert this resolution independent geometry to a triangulated STL file use:

occ-csg --convert cut.stp cut.stl 0.1

The number at the end specifies the tolerance for the STL triangulation. Smaller values lead to better approximations. If the value is ommitted a default value (currently 0.5) will be used. This is how the resulting STL might look like:

<img src="resources/img/sample-stl.jpg" width="400px">

CLI

To get an overview over the CLI type ./occ-csg --help:

-------------------------------------------------------------
----        CSG Tool based on the OCCT CAD Kernel        ----
----                    Version 0.9.9                    ----
---- 2018-2019 by Michael Hoffer (info@michaelhoffer.de) ----
----                   www.mihosoft.eu                   ----
-------------------------------------------------------------

USAGE: 

Help & Info:

 occ-csg --help
 occ-csg --version

Creating Primitives:

 occ-csg --create box x1,y1,z1,x2,y2,z2                            box.stp
 occ-csg --create sphere x1,y1,z1,r                                sphere.stp
 occ-csg --create cyl x1,y1,z1,r,h                                 cyl.stp
 occ-csg --create cone x1,y1,z1,r1,r2,h                            cone.stp
 occ-csg --create helix r,profile_r,pitch,num_revolutions          helix.stp
 occ-csg --create helix r,profile_face.stp,pitch,num_revolutions   helix.stp
 occ-csg --create polygons x1,y1,z1,x2,y2,z2,... p1v1,p1v2,p1v3,...:p2v1,p2v2,p2v3,... polygons.stp
 occ-csg --create 2d:circle x,y,r                                  2dcircle.stp
 occ-csg --create 2d:polygon x1,y1,x2,y2,...                       2dpolygon.stp
 occ-csg --create 2d:rect x1,y1,x2,y2                              2drectangle.stp
 occ-csg --create 2d:round-rect x,y,width,height,corner_r          2drectangle.stp
 occ-csg --create extrusion:polygon ex,ey,ez,x1,y1,z1,x2,y2,z2,... extrude.stp
 occ-csg --create extrusion:file ex,ey,ez                          2dpath.stp extrude.stp

Format Conversion:

 occ-csg --convert file1.stl file1.stp
 occ-csg --convert file1.stp file1.stl 0.1

Geometric Transformation:

 occ-csg --transform translate x,y,z                               file1.stp file1-translated.stp
 occ-csg --transform scale     sx,sy,sz                            file1.stp file1-scaled.stp
 occ-csg --transform rot       dir_x,dir_y,dir_z,angle file1.stp   file1-rotated.stp
 occ-csg --transform matrix    t1,t2,t3,...,t12 file1.stp          file1-transformed.stp

Boolean Operators, Constructive Solid Geometry (CSG):

 occ-csg --csg union file1.stp file2.stp file-out.stp
 occ-csg --csg difference file1.stp file2.stp file-out.stp
 occ-csg --csg intersection file1.stp file2.stp file-out.stp

Shape Editing:

 occ-csg --edit split-shape shape.stp stp
 occ-csg --edit round-edges radius shape.stp shape-rounded.stp
 occ-csg --edit chamfer-edges radius shape.stp shape-chamfered.stp


Shape Info:

 occ-csg --info bounds file.stp      
 occ-csg --info bounds file.stp      bounds.stp
 occ-csg --info volume file.stp tol

How to build OCC-CSG

Requirements

Hints for building OCC:

For using occ-csg as independent command-line tool it is recommended to compile OCC as static library. This will increase the occ-csg file size but ensures the tool can be used without carrying too many additional libraries around. occ-csg comes with the freetype headers to simplify the build process on Windows. The recommended settings are:

Dependencies required by OCC:

Bash (Linux/macOS/Cygwin/other Unix-like Shell)

cd /path/to/project
mkdir build && cd build
cmake .. -DOpenCASCADE_DIR=/path/to/occ
make -j4

On Linux, it might be necessary to install fontconfig-devel to successfully link the executable. On Ubuntu the precise package name is libfontconfig-dev.

Windows (CMD)

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\vsdevcmd" -arch=x64
cd \path\to\project
mkdir build
cd build
cmake .. -DOpenCASCADE_DIR=\path\to\occ
MSBuild .\occ-csg-prj.sln  /property:Configuration=Release /property:Platform=x64

For building large projects on Windows it might be preferable to use the x64 host compiler instead of the x86 compiler. Note that both compilers are able to produce x64 binaries. But the x64 compiler can use more memory during compilation. To really prevent that CMake picks the 64bit x86 host compiler just force cmake to use the x64 host compiler via

-DCMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE=X64 -G "Visual Studio 15 2017 Win64"