UNPKG

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

68 lines 9.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.nativePathsToPaths = exports.doubleArrayToPaths = exports.nativePathsToDoubleArray = exports.pathsToNativePaths = exports.doubleArrayToNativePaths = exports.pathsToDoubleArray = void 0; var mem_1 = require("./mem"); var PathToNativePath_1 = require("./PathToNativePath"); // js to c++ function pathsToDoubleArray(nativeClipperLib, myPaths) { var nofPaths = myPaths.length; // first calculate nof items required var nofItems = 1; // for path count for (var i = 0; i < nofPaths; i++) { nofItems += PathToNativePath_1.getNofItemsForPath(myPaths[i]); } var heapBytes = mem_1.mallocDoubleArray(nativeClipperLib, nofItems); heapBytes[0] = nofPaths; var ptr = 1; for (var i = 0; i < nofPaths; i++) { var path = myPaths[i]; ptr = PathToNativePath_1.writePathToDoubleArray(path, heapBytes, ptr); } return heapBytes; } exports.pathsToDoubleArray = pathsToDoubleArray; function doubleArrayToNativePaths(nativeClipperLib, array, freeArray) { var p = new nativeClipperLib.Paths(); nativeClipperLib.toPaths(p, array.byteOffset); if (freeArray) { mem_1.freeTypedArray(nativeClipperLib, array); } return p; } exports.doubleArrayToNativePaths = doubleArrayToNativePaths; function pathsToNativePaths(nativeClipperLib, paths) { var array = pathsToDoubleArray(nativeClipperLib, paths); return doubleArrayToNativePaths(nativeClipperLib, array, true); } exports.pathsToNativePaths = pathsToNativePaths; // c++ to js function nativePathsToDoubleArray(nativeClipperLib, nativePaths, freeNativePaths) { var array = nativeClipperLib.fromPaths(nativePaths); if (freeNativePaths) { nativePaths.delete(); } return array; } exports.nativePathsToDoubleArray = nativePathsToDoubleArray; function doubleArrayToPaths(nativeClipperLib, array, _freeDoubleArray) { var len = array[0]; var paths = []; paths.length = len; var arrayI = 1; for (var i = 0; i < len; i++) { var result = PathToNativePath_1.doubleArrayToPath(nativeClipperLib, array, false, arrayI); paths[i] = result.path; arrayI = result.ptrEnd; } if (_freeDoubleArray) { mem_1.freeTypedArray(nativeClipperLib, array); } return paths; } exports.doubleArrayToPaths = doubleArrayToPaths; function nativePathsToPaths(nativeClipperLib, nativePaths, freeNativePaths) { var array = nativePathsToDoubleArray(nativeClipperLib, nativePaths, freeNativePaths); return doubleArrayToPaths(nativeClipperLib, array, true); } exports.nativePathsToPaths = nativePathsToPaths; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGF0aHNUb05hdGl2ZVBhdGhzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25hdGl2ZS9QYXRoc1RvTmF0aXZlUGF0aHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsNkJBQTBEO0FBRzFELHVEQUFtRztBQUVuRyxZQUFZO0FBRVosU0FBZ0Isa0JBQWtCLENBQ2hDLGdCQUEwQyxFQUMxQyxPQUFzQjtJQUV0QixJQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBRWhDLHFDQUFxQztJQUNyQyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxpQkFBaUI7SUFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNqQyxRQUFRLElBQUkscUNBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDNUM7SUFDRCxJQUFNLFNBQVMsR0FBRyx1QkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNoRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO0lBRXhCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNaLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDakMsSUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLEdBQUcsR0FBRyx5Q0FBc0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ3BEO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQXJCRCxnREFxQkM7QUFFRCxTQUFnQix3QkFBd0IsQ0FDdEMsZ0JBQTBDLEVBQzFDLEtBQW1CLEVBQ25CLFNBQWtCO0lBRWxCLElBQU0sQ0FBQyxHQUFHLElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUMsSUFBSSxTQUFTLEVBQUU7UUFDYixvQkFBYyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ3pDO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBWEQsNERBV0M7QUFFRCxTQUFnQixrQkFBa0IsQ0FDaEMsZ0JBQTBDLEVBQzFDLEtBQW9CO0lBRXBCLElBQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFELE9BQU8sd0JBQXdCLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pFLENBQUM7QUFORCxnREFNQztBQUVELFlBQVk7QUFFWixTQUFnQix3QkFBd0IsQ0FDdEMsZ0JBQTBDLEVBQzFDLFdBQXdCLEVBQ3hCLGVBQXdCO0lBRXhCLElBQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN0RCxJQUFJLGVBQWUsRUFBRTtRQUNuQixXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7S0FDdEI7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFWRCw0REFVQztBQUVELFNBQWdCLGtCQUFrQixDQUNoQyxnQkFBMEMsRUFDMUMsS0FBbUIsRUFDbkIsZ0JBQXlCO0lBRXpCLElBQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixJQUFNLEtBQUssR0FBVyxFQUFFLENBQUM7SUFDekIsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFFbkIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM1QixJQUFNLE1BQU0sR0FBRyxvQ0FBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0tBQ3hCO0lBRUQsSUFBSSxnQkFBZ0IsRUFBRTtRQUNwQixvQkFBYyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ3pDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBckJELGdEQXFCQztBQUVELFNBQWdCLGtCQUFrQixDQUNoQyxnQkFBMEMsRUFDMUMsV0FBd0IsRUFDeEIsZUFBd0I7SUFFeEIsSUFBTSxLQUFLLEdBQUcsd0JBQXdCLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3ZGLE9BQU8sa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFQRCxnREFPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhdGggfSBmcm9tIFwiLi4vUGF0aFwiO1xyXG5pbXBvcnQgeyBQYXRocywgUmVhZG9ubHlQYXRocyB9IGZyb20gXCIuLi9QYXRoc1wiO1xyXG5pbXBvcnQgeyBmcmVlVHlwZWRBcnJheSwgbWFsbG9jRG91YmxlQXJyYXkgfSBmcm9tIFwiLi9tZW1cIjtcclxuaW1wb3J0IHsgTmF0aXZlQ2xpcHBlckxpYkluc3RhbmNlIH0gZnJvbSBcIi4vTmF0aXZlQ2xpcHBlckxpYkluc3RhbmNlXCI7XHJcbmltcG9ydCB7IE5hdGl2ZVBhdGhzIH0gZnJvbSBcIi4vTmF0aXZlUGF0aHNcIjtcclxuaW1wb3J0IHsgZG91YmxlQXJyYXlUb1BhdGgsIGdldE5vZkl0ZW1zRm9yUGF0aCwgd3JpdGVQYXRoVG9Eb3VibGVBcnJheSB9IGZyb20gXCIuL1BhdGhUb05hdGl2ZVBhdGhcIjtcclxuXHJcbi8vIGpzIHRvIGMrK1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhzVG9Eb3VibGVBcnJheShcclxuICBuYXRpdmVDbGlwcGVyTGliOiBOYXRpdmVDbGlwcGVyTGliSW5zdGFuY2UsXHJcbiAgbXlQYXRoczogUmVhZG9ubHlQYXRoc1xyXG4pOiBGbG9hdDY0QXJyYXkge1xyXG4gIGNvbnN0IG5vZlBhdGhzID0gbXlQYXRocy5sZW5ndGg7XHJcblxyXG4gIC8vIGZpcnN0IGNhbGN1bGF0ZSBub2YgaXRlbXMgcmVxdWlyZWRcclxuICBsZXQgbm9mSXRlbXMgPSAxOyAvLyBmb3IgcGF0aCBjb3VudFxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbm9mUGF0aHM7IGkrKykge1xyXG4gICAgbm9mSXRlbXMgKz0gZ2V0Tm9mSXRlbXNGb3JQYXRoKG15UGF0aHNbaV0pO1xyXG4gIH1cclxuICBjb25zdCBoZWFwQnl0ZXMgPSBtYWxsb2NEb3VibGVBcnJheShuYXRpdmVDbGlwcGVyTGliLCBub2ZJdGVtcyk7XHJcbiAgaGVhcEJ5dGVzWzBdID0gbm9mUGF0aHM7XHJcblxyXG4gIGxldCBwdHIgPSAxO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbm9mUGF0aHM7IGkrKykge1xyXG4gICAgY29uc3QgcGF0aCA9IG15UGF0aHNbaV07XHJcbiAgICBwdHIgPSB3cml0ZVBhdGhUb0RvdWJsZUFycmF5KHBhdGgsIGhlYXBCeXRlcywgcHRyKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBoZWFwQnl0ZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkb3VibGVBcnJheVRvTmF0aXZlUGF0aHMoXHJcbiAgbmF0aXZlQ2xpcHBlckxpYjogTmF0aXZlQ2xpcHBlckxpYkluc3RhbmNlLFxyXG4gIGFycmF5OiBGbG9hdDY0QXJyYXksXHJcbiAgZnJlZUFycmF5OiBib29sZWFuXHJcbik6IE5hdGl2ZVBhdGhzIHtcclxuICBjb25zdCBwID0gbmV3IG5hdGl2ZUNsaXBwZXJMaWIuUGF0aHMoKTtcclxuICBuYXRpdmVDbGlwcGVyTGliLnRvUGF0aHMocCwgYXJyYXkuYnl0ZU9mZnNldCk7XHJcbiAgaWYgKGZyZWVBcnJheSkge1xyXG4gICAgZnJlZVR5cGVkQXJyYXkobmF0aXZlQ2xpcHBlckxpYiwgYXJyYXkpO1xyXG4gIH1cclxuICByZXR1cm4gcDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhzVG9OYXRpdmVQYXRocyhcclxuICBuYXRpdmVDbGlwcGVyTGliOiBOYXRpdmVDbGlwcGVyTGliSW5zdGFuY2UsXHJcbiAgcGF0aHM6IFJlYWRvbmx5UGF0aHNcclxuKTogTmF0aXZlUGF0aHMge1xyXG4gIGNvbnN0IGFycmF5ID0gcGF0aHNUb0RvdWJsZUFycmF5KG5hdGl2ZUNsaXBwZXJMaWIsIHBhdGhzKTtcclxuICByZXR1cm4gZG91YmxlQXJyYXlUb05hdGl2ZVBhdGhzKG5hdGl2ZUNsaXBwZXJMaWIsIGFycmF5LCB0cnVlKTtcclxufVxyXG5cclxuLy8gYysrIHRvIGpzXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbmF0aXZlUGF0aHNUb0RvdWJsZUFycmF5KFxyXG4gIG5hdGl2ZUNsaXBwZXJMaWI6IE5hdGl2ZUNsaXBwZXJMaWJJbnN0YW5jZSxcclxuICBuYXRpdmVQYXRoczogTmF0aXZlUGF0aHMsXHJcbiAgZnJlZU5hdGl2ZVBhdGhzOiBib29sZWFuXHJcbik6IEZsb2F0NjRBcnJheSB7XHJcbiAgY29uc3QgYXJyYXkgPSBuYXRpdmVDbGlwcGVyTGliLmZyb21QYXRocyhuYXRpdmVQYXRocyk7XHJcbiAgaWYgKGZyZWVOYXRpdmVQYXRocykge1xyXG4gICAgbmF0aXZlUGF0aHMuZGVsZXRlKCk7XHJcbiAgfVxyXG4gIHJldHVybiBhcnJheTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRvdWJsZUFycmF5VG9QYXRocyhcclxuICBuYXRpdmVDbGlwcGVyTGliOiBOYXRpdmVDbGlwcGVyTGliSW5zdGFuY2UsXHJcbiAgYXJyYXk6IEZsb2F0NjRBcnJheSxcclxuICBfZnJlZURvdWJsZUFycmF5OiBib29sZWFuXHJcbik6IFBhdGhzIHtcclxuICBjb25zdCBsZW4gPSBhcnJheVswXTtcclxuICBjb25zdCBwYXRoczogUGF0aFtdID0gW107XHJcbiAgcGF0aHMubGVuZ3RoID0gbGVuO1xyXG5cclxuICBsZXQgYXJyYXlJID0gMTtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBkb3VibGVBcnJheVRvUGF0aChuYXRpdmVDbGlwcGVyTGliLCBhcnJheSwgZmFsc2UsIGFycmF5SSk7XHJcbiAgICBwYXRoc1tpXSA9IHJlc3VsdC5wYXRoO1xyXG4gICAgYXJyYXlJID0gcmVzdWx0LnB0ckVuZDtcclxuICB9XHJcblxyXG4gIGlmIChfZnJlZURvdWJsZUFycmF5KSB7XHJcbiAgICBmcmVlVHlwZWRBcnJheShuYXRpdmVDbGlwcGVyTGliLCBhcnJheSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcGF0aHM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBuYXRpdmVQYXRoc1RvUGF0aHMoXHJcbiAgbmF0aXZlQ2xpcHBlckxpYjogTmF0aXZlQ2xpcHBlckxpYkluc3RhbmNlLFxyXG4gIG5hdGl2ZVBhdGhzOiBOYXRpdmVQYXRocyxcclxuICBmcmVlTmF0aXZlUGF0aHM6IGJvb2xlYW5cclxuKTogUGF0aHMge1xyXG4gIGNvbnN0IGFycmF5ID0gbmF0aXZlUGF0aHNUb0RvdWJsZUFycmF5KG5hdGl2ZUNsaXBwZXJMaWIsIG5hdGl2ZVBhdGhzLCBmcmVlTmF0aXZlUGF0aHMpO1xyXG4gIHJldHVybiBkb3VibGVBcnJheVRvUGF0aHMobmF0aXZlQ2xpcHBlckxpYiwgYXJyYXksIHRydWUpO1xyXG59XHJcbiJdfQ==