js-angusj-clipper
Version:
Polygon and line clipping and offsetting library for Javascript / Typescript - a port of Angus Johnson's clipper to WebAssembly / Asm.JS
77 lines • 9.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.nativePathToPath = exports.doubleArrayToPath = exports.nativePathToDoubleArray = exports.pathToNativePath = exports.doubleArrayToNativePath = exports.pathToDoubleArray = exports.writePathToDoubleArray = exports.getNofItemsForPath = void 0;
var mem_1 = require("./mem");
var coordsPerPoint = 2;
function getNofItemsForPath(path) {
return 1 + path.length * coordsPerPoint;
}
exports.getNofItemsForPath = getNofItemsForPath;
// js to c++
function writePathToDoubleArray(path, heapBytes, startPtr) {
var len = path.length;
heapBytes[startPtr] = len;
var arrayI = 1 + startPtr;
for (var i = 0; i < len; i++) {
heapBytes[arrayI++] = path[i].x;
heapBytes[arrayI++] = path[i].y;
}
return arrayI;
}
exports.writePathToDoubleArray = writePathToDoubleArray;
function pathToDoubleArray(nativeClipperLib, path) {
var nofItems = getNofItemsForPath(path);
var heapBytes = (0, mem_1.mallocDoubleArray)(nativeClipperLib, nofItems);
writePathToDoubleArray(path, heapBytes, 0);
return heapBytes;
}
exports.pathToDoubleArray = pathToDoubleArray;
function doubleArrayToNativePath(nativeClipperLib, array, freeArray) {
var p = new nativeClipperLib.Path();
nativeClipperLib.toPath(p, array.byteOffset);
if (freeArray) {
(0, mem_1.freeTypedArray)(nativeClipperLib, array);
}
return p;
}
exports.doubleArrayToNativePath = doubleArrayToNativePath;
function pathToNativePath(nativeClipperLib, path) {
var array = pathToDoubleArray(nativeClipperLib, path);
return doubleArrayToNativePath(nativeClipperLib, array, true);
}
exports.pathToNativePath = pathToNativePath;
// c++ to js
function nativePathToDoubleArray(nativeClipperLib, nativePath, freeNativePath) {
var array = nativeClipperLib.fromPath(nativePath);
if (freeNativePath) {
nativePath.delete();
}
return array;
}
exports.nativePathToDoubleArray = nativePathToDoubleArray;
function doubleArrayToPath(nativeClipperLib, array, _freeDoubleArray, startPtr) {
var len = array[startPtr];
var path = [];
path.length = len;
var arrayI = 1 + startPtr;
for (var i = 0; i < len; i++) {
path[i] = {
x: array[arrayI++],
y: array[arrayI++],
};
}
if (_freeDoubleArray) {
(0, mem_1.freeTypedArray)(nativeClipperLib, array);
}
return {
path: path,
ptrEnd: arrayI,
};
}
exports.doubleArrayToPath = doubleArrayToPath;
function nativePathToPath(nativeClipperLib, nativePath, freeNativePath) {
var array = nativePathToDoubleArray(nativeClipperLib, nativePath, freeNativePath);
return doubleArrayToPath(nativeClipperLib, array, true, 0).path;
}
exports.nativePathToPath = nativePathToPath;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGF0aFRvTmF0aXZlUGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9uYXRpdmUvUGF0aFRvTmF0aXZlUGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw2QkFBMEQ7QUFJMUQsSUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBRXpCLFNBQWdCLGtCQUFrQixDQUFDLElBQWtCO0lBQ25ELE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDO0FBQzFDLENBQUM7QUFGRCxnREFFQztBQUVELFlBQVk7QUFFWixTQUFnQixzQkFBc0IsQ0FDcEMsSUFBa0IsRUFDbEIsU0FBdUIsRUFDdkIsUUFBZ0I7SUFFaEIsSUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUV4QixTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBRTFCLElBQUksTUFBTSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUM7SUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM1QixTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBaEJELHdEQWdCQztBQUVELFNBQWdCLGlCQUFpQixDQUMvQixnQkFBMEMsRUFDMUMsSUFBa0I7SUFFbEIsSUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsSUFBTSxTQUFTLEdBQUcsSUFBQSx1QkFBaUIsRUFBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNoRSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNDLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFSRCw4Q0FRQztBQUVELFNBQWdCLHVCQUF1QixDQUNyQyxnQkFBMEMsRUFDMUMsS0FBbUIsRUFDbkIsU0FBa0I7SUFFbEIsSUFBTSxDQUFDLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3QyxJQUFJLFNBQVMsRUFBRTtRQUNiLElBQUEsb0JBQWMsRUFBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUN6QztJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQVhELDBEQVdDO0FBRUQsU0FBZ0IsZ0JBQWdCLENBQzlCLGdCQUEwQyxFQUMxQyxJQUFrQjtJQUVsQixJQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RCxPQUFPLHVCQUF1QixDQUFDLGdCQUFnQixFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBTkQsNENBTUM7QUFFRCxZQUFZO0FBRVosU0FBZ0IsdUJBQXVCLENBQ3JDLGdCQUEwQyxFQUMxQyxVQUFzQixFQUN0QixjQUF1QjtJQUV2QixJQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEQsSUFBSSxjQUFjLEVBQUU7UUFDbEIsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3JCO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBVkQsMERBVUM7QUFFRCxTQUFnQixpQkFBaUIsQ0FDL0IsZ0JBQTBDLEVBQzFDLEtBQW1CLEVBQ25CLGdCQUF5QixFQUN6QixRQUFnQjtJQUVoQixJQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUIsSUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0lBRWxCLElBQUksTUFBTSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUM7SUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM1QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUc7WUFDUixDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDbkIsQ0FBQztLQUNIO0lBRUQsSUFBSSxnQkFBZ0IsRUFBRTtRQUNwQixJQUFBLG9CQUFjLEVBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDekM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLElBQUk7UUFDVixNQUFNLEVBQUUsTUFBTTtLQUNmLENBQUM7QUFDSixDQUFDO0FBMUJELDhDQTBCQztBQUVELFNBQWdCLGdCQUFnQixDQUM5QixnQkFBMEMsRUFDMUMsVUFBc0IsRUFDdEIsY0FBdUI7SUFFdkIsSUFBTSxLQUFLLEdBQUcsdUJBQXVCLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3BGLE9BQU8saUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDbEUsQ0FBQztBQVBELDRDQU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGF0aCwgUmVhZG9ubHlQYXRoIH0gZnJvbSBcIi4uL1BhdGhcIjtcbmltcG9ydCB7IGZyZWVUeXBlZEFycmF5LCBtYWxsb2NEb3VibGVBcnJheSB9IGZyb20gXCIuL21lbVwiO1xuaW1wb3J0IHsgTmF0aXZlQ2xpcHBlckxpYkluc3RhbmNlIH0gZnJvbSBcIi4vTmF0aXZlQ2xpcHBlckxpYkluc3RhbmNlXCI7XG5pbXBvcnQgeyBOYXRpdmVQYXRoIH0gZnJvbSBcIi4vTmF0aXZlUGF0aFwiO1xuXG5jb25zdCBjb29yZHNQZXJQb2ludCA9IDI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROb2ZJdGVtc0ZvclBhdGgocGF0aDogUmVhZG9ubHlQYXRoKTogbnVtYmVyIHtcbiAgcmV0dXJuIDEgKyBwYXRoLmxlbmd0aCAqIGNvb3Jkc1BlclBvaW50O1xufVxuXG4vLyBqcyB0byBjKytcblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUGF0aFRvRG91YmxlQXJyYXkoXG4gIHBhdGg6IFJlYWRvbmx5UGF0aCxcbiAgaGVhcEJ5dGVzOiBGbG9hdDY0QXJyYXksXG4gIHN0YXJ0UHRyOiBudW1iZXJcbik6IG51bWJlciB7XG4gIGNvbnN0IGxlbiA9IHBhdGgubGVuZ3RoO1xuXG4gIGhlYXBCeXRlc1tzdGFydFB0cl0gPSBsZW47XG5cbiAgbGV0IGFycmF5SSA9IDEgKyBzdGFydFB0cjtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGhlYXBCeXRlc1thcnJheUkrK10gPSBwYXRoW2ldLng7XG4gICAgaGVhcEJ5dGVzW2FycmF5SSsrXSA9IHBhdGhbaV0ueTtcbiAgfVxuXG4gIHJldHVybiBhcnJheUk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoVG9Eb3VibGVBcnJheShcbiAgbmF0aXZlQ2xpcHBlckxpYjogTmF0aXZlQ2xpcHBlckxpYkluc3RhbmNlLFxuICBwYXRoOiBSZWFkb25seVBhdGhcbik6IEZsb2F0NjRBcnJheSB7XG4gIGNvbnN0IG5vZkl0ZW1zID0gZ2V0Tm9mSXRlbXNGb3JQYXRoKHBhdGgpO1xuICBjb25zdCBoZWFwQnl0ZXMgPSBtYWxsb2NEb3VibGVBcnJheShuYXRpdmVDbGlwcGVyTGliLCBub2ZJdGVtcyk7XG4gIHdyaXRlUGF0aFRvRG91YmxlQXJyYXkocGF0aCwgaGVhcEJ5dGVzLCAwKTtcbiAgcmV0dXJuIGhlYXBCeXRlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvdWJsZUFycmF5VG9OYXRpdmVQYXRoKFxuICBuYXRpdmVDbGlwcGVyTGliOiBOYXRpdmVDbGlwcGVyTGliSW5zdGFuY2UsXG4gIGFycmF5OiBGbG9hdDY0QXJyYXksXG4gIGZyZWVBcnJheTogYm9vbGVhblxuKTogTmF0aXZlUGF0aCB7XG4gIGNvbnN0IHAgPSBuZXcgbmF0aXZlQ2xpcHBlckxpYi5QYXRoKCk7XG4gIG5hdGl2ZUNsaXBwZXJMaWIudG9QYXRoKHAsIGFycmF5LmJ5dGVPZmZzZXQpO1xuICBpZiAoZnJlZUFycmF5KSB7XG4gICAgZnJlZVR5cGVkQXJyYXkobmF0aXZlQ2xpcHBlckxpYiwgYXJyYXkpO1xuICB9XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aFRvTmF0aXZlUGF0aChcbiAgbmF0aXZlQ2xpcHBlckxpYjogTmF0aXZlQ2xpcHBlckxpYkluc3RhbmNlLFxuICBwYXRoOiBSZWFkb25seVBhdGhcbik6IE5hdGl2ZVBhdGgge1xuICBjb25zdCBhcnJheSA9IHBhdGhUb0RvdWJsZUFycmF5KG5hdGl2ZUNsaXBwZXJMaWIsIHBhdGgpO1xuICByZXR1cm4gZG91YmxlQXJyYXlUb05hdGl2ZVBhdGgobmF0aXZlQ2xpcHBlckxpYiwgYXJyYXksIHRydWUpO1xufVxuXG4vLyBjKysgdG8ganNcblxuZXhwb3J0IGZ1bmN0aW9uIG5hdGl2ZVBhdGhUb0RvdWJsZUFycmF5KFxuICBuYXRpdmVDbGlwcGVyTGliOiBOYXRpdmVDbGlwcGVyTGliSW5zdGFuY2UsXG4gIG5hdGl2ZVBhdGg6IE5hdGl2ZVBhdGgsXG4gIGZyZWVOYXRpdmVQYXRoOiBib29sZWFuXG4pOiBGbG9hdDY0QXJyYXkge1xuICBjb25zdCBhcnJheSA9IG5hdGl2ZUNsaXBwZXJMaWIuZnJvbVBhdGgobmF0aXZlUGF0aCk7XG4gIGlmIChmcmVlTmF0aXZlUGF0aCkge1xuICAgIG5hdGl2ZVBhdGguZGVsZXRlKCk7XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG91YmxlQXJyYXlUb1BhdGgoXG4gIG5hdGl2ZUNsaXBwZXJMaWI6IE5hdGl2ZUNsaXBwZXJMaWJJbnN0YW5jZSxcbiAgYXJyYXk6IEZsb2F0NjRBcnJheSxcbiAgX2ZyZWVEb3VibGVBcnJheTogYm9vbGVhbixcbiAgc3RhcnRQdHI6IG51bWJlclxuKTogeyBwYXRoOiBQYXRoOyBwdHJFbmQ6IG51bWJlciB9IHtcbiAgY29uc3QgbGVuID0gYXJyYXlbc3RhcnRQdHJdO1xuICBjb25zdCBwYXRoID0gW107XG4gIHBhdGgubGVuZ3RoID0gbGVuO1xuXG4gIGxldCBhcnJheUkgPSAxICsgc3RhcnRQdHI7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBwYXRoW2ldID0ge1xuICAgICAgeDogYXJyYXlbYXJyYXlJKytdLFxuICAgICAgeTogYXJyYXlbYXJyYXlJKytdLFxuICAgIH07XG4gIH1cblxuICBpZiAoX2ZyZWVEb3VibGVBcnJheSkge1xuICAgIGZyZWVUeXBlZEFycmF5KG5hdGl2ZUNsaXBwZXJMaWIsIGFycmF5KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGF0aDogcGF0aCxcbiAgICBwdHJFbmQ6IGFycmF5SSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hdGl2ZVBhdGhUb1BhdGgoXG4gIG5hdGl2ZUNsaXBwZXJMaWI6IE5hdGl2ZUNsaXBwZXJMaWJJbnN0YW5jZSxcbiAgbmF0aXZlUGF0aDogTmF0aXZlUGF0aCxcbiAgZnJlZU5hdGl2ZVBhdGg6IGJvb2xlYW5cbik6IFBhdGgge1xuICBjb25zdCBhcnJheSA9IG5hdGl2ZVBhdGhUb0RvdWJsZUFycmF5KG5hdGl2ZUNsaXBwZXJMaWIsIG5hdGl2ZVBhdGgsIGZyZWVOYXRpdmVQYXRoKTtcbiAgcmV0dXJuIGRvdWJsZUFycmF5VG9QYXRoKG5hdGl2ZUNsaXBwZXJMaWIsIGFycmF5LCB0cnVlLCAwKS5wYXRoO1xufVxuIl19