Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mikolalysenko/orthogami
Orthogonal polyhedra origami
https://github.com/mikolalysenko/orthogami
Last synced: 5 days ago
JSON representation
Orthogonal polyhedra origami
- Host: GitHub
- URL: https://github.com/mikolalysenko/orthogami
- Owner: mikolalysenko
- License: mit
- Created: 2014-07-05T06:12:16.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2014-12-25T01:39:11.000Z (about 10 years ago)
- Last Synced: 2024-12-13T02:51:31.523Z (12 days ago)
- Language: JavaScript
- Size: 463 KB
- Stars: 285
- Watchers: 16
- Forks: 24
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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