@sohale/implisolid
Version:
A Solid Modelling Kernel in Javascript based on Implicit Surfaces, for MP5 file format
145 lines (100 loc) • 6.63 kB
Markdown
ImpliSolid
=========
**ImpliSolid** is a Solid Modelling library/engine based on *Implicit Surfaces* modelling (aka *F-REP*).
ImpliSolid uses academic research such as the polygonization algorithm published by Ohtake & Belyaev.
ImpliSolid uses very efficient vectorised calculations to provide instant polygonisation of Implicit Surfaces on your browser.
Currently two open-source projects that use this library:
* [mp5-private](http://github.com/sohale/mp5-private), i.e. the [WeDesign.Live](http://beta.wedesign.live) (incubated open-source)
* [mp5slicer](http://github.com/sohale/mp5slicer) A slicer for 3D printing (incubated open-source)
#### Architecture
The Library has three levels, each with a separate API. The final version will have 5 levels.
Levels 1 and 2 are independent of ThreeJS, hence can be used in NodeJS or as a WebWorker.
Only the Highest level API (level 3) uses Three.JS (For example see: mcc2_3js_r79.js ).
## Implemenation
ImpliSolid is implemented for JavaSCript, C++, Python.
### JavaScript
The JS part can run on **Browser**, or NodeJS, or as a Web Worker.
Implisolid was originally intended for use in Browsers without need to any serverside.
ImpliSolid will soon be available in **WebAssembly** (tutorial comming soon).
The **npm** is available from [here](www.npmjs.com/package/@sohale/implisolid) (will be moved).
### C++
ImpliSolid is written in C++.
The C++ implementation can be used standalone for modern C++ compilers such as g++. It is compiled into JavaScript using *Emscripten*.
### Python
Two Python implementations are already available:
1. As a native Python implementation
2. As a Python binding.
##Available targets
List of platforms with scripts (to install and compile):
- JavaScript (asm.js, on browser)
- JavaScript npm.
- JavaScript, WebWorker version
- WebAssembly (comming soon)
- JavaScript (browser) using Docker
- Python binding (recommended)
- Python native (installs dependencies such as VTK)
- Clang/LLVM
- Native C++: g++
#Tutorials:
> - [Prerequisites](#prerequisites)
- [File organisation](#file-organisation)
- [Python](#python)
- [C++ to javascript](#c-to-javascript)
- [Boost](#boost)
- [Emscripten](#emscripten)
- [How to compile](#how-to-compile)
### Deployment on web server:
This document describes how to set up your installation so that you can work on the solid modeler projects.
Specifically, instructions for installing MP5/WeDesign Solid Modeler on web server:
**Table of Contents**
> - [Prerequisites](#prerequisites)
- [File organisation](#file-organisation)
- [Python](#python)
- [C++ to javascript](#c-to-javascript)
- [Boost](#boost)
- [Emscripten](#emscripten)
- [How to compile](#how-to-compile)
----------
Prerequisites
-------------
Basic requirements:
- A Linux distribution of your choice (everything can work on an other os but these tutorials will focus on linux)
- Git
- Bash
- NodeJS
- A text editor
- C++ compiler (g++ is a good choice and is often preinstalled)
Installation and proper configuration of those software is out of the scope of this document. Please refer to their documentation.
----------
File organisation
-------------------
As of today there are three main folders to this project :
- <b>Clean_code</b> contains a for now frozen implementation of the Dual/Primal Mesh Optimization algorithme for Polygonized Implicit Surfaces. You can learn more about this algorithme here : http://www.hyperfun.org/SM02ob.pdf. It is the main output of the solid modeler project.
- <b>implicit</b> contains still worked on python scripts related to the project. A big part of this file has been transfered to clean_code.
- <b>js_iteration_1</b> contains the c++ implementation of the projet, as well as its transcription to javascript and html.
-------------------
Python
-------------------
In order to work on and execute the python scripts you may need to install the following libraries :
- apdb : the debugging process is made easier
- vtk : It is mainly used to compute a marching cube mesh, the first step of the main algorithm described above. You may want to follow this tutorial to install vtk : http://www.vtk.org/Wiki/VTK/Building/Linux.
- numpy : mathematical functions
- traits
- mayavi : display. This tutorial can help you install mayavi and traits and check wether your installation was succesfull : http://docs.enthought.com/mayavi/mayavi/installation.html
For most of those libraries, a simple `sudo apt-get install python-LibraryName` will do the trick. If not you may want to try the `easy_install` command or the use of pip.
-------------------
C++ to javascript
-------------------
In this part of the project, Emscripten is used to convert c++ code into javascript code that is later used in html.
#### <b>Boost</b>
For the c++ code, we use the Boost library. It does not need to be built but still need to be installed. You can follow this tutorial to do so : http://www.boost.org/doc/libs/1_57_0/more/getting_started/unix-variants.html.
#### <b>Emscripten</b>
The installation of Emscripten often proves a little trickier than the other installations. Here are two tutorials you should follow <b>in the order proposed</b> : https://kripken.github.io/emscripten-site/docs/getting_started/downloads.html#platform-notes-installation-instructions-portable-sdk http://kripken.github.io/emscripten-site/docs/building_from_source/building_fastcomp_manually_from_source.html#building-fastcomp-from-source.
#### How to compile
The combined use of the Boost library and Emscripten makes compiling a little bit different. For this, we have created the `mc_name.sh` files. For exemple, I use the `mc_marc.sh` file to compile a c++ file into a js file (that is later called in the html file you will simply need to launch in your browser). In this `mc_name.sh` file you'll only find on uncommented line : it is used to compile your c++ file and goes like this :
`~/FolderComtainingYourEmsdk_PortableFolder/emsdk_portable/emscripten/master/em++ -I /LocationOfYourBoostInstalation/boost_1_57_0/ -s EXPORTED_FUNCTIONS="['_make_object', '_main']" -s NO_EXIT_RUNTIME=1 -s ASSERTIONS=1 -pedantic -std=c++14 mc2_sol.cpp -o mc2_sol.cpp.js`. In this exemple you'll compile the file mc2_sol.cpp into mc2_sol.cpp.js exporting its important functions (make_object and main).
-----------
##### Compiling C++ to javascript using Docker
You can use a pre installed docker container to compile implisolid:
```docker run -v /Users/Tiger/Documents/mp5-private/implisolid:/src -t mp51/solidmodel /bin/bash /src/js_iteration_1/build_mcc2_docker.sh -o```
----------