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.52 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 += (0, PathToNativePath_1.getNofItemsForPath)(myPaths[i]); } var heapBytes = (0, mem_1.mallocDoubleArray)(nativeClipperLib, nofItems); heapBytes[0] = nofPaths; var ptr = 1; for (var i = 0; i < nofPaths; i++) { var path = myPaths[i]; ptr = (0, 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) { (0, 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 = (0, PathToNativePath_1.doubleArrayToPath)(nativeClipperLib, array, false, arrayI); paths[i] = result.path; arrayI = result.ptrEnd; } if (_freeDoubleArray) { (0, 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGF0aHNUb05hdGl2ZVBhdGhzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25hdGl2ZS9QYXRoc1RvTmF0aXZlUGF0aHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsNkJBQTBEO0FBRzFELHVEQUFtRztBQUVuRyxZQUFZO0FBRVosU0FBZ0Isa0JBQWtCLENBQ2hDLGdCQUEwQyxFQUMxQyxPQUFzQjtJQUV0QixJQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBRWhDLHFDQUFxQztJQUNyQyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxpQkFBaUI7SUFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNqQyxRQUFRLElBQUksSUFBQSxxQ0FBa0IsRUFBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1QztJQUNELElBQU0sU0FBUyxHQUFHLElBQUEsdUJBQWlCLEVBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDaEUsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUV4QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDWixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2pDLElBQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixHQUFHLEdBQUcsSUFBQSx5Q0FBc0IsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ3BEO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQXJCRCxnREFxQkM7QUFFRCxTQUFnQix3QkFBd0IsQ0FDdEMsZ0JBQTBDLEVBQzFDLEtBQW1CLEVBQ25CLFNBQWtCO0lBRWxCLElBQU0sQ0FBQyxHQUFHLElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUMsSUFBSSxTQUFTLEVBQUU7UUFDYixJQUFBLG9CQUFjLEVBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDekM7SUFDRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFYRCw0REFXQztBQUVELFNBQWdCLGtCQUFrQixDQUNoQyxnQkFBMEMsRUFDMUMsS0FBb0I7SUFFcEIsSUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUQsT0FBTyx3QkFBd0IsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDakUsQ0FBQztBQU5ELGdEQU1DO0FBRUQsWUFBWTtBQUVaLFNBQWdCLHdCQUF3QixDQUN0QyxnQkFBMEMsRUFDMUMsV0FBd0IsRUFDeEIsZUFBd0I7SUFFeEIsSUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3RELElBQUksZUFBZSxFQUFFO1FBQ25CLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztLQUN0QjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQVZELDREQVVDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQ2hDLGdCQUEwQyxFQUMxQyxLQUFtQixFQUNuQixnQkFBeUI7SUFFekIsSUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLElBQU0sS0FBSyxHQUFXLEVBQUUsQ0FBQztJQUN6QixLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUVuQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzVCLElBQU0sTUFBTSxHQUFHLElBQUEsb0NBQWlCLEVBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN6RSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN2QixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztLQUN4QjtJQUVELElBQUksZ0JBQWdCLEVBQUU7UUFDcEIsSUFBQSxvQkFBYyxFQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ3pDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBckJELGdEQXFCQztBQUVELFNBQWdCLGtCQUFrQixDQUNoQyxnQkFBMEMsRUFDMUMsV0FBd0IsRUFDeEIsZUFBd0I7SUFFeEIsSUFBTSxLQUFLLEdBQUcsd0JBQXdCLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3ZGLE9BQU8sa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFQRCxnREFPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhdGggfSBmcm9tIFwiLi4vUGF0aFwiO1xuaW1wb3J0IHsgUGF0aHMsIFJlYWRvbmx5UGF0aHMgfSBmcm9tIFwiLi4vUGF0aHNcIjtcbmltcG9ydCB7IGZyZWVUeXBlZEFycmF5LCBtYWxsb2NEb3VibGVBcnJheSB9IGZyb20gXCIuL21lbVwiO1xuaW1wb3J0IHsgTmF0aXZlQ2xpcHBlckxpYkluc3RhbmNlIH0gZnJvbSBcIi4vTmF0aXZlQ2xpcHBlckxpYkluc3RhbmNlXCI7XG5pbXBvcnQgeyBOYXRpdmVQYXRocyB9IGZyb20gXCIuL05hdGl2ZVBhdGhzXCI7XG5pbXBvcnQgeyBkb3VibGVBcnJheVRvUGF0aCwgZ2V0Tm9mSXRlbXNGb3JQYXRoLCB3cml0ZVBhdGhUb0RvdWJsZUFycmF5IH0gZnJvbSBcIi4vUGF0aFRvTmF0aXZlUGF0aFwiO1xuXG4vLyBqcyB0byBjKytcblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhzVG9Eb3VibGVBcnJheShcbiAgbmF0aXZlQ2xpcHBlckxpYjogTmF0aXZlQ2xpcHBlckxpYkluc3RhbmNlLFxuICBteVBhdGhzOiBSZWFkb25seVBhdGhzXG4pOiBGbG9hdDY0QXJyYXkge1xuICBjb25zdCBub2ZQYXRocyA9IG15UGF0aHMubGVuZ3RoO1xuXG4gIC8vIGZpcnN0IGNhbGN1bGF0ZSBub2YgaXRlbXMgcmVxdWlyZWRcbiAgbGV0IG5vZkl0ZW1zID0gMTsgLy8gZm9yIHBhdGggY291bnRcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2ZQYXRoczsgaSsrKSB7XG4gICAgbm9mSXRlbXMgKz0gZ2V0Tm9mSXRlbXNGb3JQYXRoKG15UGF0aHNbaV0pO1xuICB9XG4gIGNvbnN0IGhlYXBCeXRlcyA9IG1hbGxvY0RvdWJsZUFycmF5KG5hdGl2ZUNsaXBwZXJMaWIsIG5vZkl0ZW1zKTtcbiAgaGVhcEJ5dGVzWzBdID0gbm9mUGF0aHM7XG5cbiAgbGV0IHB0ciA9IDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbm9mUGF0aHM7IGkrKykge1xuICAgIGNvbnN0IHBhdGggPSBteVBhdGhzW2ldO1xuICAgIHB0ciA9IHdyaXRlUGF0aFRvRG91YmxlQXJyYXkocGF0aCwgaGVhcEJ5dGVzLCBwdHIpO1xuICB9XG5cbiAgcmV0dXJuIGhlYXBCeXRlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvdWJsZUFycmF5VG9OYXRpdmVQYXRocyhcbiAgbmF0aXZlQ2xpcHBlckxpYjogTmF0aXZlQ2xpcHBlckxpYkluc3RhbmNlLFxuICBhcnJheTogRmxvYXQ2NEFycmF5LFxuICBmcmVlQXJyYXk6IGJvb2xlYW5cbik6IE5hdGl2ZVBhdGhzIHtcbiAgY29uc3QgcCA9IG5ldyBuYXRpdmVDbGlwcGVyTGliLlBhdGhzKCk7XG4gIG5hdGl2ZUNsaXBwZXJMaWIudG9QYXRocyhwLCBhcnJheS5ieXRlT2Zmc2V0KTtcbiAgaWYgKGZyZWVBcnJheSkge1xuICAgIGZyZWVUeXBlZEFycmF5KG5hdGl2ZUNsaXBwZXJMaWIsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhzVG9OYXRpdmVQYXRocyhcbiAgbmF0aXZlQ2xpcHBlckxpYjogTmF0aXZlQ2xpcHBlckxpYkluc3RhbmNlLFxuICBwYXRoczogUmVhZG9ubHlQYXRoc1xuKTogTmF0aXZlUGF0aHMge1xuICBjb25zdCBhcnJheSA9IHBhdGhzVG9Eb3VibGVBcnJheShuYXRpdmVDbGlwcGVyTGliLCBwYXRocyk7XG4gIHJldHVybiBkb3VibGVBcnJheVRvTmF0aXZlUGF0aHMobmF0aXZlQ2xpcHBlckxpYiwgYXJyYXksIHRydWUpO1xufVxuXG4vLyBjKysgdG8ganNcblxuZXhwb3J0IGZ1bmN0aW9uIG5hdGl2ZVBhdGhzVG9Eb3VibGVBcnJheShcbiAgbmF0aXZlQ2xpcHBlckxpYjogTmF0aXZlQ2xpcHBlckxpYkluc3RhbmNlLFxuICBuYXRpdmVQYXRoczogTmF0aXZlUGF0aHMsXG4gIGZyZWVOYXRpdmVQYXRoczogYm9vbGVhblxuKTogRmxvYXQ2NEFycmF5IHtcbiAgY29uc3QgYXJyYXkgPSBuYXRpdmVDbGlwcGVyTGliLmZyb21QYXRocyhuYXRpdmVQYXRocyk7XG4gIGlmIChmcmVlTmF0aXZlUGF0aHMpIHtcbiAgICBuYXRpdmVQYXRocy5kZWxldGUoKTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb3VibGVBcnJheVRvUGF0aHMoXG4gIG5hdGl2ZUNsaXBwZXJMaWI6IE5hdGl2ZUNsaXBwZXJMaWJJbnN0YW5jZSxcbiAgYXJyYXk6IEZsb2F0NjRBcnJheSxcbiAgX2ZyZWVEb3VibGVBcnJheTogYm9vbGVhblxuKTogUGF0aHMge1xuICBjb25zdCBsZW4gPSBhcnJheVswXTtcbiAgY29uc3QgcGF0aHM6IFBhdGhbXSA9IFtdO1xuICBwYXRocy5sZW5ndGggPSBsZW47XG5cbiAgbGV0IGFycmF5SSA9IDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCByZXN1bHQgPSBkb3VibGVBcnJheVRvUGF0aChuYXRpdmVDbGlwcGVyTGliLCBhcnJheSwgZmFsc2UsIGFycmF5SSk7XG4gICAgcGF0aHNbaV0gPSByZXN1bHQucGF0aDtcbiAgICBhcnJheUkgPSByZXN1bHQucHRyRW5kO1xuICB9XG5cbiAgaWYgKF9mcmVlRG91YmxlQXJyYXkpIHtcbiAgICBmcmVlVHlwZWRBcnJheShuYXRpdmVDbGlwcGVyTGliLCBhcnJheSk7XG4gIH1cblxuICByZXR1cm4gcGF0aHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYXRpdmVQYXRoc1RvUGF0aHMoXG4gIG5hdGl2ZUNsaXBwZXJMaWI6IE5hdGl2ZUNsaXBwZXJMaWJJbnN0YW5jZSxcbiAgbmF0aXZlUGF0aHM6IE5hdGl2ZVBhdGhzLFxuICBmcmVlTmF0aXZlUGF0aHM6IGJvb2xlYW5cbik6IFBhdGhzIHtcbiAgY29uc3QgYXJyYXkgPSBuYXRpdmVQYXRoc1RvRG91YmxlQXJyYXkobmF0aXZlQ2xpcHBlckxpYiwgbmF0aXZlUGF0aHMsIGZyZWVOYXRpdmVQYXRocyk7XG4gIHJldHVybiBkb3VibGVBcnJheVRvUGF0aHMobmF0aXZlQ2xpcHBlckxpYiwgYXJyYXksIHRydWUpO1xufVxuIl19