-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcli.js
More file actions
executable file
·71 lines (62 loc) · 1.65 KB
/
Copy pathcli.js
File metadata and controls
executable file
·71 lines (62 loc) · 1.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/usr/bin/env node
'use strict'
const meow = require('meow')
const stl = require('stl')
const simplify = require('simplify-path')
const fs = require('fs')
const slicer = require('./')
const cli = meow(`
Usage
$ cli.js <stl file>
Options
-f Position of first slice. (default: lowest vertex of stl)
-l Position of last slice. (default: highest vertex of stl)
-s Distance between two slices
Examples
$ cli.js -s 0.1 example.stl
`, {
alias: {
f: 'first',
l: 'last',
s: 'step'
}
})
let stlFilename = cli.input[0]
if (stlFilename === undefined) {
cli.showHelp()
}
let stlFile
try {
stlFile = fs.readFileSync(stlFilename)
} catch (err) {
console.log(`Could not open "${stlFilename}"`)
process.exit(1)
}
let facets
try {
facets = stl.toObject(stlFile).facets
} catch (err) {
console.log(`Error parsing "${stlFilename}" - maybe not a valid stl file?`)
process.exit(1)
}
let first, last, step
if (cli.flags.step === undefined || isNaN(cli.flags.step) || cli.flags.step <= 0) {
console.log(`Invalid value "${cli.flags.step}" for argument "steps"`)
process.exit(1)
}
step = cli.flags.step
if (cli.flags.first && isNaN(cli.flags.first)) {
console.log(`Invalid value "${cli.flags.step}" for argument "first"`)
process.exit(1)
}
if (cli.flags.last && isNaN(cli.flags.last)) {
console.log(`Invalid value "${cli.flags.step}" for argument "last"`)
process.exit(1)
}
let svg = slicer.slice(facets, first, last, step, polygons => polygons.map(polygon => simplify(polygon, 0.1)))
fs.writeFile('out.svg', svg, function (err) {
if (err) {
return console.log(err)
}
console.log('saved results as out.svg')
})