A simple csg modeler with parameterized assemblies
0

Configure Feed

Select the types of activity you want to include in your feed.

Rust 89.8%
Python 4.4%
Shell 3.2%
Just 0.2%
Dockerfile 0.2%
WGSL 0.2%
HTML 0.1%
Other 1.9%
122 2 1

Clone this repository

https://tangled.org/vibelet.tngl.sh/modeler https://tangled.org/did:plc:qjd5ruuvtadge2p3htx7z57x
git@tangled.org:vibelet.tngl.sh/modeler git@tangled.org:did:plc:qjd5ruuvtadge2p3htx7z57x

For self-hosted knots, clone URLs may differ based on your setup.



README.md

CSG Modeler#

A 3D constructive solid geometry (CSG) modeling application built with Rust.

CSG Modeler lets you create complex 3D shapes by combining simple primitives (cuboids, spheres, cylinders, toruses, cones, prisms) using boolean operations (union, intersection, difference). It features a real-time 3D viewport, interactive gizmo controls, face extrusion, edge chamfering/filleting, and parametric assemblies.

Built with egui for the GUI, wgpu for GPU rendering, and the Manifold library for CSG boolean evaluation.

I often found myself enjoying playing around with openscad, but didn't particularly enjoy the process of debugging the language, so this is a very poor imitatation with a similar facility for boolean mesh operations.

Screenshots#

New document Sphere primitive
new document sphere
Sphere boolean demo Assembly demo
sphere boolean assembly

Features#

  • CSG primitives: cuboid, sphere, cylinder, torus, cone, polygon prism
  • Boolean operations: union, intersection, difference
  • Interactive gizmos: translate, rotate, scale, and shape-edit
  • Face extrusion: select and extrude faces
  • Edge blending: chamfer and fillet edges
  • Parametric assemblies: group nodes with parameter bindings
  • Dark/light theme: toggle from the Help menu
  • Undo/redo: snapshot-based, depth ~50
  • Native + WASM: runs on desktop and in the browser

Building#

Prerequisites#

  • Rust toolchain (nightly for edition 2024 support)
  • For WASM builds: LLVM 20+

Native#

cargo run --release

WASM#

rustup target add wasm32-unknown-unknown
cargo install trunk
trunk serve --release --no-default-features --features wasm

WASM (standalone)#

cargo build --target wasm32-unknown-unknown --release --no-default-features --features wasm
wasm-bindgen target/wasm32-unknown-unknown/release/modeler_app.wasm --out-dir dist --out-name modeler_app --target web

Controls#

Key Action
B / S / C / T / K / P Add primitive (Box/Sphere/Cylinder/Torus/Cone/Prism)
U / I / D Union / Intersect / Difference
1-4 Gizmo mode (Translate/Rotate/Scale/Shape-edit)
W Toggle world/local space
F Toggle face select mode
Enter (face/edge select) Commit extrusion / edge blend
Esc Cancel / deselect all
Delete / Backspace Delete selected node
Ctrl+Z / Ctrl+Shift+Z Undo / Redo
Ctrl+S / Ctrl+O Save / Load
Ctrl+C/X/V Copy / Cut / Paste
G Toggle multi-select mode
Shift+click Range select (visible order)
Ctrl+click Toggle item in selection
Shift+F Frame selection

License#

Apache 2.0 — see LICENSE.