oce-wrap

Node.js wrap generator for Opencascade Solid modelling kernel

Stars
6

#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

  1. install dependencies
npm install -g gulp
npm install
  1. 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.

Badges
Extracted from project README
Code Climate
Related Projects