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
JavaScript
;
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