add gerber sketch import to mesh:tool
This commit is contained in:
parent
2966ad22b8
commit
83624f0617
3 changed files with 32 additions and 11 deletions
|
|
@ -40,7 +40,7 @@ const types = {
|
||||||
|
|
||||||
svg(data, file, resolve, reject, opt = {}) {
|
svg(data, file, resolve, reject, opt = {}) {
|
||||||
let out = load.SVG.parse(data, opt);
|
let out = load.SVG.parse(data, opt);
|
||||||
resolve(opt.flat ? out : out.map(m => { return {mesh: m.toFloat32(), file} }));
|
resolve(opt.flat ? out : out.map(m => { return { mesh: m.toFloat32(), file } }));
|
||||||
},
|
},
|
||||||
|
|
||||||
png(data, file, resolve, reject, opt = {}) {
|
png(data, file, resolve, reject, opt = {}) {
|
||||||
|
|
@ -53,7 +53,11 @@ const types = {
|
||||||
},
|
},
|
||||||
|
|
||||||
gbr(data, file, resolve, reject, opt = {}) {
|
gbr(data, file, resolve, reject, opt = {}) {
|
||||||
resolve([{ mesh: load.GBR.toMesh(data).toFloat32(), file }])
|
if (opt.flat) {
|
||||||
|
resolve([ load.GBR.parse(data) ])
|
||||||
|
} else {
|
||||||
|
resolve([{ mesh: load.GBR.toMesh(data).toFloat32(), file }])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ function parse(text, opt = { soup: true }) {
|
||||||
for (let node of shapes) {
|
for (let node of shapes) {
|
||||||
let { shape, holes } = node.extractPoints();
|
let { shape, holes } = node.extractPoints();
|
||||||
for (let path of [ shape, ...holes ]) {
|
for (let path of [ shape, ...holes ]) {
|
||||||
let poly = base.newPolygon().addPoints(path.map(p => base.newPoint(p.x, p.y, 0)));
|
let poly = base.newPolygon().addPoints(path.map(p => base.newPoint(p.x, -p.y, 0)));
|
||||||
if (poly.appearsClosed()) poly.points.pop();
|
if (poly.appearsClosed()) poly.points.pop();
|
||||||
polys.push(poly);
|
polys.push(poly);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -466,18 +466,34 @@ function load_files(files) {
|
||||||
let api = mesh.api;
|
let api = mesh.api;
|
||||||
let has_image = false;
|
let has_image = false;
|
||||||
let has_svg = false;
|
let has_svg = false;
|
||||||
|
let has_gbr = false;
|
||||||
|
let sketch = api.sketch.selection.one;
|
||||||
for (let file of files) {
|
for (let file of files) {
|
||||||
has_image = has_image || file.type === 'image/png';
|
has_image = has_image || file.type === 'image/png';
|
||||||
has_svg = has_svg || file.name.toLowerCase().indexOf(".svg") > 0;
|
has_svg = has_svg || file.name.toLowerCase().indexOf(".svg") > 0;
|
||||||
|
has_gbr = has_gbr || file.name.toLowerCase().indexOf(".gbr") > 0;
|
||||||
}
|
}
|
||||||
|
if (sketch && has_gbr) {
|
||||||
|
load.File.load([...files], { flat: true }).then(layers => {
|
||||||
|
for (let layer of layers.flat()) {
|
||||||
|
let { circs, closed, open, rects } = layer;
|
||||||
|
let group = Date.now().toString(36);
|
||||||
|
for (let poly of [ ...closed, ...circs, ...rects ]) {
|
||||||
|
sketch.add_polygon({ poly, group });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else
|
||||||
|
if (sketch && has_svg) {
|
||||||
|
load.File.load([...files], { flat: true })
|
||||||
|
.then(polys => polys.forEach(set => {
|
||||||
|
let group = Date.now().toString(36);
|
||||||
|
set.forEach(poly => sketch.add_polygon({ poly, group }))
|
||||||
|
}))
|
||||||
|
.catch(error => dbug.error(error))
|
||||||
|
.finally(() => mesh.api.log.hide());
|
||||||
|
} else
|
||||||
if (has_svg) {
|
if (has_svg) {
|
||||||
let sketch = api.sketch.selection.one;
|
|
||||||
if (sketch) {
|
|
||||||
return load.File.load([...files], { flat: true })
|
|
||||||
.then(polys => polys.flat().forEach(poly => sketch.add_polygon({ poly })))
|
|
||||||
.catch(error => dbug.error(error))
|
|
||||||
.finally(() => mesh.api.log.hide());
|
|
||||||
}
|
|
||||||
api.modal.dialog({
|
api.modal.dialog({
|
||||||
title: `svg import`,
|
title: `svg import`,
|
||||||
body: [ h.div({ class: "image-import" }, [
|
body: [ h.div({ class: "image-import" }, [
|
||||||
|
|
@ -501,7 +517,8 @@ function load_files(files) {
|
||||||
])
|
])
|
||||||
]) ]
|
]) ]
|
||||||
});
|
});
|
||||||
} else if (has_image) {
|
} else
|
||||||
|
if (has_image) {
|
||||||
api.modal.dialog({
|
api.modal.dialog({
|
||||||
title: `image import`,
|
title: `image import`,
|
||||||
body: [ h.div({ class: "image-import" }, [
|
body: [ h.div({ class: "image-import" }, [
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue