jsc3d
v0.1.8
Published
Node port of JSC3D software 3D renderer with CLI interface
Downloads
14
Maintainers
Readme
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.
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 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
License
To match JSC3D, this wrapper is also released under MIT License.
TODO
[ ] Background images do not load: need to mock HTML Image interface
[ ] Implement new, simpler mock canvas using Buffer to avoid Cairo dependency
[ ] Monkey patch JSC3D's BinaryStream with a faster implementation using Buffer