stage new routing test

This commit is contained in:
Stewart Allen 2017-10-29 16:51:32 -04:00
commit b0647ec727
4 changed files with 60 additions and 16 deletions

View file

@ -623,7 +623,23 @@ var gs_base_polygon = exports;
}; };
/** /**
* emit new open poly between two intersection points * using two points, split polygon into two open polygons
* or return null if p1,p2 does not intersect or poly is open
*/
PRO.bisect = function(p1, p2) {
if (this.isOpen()) return null;
var copy = this.clone().setClockwise();
var int = copy.intersections(p1, p2);
if (!int || int.length !== 2) return null;
return [ copy.emitSegment(int[0], int[1]), copy.emitSegment(int[1], int[0]) ];
};
/**
* emit new open poly between two intersection points of a clockwise poly.
* used in cam tabs and fdm output perimeter traces on infill
*/ */
PRO.emitSegment = function(i1, i2) { PRO.emitSegment = function(i1, i2) {
var poly = newPolygon(), var poly = newPolygon(),

View file

@ -244,6 +244,7 @@ var gs_kiri_fdm = exports;
} }
if (layerout.length) output.append(layerout); if (layerout.length) output.append(layerout);
// console.log({layer: output.length, len: layerout.length});
layer++; layer++;
update(layer / maxLayers); update(layer / maxLayers);
} }

View file

@ -250,6 +250,7 @@ var gs_kiri_print = exports;
}); });
view = KIRI.newLayer(scope.group); view = KIRI.newLayer(scope.group);
scope.layerView.push(view); scope.layerView.push(view);
// console.log({move:move, print:print});
if (showMoves) view.lines(move, moveColor); if (showMoves) view.lines(move, moveColor);
view.lines(print, 0x5566aa); view.lines(print, 0x5566aa);
view.render(); view.render();
@ -378,7 +379,7 @@ var gs_kiri_print = exports;
/** /**
* @param {Polygon[]} polys * @param {Polygon[]} polys
*/ */
function outputSparse(polys) { function outputSparse(polys, fillMult, bounds) {
if (!polys) return; if (!polys) return;
var lines = [], p1, p2, iter; var lines = [], p1, p2, iter;
polys.forEach(function(poly) { polys.forEach(function(poly) {
@ -387,15 +388,16 @@ var gs_kiri_print = exports;
lines.push(p2.clone()); lines.push(p2.clone());
}, true); }, true);
}); });
outputFills(lines); outputFills(lines, fillMult, bounds);
} }
function outputFills(lines, extrude) { function outputFills(lines, extrude, bounds) {
var mindist, p1, p2, dist, point, find, var mindist, p1, p2, dist, point, find, dist,
printMult = extrude || fillMult; printMult = extrude || fillMult;
while (lines) { while (lines) {
find = null; find = null;
mindist = Infinity; mindist = Infinity;
// find next closes line
for (i=0; i<lines.length; i++) { for (i=0; i<lines.length; i++) {
point = lines[i]; point = lines[i];
if (point.del) continue; if (point.del) continue;
@ -406,6 +408,7 @@ var gs_kiri_print = exports;
} }
} }
if (find) { if (find) {
// order segment by closest to farthest point
if (find.i % 2 === 0) { if (find.i % 2 === 0) {
p1 = find.p; p1 = find.p;
p2 = lines[find.i + 1]; p2 = lines[find.i + 1];
@ -413,9 +416,30 @@ var gs_kiri_print = exports;
p1 = find.p; p1 = find.p;
p2 = lines[find.i - 1]; p2 = lines[find.i - 1];
} }
// mark as used (temporary)
p1.del = true; p1.del = true;
p2.del = true; p2.del = true;
preout.push(newOut(p1, SQRT(startPoint.distToSq2D(p1)) < minSeek ? seekMult : 0)); dist = SQRT(startPoint.distToSq2D(p1));
preout.push(newOut(p1, 0));
// preout.push(newOut(p1, dist < minSeek ? seekMult : 0));
// check for intersection with bounds and if found
// follow the shortest path around that bounding poly
if (false && bounds && startPoint && dist > minSeek) {
var more = true;
if (more) bounds.forEach(function(bp) {
var paths = bp.bisect(startPoint, p1);
if (!paths || paths.length !== 2) return;
var path = paths[0].perimeter() < paths[1].perimeter() ? paths[0] : paths[1];
// console.log({bisect: path.length, z: path.first().z, l:path.perimeter()});
path.forEachSegment(function(p1, p2) {
preout.push(newOut(p1, 0));
preout.push(newOut(p2, 0));
});
more = false;
});
}
preout.push(newOut(p2, printMult)); preout.push(newOut(p2, printMult));
startPoint = p2; startPoint = p2;
} else { } else {
@ -459,18 +483,21 @@ var gs_kiri_print = exports;
if (next instanceof Polygon) { if (next instanceof Polygon) {
// support polygon // support polygon
next.setZ(z); next.setZ(z);
outputTraces(next, extrude); outputTraces([].appendAll(next).appendAll(next.inner || []), extrude);
outputTraces(next.inner, extrude); // outputTraces(next, extrude);
// outputTraces(next.inner, extrude);
if (next.fills) { if (next.fills) {
next.fills.forEach(function(p) { p.z = z }); next.fills.forEach(function(p) { p.z = z });
outputFills(next.fills, extrude); outputFills(next.fills, extrude, next.inner);
} }
} else { } else {
// top object // top object
outputTraces(next.traces, extrude); var inner = next.innerTraces();
outputTraces(next.innerTraces(), extrude); outputTraces([].appendAll(next.traces).appendAll(inner || []), extrude);
outputFills(next.fill_lines); // outputTraces(next.traces, extrude);
outputSparse(next.fill_sparse); // outputTraces(next.innerTraces(), extrude);
outputFills(next.fill_lines, extrude, inner);
outputSparse(next.fill_sparse, extrude, inner);
} }
}, function(obj) { }, function(obj) {
return obj instanceof Polygon ? obj : obj.poly; return obj instanceof Polygon ? obj : obj.poly;

View file

@ -31,12 +31,12 @@
"buffer-crc32": "^0.2.13", "buffer-crc32": "^0.2.13",
"compression": "^1.7.1", "compression": "^1.7.1",
"connect": "^3.6.5", "connect": "^3.6.5",
"express-useragent": "^1.0.7", "express-useragent": "^1.0.8",
"leveldown": "^1.9.0", "leveldown": "^1.9.0",
"levelup": "^1.3.9", "levelup": "^1.3.9",
"moment": "^2.19.0", "moment": "^2.19.1",
"n3d-threejs": "^72.0.0", "n3d-threejs": "^72.0.0",
"pixi.js": "^4.5.5", "pixi.js": "^4.6.0",
"request": "^2.83.0", "request": "^2.83.0",
"serve-static": "^1.13.1", "serve-static": "^1.13.1",
"tween.js": "^0.14.0", "tween.js": "^0.14.0",