https://github.com/openscad/openscad-wasm
Webassembly port of OpenSCAD
https://github.com/openscad/openscad-wasm
Last synced: about 2 months ago
JSON representation
Webassembly port of OpenSCAD
- Host: GitHub
- URL: https://github.com/openscad/openscad-wasm
- Owner: openscad
- License: gpl-2.0
- Created: 2022-02-17T02:51:18.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2025-01-06T18:10:40.000Z (5 months ago)
- Last Synced: 2025-04-04T00:03:16.658Z (2 months ago)
- Language: TypeScript
- Homepage:
- Size: 155 KB
- Stars: 251
- Watchers: 13
- Forks: 29
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: COPYING
Awesome Lists containing this project
README
# OpenSCAD WASM Port
A full port of OpenSCAD to WASM.
This project cross compiles all of the project dependencies and created a headless OpenSCAD WASM module.
## Setup
Make sure that you have the following installed:
- Make
- Docker
- DenoTo build the project:
```
make all
```Or for specific steps:
```
# Generate the library files
make libs# Build the project
make build# Build the project in debug mode
make ENV=Debug build
```## Usage
There is an example project in the example folder. Run it using:
```
cd example
deno run --allow-net --allow-read server.ts# or
make example
```There are also automated tests that can be run using:
```
cd tests
deno test --allow-read --allow-write# or
make test
```## API
The project is an ES6 module. Simply import the module:
```ts
import OpenSCAD from "./openscad.js";
// OPTIONAL: add fonts to the FS
import { addFonts } from "./openscad.fonts.js";// OPTIONAL: add MCAD library to the FS
import { addMCAD } from "./openscad.mcad.js";const filename = "cube.stl";
// Instantiate the application
const instance = await OpenSCAD({noInitialRun: true});// Write a file to the filesystem
instance.FS.writeFile("/input.scad", `cube(10);`); // OpenSCAD script to generate a 10mm cube// Run like a command-line program with arguments
instance.callMain(["/input.scad", "--enable=manifold", "-o", filename]); // manifold is faster at rendering// Read the output 3D-model into a JS byte-array
const output = instance.FS.readFile("/"+filename);// Generate a link to output 3D-model and download the output STL file
const link = document.createElement("a");
link.href = URL.createObjectURL(
new Blob([output], { type: "application/octet-stream" }), null);
link.download = filename;
document.body.append(link);
link.click();
link.remove();```
For more information on reading and writing files check out the [Emscripten File System API](https://emscripten.org/docs/api_reference/Filesystem-API.html).