#oce-wrap ##create modular node.js wrappers for OpenCascade Solid Modelling library
oce-wrap can easily generate a c++ to node.js wrapper for OpenCascade, a 3D solid modelling kernel. It is configurable to allow wrapping of selected classes and methods, and automatically generates code to eliminate c++ artifacts in the api (handles, outvales etc.)
A simple hypothetical module can be defined like this: (or take a look at noce-dev
module.exports = function(mod) {
mod.name = 'Geom';
// include classes
mod.include('gp_Pnt');
mod.include('gp_Vec');
mod.include('Geom_Geometry');
mod.include('Geom_Curve');
mod.include('Geom_BoundedCurve');
mod.include('Geom_BezierCurve');
// define properties
mod.find('gp_*')
.property('X', 'SetX')
.property('Y', 'SetY')
.property('Z', 'SetZ')
// include all members of all classes
// except the delete() method.
mod.find('*')
.include('*')
.exclude('delete()');
};
The aim is to automatically generate wrappers that hide the ugly implementation details and restructuring the api to be more human friendly. Features currently implemented:
Handles are taken care of automatically:
> var circle = new Geom.Circle(ax, r);
> var trimmed = new Geom.TrimmedCurve(circle, 0, Math.PI / 2);
Method pairs can be defined as properties:
> var pnt = new gp.Pnt(1,2,3);
> pnt.z
3
converts output arguments to return values / objects
> var plane = new Geom.CylindricalSurface(ax, 10)
> circle.bounds()
{ u1: 0, u2: 1, v1: 0, v2: 1 }
collection classes mapped to javascript arrays / objects
> new Geom.BezierCurve([new gp.Pnt(1,2,3), new gp.Pnt(2,3,4), new gp.Pnt(4,5,6)
##dependencies:
- node.js
- python 2.x
- gccxml or castxml
- pygccxml
- swig 3.x (latest from git)
- OCE 0.16 (not tested on 0.17)
##installation
- install dependencies
npm install -g gulp
npm install
- Edit settings.js and example/settings.js Set paths to OCE headers and If you have castxml (ubuntu 15.0) use these settings:
"xmlGenerator": "castxml",
"xmlGeneratorPath": "/usr/bin/castxml"
With gccxml:
"xmlGenerator": "gccxml",
"xmlGeneratorPath": "/usr/bin/gccxml"
##Test it:
cd example
gulp init
gulp build
gulp test
##Goal Create a lightweight unopinionated wrapper for core modelling functionality of open cascade.
TODOS:
Eliminate handles all collection classes as js lists convert one shot classes to static functions strip away as many internal classes as possible.