Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mikolalysenko/orthogami

Orthogonal polyhedra origami
https://github.com/mikolalysenko/orthogami

Last synced: 5 days ago
JSON representation

Orthogonal polyhedra origami

Awesome Lists containing this project

README

        

orthogami
=========

Turn voxel models into foldable origami! For example, you can turn this mario model:

Into this foldable model:

[If you want to try making a Mario yourself, here is a PDF in A4 format.](https://mikolalysenko.github.io/orthogami/example/mario.pdf)

This module works in any reasonable CommonJS environment (includes node.js and browserify). You can also use it with the [voxel critter creator](http://voxelbuilder.com/edit.html) (select "Export Orthogami").

## Example usage

```javascript
//First create a voxel set
// 0 = empty
var voxels = require('ndarray-pack')([
[[0, 1],
[2, 3]],
[[0, 0],
[0, 4]]
])

//Require the module (works with browserify)
var orthogami = require('orthogami')

//Set up options (can skip this if you like)
var options = {
units: 'mm', //Units
bounds: [210, 297], //Page size
scale: 10, //Size of voxel
lineWidth: 0.1 //Size of dashed line
}

//Then run orthogami
var svgs = orthogami(voxels, options)

//Print out the result
var fs = require('fs')
svgs.forEach(function(svg, idx) {
fs.writeFileSync('page' + idx + '.svg', svg)
})
```

### Output

#### Page 1:

#### Page 2:

## Install

```
npm install orthogami
```

## API

### `require('orthogami')(voxels[, options])`

Generates an origami template for folding a model from the given voxel object.

* `voxels` is a 3D ndarray of integer values. `0` values indicate empty voxels.
* `options` is an optional object containing any of the following extra parameters:

+ `colorMap` a function mapping color values in the voxels to SVG color names, or alternatively an array of SVG color names.
+ `bounds` a 2D array representing the size of each page (default `[Infinity, Infinity]`)
+ `scale` a number giving the size of each voxel (default `64`)
+ `convexColor` the color of the convex creases (default `'black'`)
+ `concaveColor` the color of the concave creases (default `'white'`)
+ `tabColor` the color of the tab lines (default `'black'`)
+ `lineWidth` the width of the crease lines (default `1`)
+ `units` the units for the coordinate system (default `'px'`)

**Returns** An array of SVG files encoding the pages of the origami printout

# Credits
(c) 2014 Mikola Lysenko. MIT License