Node wrapper for JSC3D
JavaScript
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
assets
bin
examples
.gitignore
LICENSE
README.md
index.js
package.json

README.md

node-jsc3d

Node wrapper for JSC3D, a cool little (unmaintained?) 3D model renderer originally written for the browser.

Supports in-memory, software rendering of certain 3D Models with a simple interface, great for generating previews of STL or OBJ files.

Here's a blog post about how I ported it.

Usage

Install locally with:

npm install --save jsc3d

NOTE: It (presently) relies on node-canvas for PNG rendering and canvas implementation. This requires Cairo and Pango to be installed on the host system. Read more here.

As library

Using render helper method

Provides a few helper methods, notably render, for more easily interacting with JSC3D. See bin/jsc3d.js for full example of using render.

const jsc3d = require('jsc3d');
const canvas = jsc3d.makeCairoCanvas(500, 500);
jsc3d.render({canvas}, () => {
    const buf = canvas.toBuffer(undefined, 3, canvas.PNG_FILTER_NONE);
    fs.writeFile(outputPath, buf, error => {
        if (error) {
            throw error;
        }
    });
});

Using JSC3D directly

The original JSC3D API is also directly exposed.

const jsc3d = require('jsc3d');
const canvas = jsc3d.makeCairoCanvas(500, 500);
const viewer = new jsc3d.Viewer(canvas);
viewer.setParameter('SceneUrl', 'path/to/file.stl');
viewer.setParameter('InitRotationX', -45);
viewer.setParameter('RenderMode', 'smooth');

jsc3d.onLoaded(() => {
    // Called when STL file has been read in
    viewer.doUpdate();

    // At this point the canvas has been written to
});
viewer.init();

As stand-alone program

Install globally with

npm install -g jsc3d

Solid render

jsc3d examples/example.stl examples/example.png

Example default render

Example wireframe render

This node wrapper exposes all arguments as CLI arguments, also.

jsc3d \
    --ModelColor=#00ff00 \
    --RenderMode=wireframe \
    --BackgroundColor1=#000000 \
    --BackgroundColor2=#000000 \
    examples/example.stl \
    examples/example_wireframe.png

Example wireframe render

License

To match JSC3D, this wrapper is also released under MIT License.

TODO

  • Need to support binary STL files

  • Background images do not load: need to mock HTML Image interface

  • Implement new, faster, simpler mock canvas using Buffer to avoid Cairo dependency and be 100% JS

  • Monkey patch JSC3D's BinaryStream with a faster implementation using Buffer