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 • 10.3 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 = 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) {
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) {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGF0aFRvTmF0aXZlUGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9uYXRpdmUvUGF0aFRvTmF0aXZlUGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw2QkFBMEQ7QUFJMUQsSUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBRXpCLFNBQWdCLGtCQUFrQixDQUFDLElBQWtCO0lBQ25ELE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDO0FBQzFDLENBQUM7QUFGRCxnREFFQztBQUVELFlBQVk7QUFFWixTQUFnQixzQkFBc0IsQ0FDcEMsSUFBa0IsRUFDbEIsU0FBdUIsRUFDdkIsUUFBZ0I7SUFFaEIsSUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUV4QixTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBRTFCLElBQUksTUFBTSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUM7SUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM1QixTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBaEJELHdEQWdCQztBQUVELFNBQWdCLGlCQUFpQixDQUMvQixnQkFBMEMsRUFDMUMsSUFBa0I7SUFFbEIsSUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsSUFBTSxTQUFTLEdBQUcsdUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDaEUsc0JBQXNCLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzQyxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBUkQsOENBUUM7QUFFRCxTQUFnQix1QkFBdUIsQ0FDckMsZ0JBQTBDLEVBQzFDLEtBQW1CLEVBQ25CLFNBQWtCO0lBRWxCLElBQU0sQ0FBQyxHQUFHLElBQUksZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0MsSUFBSSxTQUFTLEVBQUU7UUFDYixvQkFBYyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ3pDO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBWEQsMERBV0M7QUFFRCxTQUFnQixnQkFBZ0IsQ0FDOUIsZ0JBQTBDLEVBQzFDLElBQWtCO0lBRWxCLElBQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hELE9BQU8sdUJBQXVCLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFORCw0Q0FNQztBQUVELFlBQVk7QUFFWixTQUFnQix1QkFBdUIsQ0FDckMsZ0JBQTBDLEVBQzFDLFVBQXNCLEVBQ3RCLGNBQXVCO0lBRXZCLElBQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwRCxJQUFJLGNBQWMsRUFBRTtRQUNsQixVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7S0FDckI7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFWRCwwREFVQztBQUVELFNBQWdCLGlCQUFpQixDQUMvQixnQkFBMEMsRUFDMUMsS0FBbUIsRUFDbkIsZ0JBQXlCLEVBQ3pCLFFBQWdCO0lBRWhCLElBQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QixJQUFNLElBQUksR0FBRyxFQUFFLENBQUM7SUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFFbEIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzVCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRztZQUNSLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNuQixDQUFDO0tBQ0g7SUFFRCxJQUFJLGdCQUFnQixFQUFFO1FBQ3BCLG9CQUFjLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDekM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLElBQUk7UUFDVixNQUFNLEVBQUUsTUFBTTtLQUNmLENBQUM7QUFDSixDQUFDO0FBMUJELDhDQTBCQztBQUVELFNBQWdCLGdCQUFnQixDQUM5QixnQkFBMEMsRUFDMUMsVUFBc0IsRUFDdEIsY0FBdUI7SUFFdkIsSUFBTSxLQUFLLEdBQUcsdUJBQXVCLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3BGLE9BQU8saUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDbEUsQ0FBQztBQVBELDRDQU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGF0aCwgUmVhZG9ubHlQYXRoIH0gZnJvbSBcIi4uL1BhdGhcIjtcclxuaW1wb3J0IHsgZnJlZVR5cGVkQXJyYXksIG1hbGxvY0RvdWJsZUFycmF5IH0gZnJvbSBcIi4vbWVtXCI7XHJcbmltcG9ydCB7IE5hdGl2ZUNsaXBwZXJMaWJJbnN0YW5jZSB9IGZyb20gXCIuL05hdGl2ZUNsaXBwZXJMaWJJbnN0YW5jZVwiO1xyXG5pbXBvcnQgeyBOYXRpdmVQYXRoIH0gZnJvbSBcIi4vTmF0aXZlUGF0aFwiO1xyXG5cclxuY29uc3QgY29vcmRzUGVyUG9pbnQgPSAyO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE5vZkl0ZW1zRm9yUGF0aChwYXRoOiBSZWFkb25seVBhdGgpOiBudW1iZXIge1xyXG4gIHJldHVybiAxICsgcGF0aC5sZW5ndGggKiBjb29yZHNQZXJQb2ludDtcclxufVxyXG5cclxuLy8ganMgdG8gYysrXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVQYXRoVG9Eb3VibGVBcnJheShcclxuICBwYXRoOiBSZWFkb25seVBhdGgsXHJcbiAgaGVhcEJ5dGVzOiBGbG9hdDY0QXJyYXksXHJcbiAgc3RhcnRQdHI6IG51bWJlclxyXG4pOiBudW1iZXIge1xyXG4gIGNvbnN0IGxlbiA9IHBhdGgubGVuZ3RoO1xyXG5cclxuICBoZWFwQnl0ZXNbc3RhcnRQdHJdID0gbGVuO1xyXG5cclxuICBsZXQgYXJyYXlJID0gMSArIHN0YXJ0UHRyO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgIGhlYXBCeXRlc1thcnJheUkrK10gPSBwYXRoW2ldLng7XHJcbiAgICBoZWFwQnl0ZXNbYXJyYXlJKytdID0gcGF0aFtpXS55O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGFycmF5STtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhUb0RvdWJsZUFycmF5KFxyXG4gIG5hdGl2ZUNsaXBwZXJMaWI6IE5hdGl2ZUNsaXBwZXJMaWJJbnN0YW5jZSxcclxuICBwYXRoOiBSZWFkb25seVBhdGhcclxuKTogRmxvYXQ2NEFycmF5IHtcclxuICBjb25zdCBub2ZJdGVtcyA9IGdldE5vZkl0ZW1zRm9yUGF0aChwYXRoKTtcclxuICBjb25zdCBoZWFwQnl0ZXMgPSBtYWxsb2NEb3VibGVBcnJheShuYXRpdmVDbGlwcGVyTGliLCBub2ZJdGVtcyk7XHJcbiAgd3JpdGVQYXRoVG9Eb3VibGVBcnJheShwYXRoLCBoZWFwQnl0ZXMsIDApO1xyXG4gIHJldHVybiBoZWFwQnl0ZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkb3VibGVBcnJheVRvTmF0aXZlUGF0aChcclxuICBuYXRpdmVDbGlwcGVyTGliOiBOYXRpdmVDbGlwcGVyTGliSW5zdGFuY2UsXHJcbiAgYXJyYXk6IEZsb2F0NjRBcnJheSxcclxuICBmcmVlQXJyYXk6IGJvb2xlYW5cclxuKTogTmF0aXZlUGF0aCB7XHJcbiAgY29uc3QgcCA9IG5ldyBuYXRpdmVDbGlwcGVyTGliLlBhdGgoKTtcclxuICBuYXRpdmVDbGlwcGVyTGliLnRvUGF0aChwLCBhcnJheS5ieXRlT2Zmc2V0KTtcclxuICBpZiAoZnJlZUFycmF5KSB7XHJcbiAgICBmcmVlVHlwZWRBcnJheShuYXRpdmVDbGlwcGVyTGliLCBhcnJheSk7XHJcbiAgfVxyXG4gIHJldHVybiBwO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcGF0aFRvTmF0aXZlUGF0aChcclxuICBuYXRpdmVDbGlwcGVyTGliOiBOYXRpdmVDbGlwcGVyTGliSW5zdGFuY2UsXHJcbiAgcGF0aDogUmVhZG9ubHlQYXRoXHJcbik6IE5hdGl2ZVBhdGgge1xyXG4gIGNvbnN0IGFycmF5ID0gcGF0aFRvRG91YmxlQXJyYXkobmF0aXZlQ2xpcHBlckxpYiwgcGF0aCk7XHJcbiAgcmV0dXJuIGRvdWJsZUFycmF5VG9OYXRpdmVQYXRoKG5hdGl2ZUNsaXBwZXJMaWIsIGFycmF5LCB0cnVlKTtcclxufVxyXG5cclxuLy8gYysrIHRvIGpzXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbmF0aXZlUGF0aFRvRG91YmxlQXJyYXkoXHJcbiAgbmF0aXZlQ2xpcHBlckxpYjogTmF0aXZlQ2xpcHBlckxpYkluc3RhbmNlLFxyXG4gIG5hdGl2ZVBhdGg6IE5hdGl2ZVBhdGgsXHJcbiAgZnJlZU5hdGl2ZVBhdGg6IGJvb2xlYW5cclxuKTogRmxvYXQ2NEFycmF5IHtcclxuICBjb25zdCBhcnJheSA9IG5hdGl2ZUNsaXBwZXJMaWIuZnJvbVBhdGgobmF0aXZlUGF0aCk7XHJcbiAgaWYgKGZyZWVOYXRpdmVQYXRoKSB7XHJcbiAgICBuYXRpdmVQYXRoLmRlbGV0ZSgpO1xyXG4gIH1cclxuICByZXR1cm4gYXJyYXk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkb3VibGVBcnJheVRvUGF0aChcclxuICBuYXRpdmVDbGlwcGVyTGliOiBOYXRpdmVDbGlwcGVyTGliSW5zdGFuY2UsXHJcbiAgYXJyYXk6IEZsb2F0NjRBcnJheSxcclxuICBfZnJlZURvdWJsZUFycmF5OiBib29sZWFuLFxyXG4gIHN0YXJ0UHRyOiBudW1iZXJcclxuKTogeyBwYXRoOiBQYXRoOyBwdHJFbmQ6IG51bWJlciB9IHtcclxuICBjb25zdCBsZW4gPSBhcnJheVtzdGFydFB0cl07XHJcbiAgY29uc3QgcGF0aCA9IFtdO1xyXG4gIHBhdGgubGVuZ3RoID0gbGVuO1xyXG5cclxuICBsZXQgYXJyYXlJID0gMSArIHN0YXJ0UHRyO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgIHBhdGhbaV0gPSB7XHJcbiAgICAgIHg6IGFycmF5W2FycmF5SSsrXSxcclxuICAgICAgeTogYXJyYXlbYXJyYXlJKytdXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgaWYgKF9mcmVlRG91YmxlQXJyYXkpIHtcclxuICAgIGZyZWVUeXBlZEFycmF5KG5hdGl2ZUNsaXBwZXJMaWIsIGFycmF5KTtcclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBwYXRoOiBwYXRoLFxyXG4gICAgcHRyRW5kOiBhcnJheUlcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbmF0aXZlUGF0aFRvUGF0aChcclxuICBuYXRpdmVDbGlwcGVyTGliOiBOYXRpdmVDbGlwcGVyTGliSW5zdGFuY2UsXHJcbiAgbmF0aXZlUGF0aDogTmF0aXZlUGF0aCxcclxuICBmcmVlTmF0aXZlUGF0aDogYm9vbGVhblxyXG4pOiBQYXRoIHtcclxuICBjb25zdCBhcnJheSA9IG5hdGl2ZVBhdGhUb0RvdWJsZUFycmF5KG5hdGl2ZUNsaXBwZXJMaWIsIG5hdGl2ZVBhdGgsIGZyZWVOYXRpdmVQYXRoKTtcclxuICByZXR1cm4gZG91YmxlQXJyYXlUb1BhdGgobmF0aXZlQ2xpcHBlckxpYiwgYXJyYXksIHRydWUsIDApLnBhdGg7XHJcbn1cclxuIl19