This repository has been archived on 2023-03-25. You can view files and clone it, but cannot push or open issues or pull requests.
mightyscape-1.1-deprecated/extensions/fablabchemnitz/papercraft/openjscad/node_modules/@jscad/obj-deserializer/index.js

57 lines
1.4 KiB
JavaScript

const { vt2jscad } = require('./vt2jscad')
function deserialize (obj, fn, options) { // http://en.wikipedia.org/wiki/Wavefront_.obj_file
const defaults = {version: '0.0.0'}
options = Object.assign({}, defaults, options)
const {version} = options
var l = obj.split(/\n/)
var v = []
var f = []
for (var i = 0; i < l.length; i++) {
var s = l[i]
var a = s.split(/\s+/)
if (a[0] === 'v') {
v.push([a[1], a[2], a[3]])
} else if (a[0] === 'f') {
var fc = []
var skip = 0
for (var j = 1; j < a.length; j++) {
var c = a[j]
c = c.replace(/\/.*$/, '') // -- if coord# is '840/840' -> 840
c-- // -- starts with 1, but we start with 0
if (c >= v.length) {
skip++
}
if (skip === 0) {
fc.push(c)
}
}
// fc.reverse();
if (skip === 0) {
f.push(fc)
}
} else {
// vn vt and all others disregarded
}
}
var src = ''
src += '// producer: OpenJSCAD Compatibility (' + version + ') Wavefront OBJ Importer\n'
src += '// date: ' + (new Date()) + '\n'
src += '// source: ' + fn + '\n'
src += '\n'
// if(err) src += "// WARNING: import errors: "+err+" (some triangles might be misaligned or missing)\n";
src += '// objects: 1\n// object #1: polygons: ' + f.length + '\n\n'
src += 'function main() { return '
src += vt2jscad(v, f)
src += '; }'
return src
}
module.exports = {
deserialize
}