Skip to content

Latest commit

 

History

History
109 lines (91 loc) · 2.72 KB

README.md

File metadata and controls

109 lines (91 loc) · 2.72 KB

Code Climate

#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.