Skip to content

Node.js wrap generator for Opencascade Solid modelling kernel

Notifications You must be signed in to change notification settings

henrikrudstrom/oce-wrap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

Node.js wrap generator for Opencascade Solid modelling kernel

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published