maxmorozoff / openscad-wasm

Webassembly port of OpenSCAD

Home Page:https://ochafik.com/openscad

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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
  • Deno

To 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:

import OpenSCAD from "./openscad.js";
// OPTIONAL: add fonts to the FS
import { addFonts } from "./openscad.fonts.js";

// Instantiate the application
const instance = await OpenSCAD({ noInitialRun: true });

// OPTIONAL: add fonts to the FS
addFonts(instance);

// Write a file to the filesystem
instance.FS.writeFile("/input.scad", `cube(10);`);

// Run OpenSCAD with the arguments "/input.scad -o cube.stl"
instance.callMain(["/input.scad", "-o", "cube.stl"]);

// Read the data from cube.stl
const output = instance.FS.readFile("/cube.stl");

For more information on reading and writing files check out the Emscripten File System API.

Project Status

  • module builds
  • module runs
  • library created
  • tests exist

Future work

  • Fix NULLGL in OpenSCAD 2021
  • [-] Merge WASM patch into Boost.Filesystem. Patch was rejected boostorg/filesystem#230

Known Issues

  • text does not render See the test setup in ./tests/text for an example of how to configure fonts in the FS.
  • CGAL error on intersection between cube and circle (csg test)

About

Webassembly port of OpenSCAD

https://ochafik.com/openscad

License:GNU General Public License v2.0


Languages

Language:TypeScript 36.8%Language:Makefile 27.9%Language:Dockerfile 12.2%Language:JavaScript 10.9%Language:OpenSCAD 6.4%Language:HTML 5.7%