add auto svg extrude to 3d object on import
This commit is contained in:
parent
cccb2b1379
commit
df4a54c929
5 changed files with 76 additions and 2 deletions
52
src/moto/load-svg.js
Normal file
52
src/moto/load-svg.js
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
'use strict';
|
||||
|
||||
(function() {
|
||||
|
||||
if (!self.moto) self.moto = {};
|
||||
if (self.moto.SVG) return;
|
||||
|
||||
self.moto.SVG = {
|
||||
parse,
|
||||
parseAsync
|
||||
};
|
||||
|
||||
/**
|
||||
* @param {String} text
|
||||
* @returns {Array} vertex face array
|
||||
*/
|
||||
|
||||
function parseAsync(text) {
|
||||
return new Promise((resolve,reject) => {
|
||||
resolve(parse(text));
|
||||
});
|
||||
}
|
||||
|
||||
function parse(text) {
|
||||
|
||||
let faces = [ ];
|
||||
let objs = [ faces ];
|
||||
|
||||
let data = new THREE.SVGLoader().parse(text);
|
||||
let paths = data.paths;
|
||||
|
||||
for (let i = 0; i < paths.length; i++) {
|
||||
let path = paths[i];
|
||||
let shapes = path.toShapes(true);
|
||||
let geom = new THREE.ExtrudeGeometry(shapes, {
|
||||
steps: 1,
|
||||
depth: 5,
|
||||
bevelEnabled: false
|
||||
});
|
||||
let array = geom.attributes.position.array;
|
||||
// invert y
|
||||
for (let i=0; i<array.length; i+=3) {
|
||||
array[i+1] = -array[i+1];
|
||||
}
|
||||
// objs.push(geom.attributes.position.array);
|
||||
faces.appendAll(array);
|
||||
}
|
||||
|
||||
return objs;
|
||||
}
|
||||
|
||||
})();
|
||||
Loading…
Reference in a new issue