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
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 += 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==