{"_id":"@opencamlib/opencamlib","_rev":"30-54d0b5553a2726ec642fe7f36893c820","name":"@opencamlib/opencamlib","dist-tags":{"latest":"2023.1.11","dev":"2023.10.28-dev.327"},"versions":{"0.0.10":{"name":"@opencamlib/opencamlib","version":"0.0.10","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","stl":"^1.1.1","typescript":"^4.9.3"},"types":"./lib/napi/index.d.ts","gitHead":"ec36c8195b860e3f22bef53c37ef3a5c88b28f67","_id":"@opencamlib/opencamlib@0.0.10","_nodeVersion":"18.12.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-WWgLrQXKG1Sap4Rx1YjdD7BUMavqmfLV0D2GwltGr9rwXtAQY1LO6M5T6lcdGa8dkUqwPNG4kx7uJWIvgzcIDQ==","shasum":"b7ce8c9baeb9feb0f995f246f6e5db3d004e5476","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-0.0.10.tgz","fileCount":62,"unpackedSize":1294348,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSzbha1v8m895xbrTm8p5SGoLLNGVD6SHyE8gxTwqoiAIgVkF4DRNKotubuOWsG6tsXhGG/y6hcXKNwJ1Y81qIkYU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjj1zUACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrfkhAAjKMTeLtBBe6yo4yJDBwaB8PA+C49U6FGEJRIX3x8zUGLYncA\r\nixMkfzUtQoKG/SHExGITDRvCjTrObqGwUD7Efbl3EXQYujpwu/CgXH24jouP\r\nb1csWTdNxS2FYRfv0z7fTwP+AZXx0JTWALCV30v33f8BEaHjPwt7gZQbRmZB\r\nDlDbmGvvdOOB52tb4BOlM58nsLFGKDX+wbsQ97FK6qE3w/o4JEBPbr6lyQY2\r\nWWQbWRs0mOjjgXg4R7bi0Ounx5WZd7AdPnlQK68gSm6H0ihRpMQ33MygTr22\r\nhg8nIMfrDvscZkNkWRfwG0SMNeZSCKjDoSnCnCxA7/gxX89UOtHfH+CDwa62\r\nLIlcu6SYQOEpKBYG/2BE5+DJ8xgnSzYKQ2is0t1XwrcfGU7N7V8SRsG/zWKc\r\nKZlp29peFoDBPEBKB6p3OEzgIpn6AlL7sGXNQ8UN4kdozZGGQ7cs5VegLWen\r\nWlWqVQv+ib1jgln/hxEgzuKL1sIVgzTycQDD/FhjfpIfA4OJGpxactva3pAQ\r\nCvAaw5hxAqWnegi3QacyQ4OyCZCAKywu22S5bn3PW+GA1vkBEhSlQKC23LTd\r\njqupJgZD8vNVhmZtnlAOC3e4FJWTr2xrt1Cxhek72LyMuI0V1SEBvnMNJWIS\r\n0vrDMQsl+natIHEAgQklP6kONh97+JnW0jw=\r\n=yh8X\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_0.0.10_1670339796336_0.046992347038879556"},"_hasShrinkwrap":false},"0.0.11":{"name":"@opencamlib/opencamlib","version":"0.0.11","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","stl":"^1.1.1","typescript":"^4.9.3"},"types":"./lib/napi/index.d.ts","gitHead":"ec36c8195b860e3f22bef53c37ef3a5c88b28f67","_id":"@opencamlib/opencamlib@0.0.11","_nodeVersion":"18.12.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-zKTwCfhCiqtWi60TvwlB0ezB0UfKOv4Ijz1p8OeNHHlqemTOteTt8TzmpWDPNRevA15jgVmJrk+2QOEO7FZslg==","shasum":"7b9a29945f801bbe48b06fd1bc34caa4a77a9e2b","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-0.0.11.tgz","fileCount":61,"unpackedSize":1294302,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE578C6Qa4sJJcgoBwDJpymzCB8z9itfn+UMj5vyzY43AiBm5JWOw54q0Ef0QM/w4QWbsZV/7zCoIZaaOqNl8hJCXQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjj12aACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqQJg//fcs5Nb9vnEfr5AKuealkcUVlsRxIiyE81E9iP6wK6/oJUfoj\r\n1pJfNOl4dGXVY8MnUqDA7kLRbdI96ZNkUlxUZQo9L0LY3rzmVHSZfzHVaGR8\r\ncIVb9naAochdw8g/qMpkjjQwEYPPDYItJ1/rLTKC7Z8hCQrUofEIRXW1IOm5\r\nZuodyiCtbLSGJCrhnErJ5VXsA7sk0wdlgYrfXCU8JoPlZEmNcDa1J9wzG/K0\r\nLz6eOZ0pgEFCpq25B6XcN9/xvWsRU05W8HtQH3xuuN5seW6X5diEzqbVU6OS\r\n9nuXyQFBxKLN8bF/dK6+PAmgM/mvrn2CMv06kgOJt+cXa1PSgHhcoF086H5y\r\n7haJwnFkCf1sejJxqvaB63Qfq8J+g58w7J5Hc5QrH12taVwa7iDyLLVRb0ko\r\nYvJUW94JfOMXnYpWnyodnffi96qWTeoKhAuOAHWQ2hSofQhxVeuRtBMEZuVp\r\n3DLKWyta9/D6S0ug8DKOIz/qWdFARnXWbzbxijAoW65O4F2NSEn7wkdqhbby\r\nzT5xTellD3ckAFVtMYTjXsz99M/7sdhp6TroMYVWjtg5OdjPKqZSginS8P8l\r\nJZ/fn5l1VzOHxzOFf5p4hY0gH7aGo5LlxNwtIEIG4hDdXdjjfwNw+MAiiMt4\r\nYsV8E4n+S0BeLc8pU6hz94VbjWseHdMYWAE=\r\n=JqPe\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_0.0.11_1670339993982_0.7772227700380252"},"_hasShrinkwrap":false},"0.0.12":{"name":"@opencamlib/opencamlib","version":"0.0.12","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","stl":"^1.1.1","typescript":"^4.9.3"},"_id":"@opencamlib/opencamlib@0.0.12","_nodeVersion":"14.21.1","_npmVersion":"6.14.17","dist":{"integrity":"sha512-e36XpCVfLdMTsdbJEPXmz/5clQrbSyYe5IXDceRIjnDE9pgjduSEj92qaIOP2Yuizme896be2xG+THNtZHV2sw==","shasum":"176bc5ba969eed7acd0ead47bb09eb0836d9ea33","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-0.0.12.tgz","fileCount":69,"unpackedSize":6421942,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF173E/bYgOjjm/olRfI0P01MGab139hweK7i86RSvxDAiBsHg/V/8hTJrza6XNwiKAkcyPPRB8frN1KKdPCAA01Ng=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjkPYjACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrQcg/+JCfohCcSmvJKQa0tnKZp1mfOw2Q1r0S4ajnqIYfp9BSAiwcW\r\nwOI+yRnE1GAwqpDq5VgAqsKrHnRcZ2+af953AIFlFgZHgy6y+S0WR6hs/IEw\r\nkgoq9mvipsnnMTyiCT7wP+PTt3zfkFZ8kg254L8w1NyRwLdMppoamFW6YvrZ\r\n9ZPpfQ5d792ImjuVxvYQ5PJ0uoPXyMZRvY8BeawdByYdmhJkvo6adLEZHGWc\r\ny4hxklHO69/FgrmHBiRI+c+kBOQEVKBqyxe3NpMUszbdwT0HjbHLqY0uDqWo\r\nW1t9ZakDSkKf+U7Dc+Sil2v+tilMzv+vwbbX1h8dzQYVEj3rPRQ2UUOTYJMa\r\n9gBPXahu1mxfMHHrGDHocldt9OevhIWz6to8bddUcc9ytung8+bZVEaNwKXX\r\nNAIRhtygpfinGCAPZ22Bh4+CnPqfSyCX6/+UnktX0clD45fJOiBEEsJSSaNF\r\njstabWebGOb7kUi+pyyHf0AcHFt4UQ5cNh15f2iP4k4S8argllBg5AXIZhfx\r\nylLi8U1aH3OsRDgiVQ8669VvdEWyl9KHD0W6KrExW5tM/wmdvXYSic/kfQG1\r\n0/pO/gc2LlueXSpwp0cgA52GEPYrLsOJRLgAtZToNcwDs0TJR5i2SU8qsP7K\r\nW5wOaCo54Mu35t5xONqr0sYfCn1aXuNqZYw=\r\n=3ovA\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_0.0.12_1670444578730_0.9780288978785714"},"_hasShrinkwrap":false},"0.0.13":{"name":"@opencamlib/opencamlib","version":"0.0.13","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","stl":"^1.1.1","typescript":"^4.9.3"},"_id":"@opencamlib/opencamlib@0.0.13","_nodeVersion":"14.21.1","_npmVersion":"6.14.17","dist":{"integrity":"sha512-3i0s/4fmkQbMhA0hFHU18EEpYzgIddZpnwzkHOTXOqoRo0Q5WkNGmB8yeaZFJESLS2Oqs0iB9dUju/o45BbYyw==","shasum":"c07a0fd8c1071ebae80dd4bdc592bd6e7abe1e2c","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-0.0.13.tgz","fileCount":69,"unpackedSize":54364563,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCH3o52XSzNf/kpqY6S/p17fJo+XwNr+Ye3uRzsDWFJfoCIQCsDdcojNh6LiXShuiUuqZI9f5f+QikK5iwYk3QC2QZrA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjkURqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmon7hAAg70jLY6V6//BeUFg5Ha9GbofayZAVpAmnR+MsBWTB8KwM/gY\r\nZHdwPStY6ZkLtCz5k+FbWWezfPenYKOlj0/O2PflYiF4OBlZpEhd19yrMMl9\r\ncYIF6aH3LuiCiKNo9fzRn8kyrT9VmlNHxD0H98KHPR60GSec0+H6hANFRfL3\r\nSWEr1xwTLGVGys1wRf98DM+Bm00Plqv+ytO/uEUyArBXNLc17QIcDQwHSieC\r\ns07Y2t/hXt4RwVwC4WUyOB5P4UHs9ErIQFJ54xLnFXRI3FRpglWxXb/oh0tN\r\n8veVFAgWWL9wtfFLsO7XsRVs3vHQLHoHnsU3VH3ewzv1ErIoYvk/KNjkglOe\r\nA5lMloGuDNNiv1IQXm1ByNg37J7OhqzQjCAiop4WdPRefxv2wMQLPvJvV0tq\r\n1nG/c6PuaIq9ayuIWLaoiUDTOKEwcv4JCjEm506FwskoPsV+WntpDrIzgL5V\r\nEjjjyjel/dypro0wyusDhjTBRRF4O4Ek3jpWDYf4I8FnloUGmuxM7oJBMH/o\r\nR1O9lLS5maD/1oeWAXs18/1zmDhoHwH3aJwpe67s4QSqlCAaZx8Rjkdmd9yj\r\nFtnl3If1eAn9Pm0y75215I719jXfvoI8tWZnaW79nveTI7Zj57obmKiCFu1h\r\nxFL3DuJO1/FWpJo1O9zcSJ19an7rJJYgUt0=\r\n=uiE0\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_0.0.13_1670464618124_0.030676593102914707"},"_hasShrinkwrap":false},"2022.12.13":{"name":"@opencamlib/opencamlib","version":"2022.12.13","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"_id":"@opencamlib/opencamlib@2022.12.13","_nodeVersion":"14.21.1","_npmVersion":"6.14.17","dist":{"integrity":"sha512-H2iFoh3UtcN30Ao0x6Anx7VlRHsvFBe3gpI9NUwYijSgHxIOCCSe8dwGuDFIyM1h9jPm4IMml8SplKqFm/moGA==","shasum":"92a07608752274ef32ffb8a15f9ebddf1e9660fb","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2022.12.13.tgz","fileCount":70,"unpackedSize":6445142,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFGsFj+X/rLWtc7C0m7p0lLFla41U3j5tbjsEf4u2mA+AiEAx1qKMgWQ2d0eURD0i+p+3ANr25n9FUTZ/IvXGjWAXKA="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjl9FPACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq0ug//Tu8sPIcMSeB0N10gspEe778izhTduLOuehJJ+UoggnaRlt/4\r\nzEzCOxjEQsWu1qhetVKpWDgBqZ30Qje0qxq7w5nJI+hx/gL1dW+h5JJhvvSx\r\nqM5J3OgD7YE7vXXo5XjQnN5d0umjMhw6/37x651vH72SDnT5qZdfsEG48ORR\r\naLhrXSnbpHcnLQqK4+FMpZQEISqPNtH/PSZd2P015fZwGMxTyUBV73tu+/56\r\ntNiRILTvOY4MByui9f2BuFkAJ0vtGSBvQIKp+sIxB51d6dkX5Avo4+YxUyN+\r\nxBZYGc6ME4XArzryvJ7VJfTgGKq8aaXsb3YL4tyARZL7H7cWke3Rx9aLjX8p\r\nDG6uhxSQNAJytTj+OxFV4/4HjKWuWiv4B3dDFaQ1qPrabOJE2YEC9OSTNTA4\r\nuQ0SBt5K/G1v1eBCdo4VpftNYGvKhXf47BzKmLEjNGz8qGUuJ31pCGQ8cDYY\r\nnYCM+dxrbMzoR3IDvLuSSU8CXL7L6gGhx/WhxvtdlQPT8i0x/DdIF+vU9ueX\r\nku4JnYdmopUmL2OI021wnPa3Cbk7M3mbiCYWOfIvazxN4h1OJCA/fXhyOec3\r\n02wItbe8dA7krxIRSGHivrQ8SBEW36G3o8tWd0NjyJzEfRvZ6L09H27K7TO1\r\nJlLii0i8PpM0mPKR29pta4J2+gdWNdg+/yM=\r\n=KoH5\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2022.12.13_1670893903154_0.8951247997968623"},"_hasShrinkwrap":false},"2022.12.13-dev.285":{"name":"@opencamlib/opencamlib","version":"2022.12.13-dev.285","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"_id":"@opencamlib/opencamlib@2022.12.13-dev.285","_nodeVersion":"14.21.1","_npmVersion":"6.14.17","dist":{"integrity":"sha512-N4GkJZ8eFztb0KiSEsc6s0cL/LJRLbkCU7CSHLy5s8clFf7oq/13U2CZiiU+CCoW+WmCIA/OKhajJHEsa8LFpw==","shasum":"380a61d88c7beb1fa1a491ee3df73c25a3b4495d","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2022.12.13-dev.285.tgz","fileCount":70,"unpackedSize":6446369,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQConBZ4Jf1rhT1mFaW+PDHETRwcN8fhGgGiylUWfPadBgIhAK3vE5Y2jgrgqxzw7zLg0nAKAETU2JeC/3haG9SWpqpi"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjmJdWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqWFA//by0MmiOE3F52pJTo/4yzQQfvIGJeP2JZu2jAIb43NocIqmN4\r\nb9lyY32QqTi/7mIUwA45hW88ua+iHvJsT9Rv57HMvJb7mNflfOqZV7/hDKdQ\r\ng06cy0QePVQd09POz7+Ci9vPGbjJDH7UnHHw8ksu2ICQMwFjVPQcdRpyvyVX\r\n1AOJkKQrCbvo9Rgts2mHxSYCVXgFeoTuswhbl/p8Skz5AhD/grnK56Ulaukg\r\n6z/Eg5f9BsMbSAZrvwJHuUU6c7KadZtIAEK7G6kNzvi8+FyyUNU7Arfg8AZI\r\n0Zurk1XntiQBzrxGtAlftUgaJ8N276vb6EFZcd07btWg9Kc8i4XCocuyRUPi\r\nsuyRc3fXaFCrLlHpJ+as3CW2ESlZLpN2lJ4HwGFAlj7HWga528NQpYMgoG2A\r\ng4UDGetDQKpzxzgTtx/47ie11+c/DxrG9c0noB9ENOezQndqfppO1qVv8TUO\r\nubFyA4PbmmvJoHyZkR25hgBP7nJE3YUDNScN4+2LZEGUUD1PwwFR0jQstuwk\r\nX48AH81SR/UeAojnRwbAul7v6797HcU+P6waIpcKg1DjX1+/LgiS36qxIRiq\r\nI2C+b2thxOYJTZy6vYwkfpNqCObtTVFpUMfs4KTlzVaQQqpjzwJ5cqUnfPyx\r\nZ63NCD1l2xvbePhxI9M9wTW3ZkdUdm9SrY0=\r\n=XOBc\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2022.12.13-dev.285_1670944597892_0.6438877158177136"},"_hasShrinkwrap":false},"2022.12.13-dev.286":{"name":"@opencamlib/opencamlib","version":"2022.12.13-dev.286","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"_id":"@opencamlib/opencamlib@2022.12.13-dev.286","_nodeVersion":"14.21.1","_npmVersion":"6.14.17","dist":{"integrity":"sha512-70N2QUJVK64XkJEvKBQg7gAhEC4GY9eii3p7342glzILuUM5ew2wPrn0OxD1e+QZTWyI8x0PNM3gI+iW+lJtsg==","shasum":"703ae8e442b73a156e1b47341a017c0c0533e9f9","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2022.12.13-dev.286.tgz","fileCount":70,"unpackedSize":6446370,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAj7CYc58/s+S2f9HZACD+nFRfqXHpNPoWT1GG8yQzDFAiBb+XQGShawO/Zo+Sk6pYHbUctH3g/IcpghEf/xOmbgJA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjmLhFACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqBIw//R4093yRsIUL63SbF+xHkr9PqATjDpG78fimQSDFMilz05Mj/\r\n0AULV/Pio4anX48gWeGkTHxm/imScC/Dq44iT7yFBM5jwNXpRdDlWWSA1SxQ\r\n+GGKnDlPglEK+N7J6FCaq1L+lBSBJdnlbbpPN9Xe+BsQjJw/syYpfxoCOvza\r\nVdBZLkeJNVT21xdNta6PI/rLK0pO2t/rRUAVt+UoEM1CsiP1MB3e39GBY3Qj\r\nfqT2xIy34izgUXEdbK5wup31ZIRcS63Wa3r3+ilvCSE4AMZsCtLdrogjMGZz\r\nbxHher6+wKVFWD7ojEEKdLGlHVCtFhB9ngvjiKVEsZdnKdKzMdoHbbz0xanz\r\nFPzIlbjL2Q4+Mp2A+CY5cKB5UFH4zX3Mdqj+yP9ssQFUUq3UWBGKteVNw39N\r\nE5Kca8GTBDtLCUj1vSKDPKAox08P5bTKOte3bOY0k/WP32VJJTnYBZR0S7vJ\r\np/oynw3X0N0yS+zQDenqXD9tl5OKgz4XG3F+TYsFjMljRJyRazDMxKcHWjVJ\r\n4zweoF0r4+RwONCpqVu3cse26qePQL2NY1Gju0S6z4WUP5FWNt2lFFvqg79M\r\n2+2Wgx3eGvoMNlzeYb+tKyIZcsXMEpZjEu+atut+5naDFc4Vq+RD6+jKxvli\r\nuREWO88XUBUrpzdDb90twkXC9EVoHECm57g=\r\n=wtqV\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2022.12.13-dev.286_1670953028841_0.2743088946259922"},"_hasShrinkwrap":false},"2022.12.13-dev.287":{"name":"@opencamlib/opencamlib","version":"2022.12.13-dev.287","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"_id":"@opencamlib/opencamlib@2022.12.13-dev.287","_nodeVersion":"14.21.1","_npmVersion":"6.14.17","dist":{"integrity":"sha512-XjHX8MNARGQr2fG701i8ut3xTxbo1MI9wQFJv9asG29o/MpqO5aMAcIg1OZYPfNwvgP6sKXpknpShpKUYVo+cg==","shasum":"7c4f5edc7920bc3167821b2b76b5bf99a6b7a42b","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2022.12.13-dev.287.tgz","fileCount":70,"unpackedSize":6446682,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE2FIY48Il1YOS1TWB8+8D+adBYa7nzpfHLqddS0dWKxAiEAqsJeIxrCWchIXBppVCnmRAgM89FfXHBn4APWEMpcl/E="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjmM1oACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoDiw//RRta0DpsPzYvL/r0K9r4H1F1z8CKPS0gLGVT29U934eF37Hq\r\nr+Zd/oW5E19yT4VHzKHpKa0X81fSCGZGn6nqbPYJ6z+lqSeW4HELMAnFO/cE\r\n/oXhbntjdLvKxoWbebfyJMAXLbSKxlGVBxGHJnRFtXiIAqFmts4UB1kDQVcr\r\npnvdIprOKi3ttThqMbKxciA81tjYzIE1cCv2cLFth/8barIyKDH68KKUwivN\r\njqkrgpkitZizjeNiZRMvZJcoNbwC4T79pU/VEHcFSf+Nu1RNIZXz0Jp3z4TS\r\nDYI14I4CXrE3w3ROfjzF6GhrhfTOPn4SFFL/pPOSdcmGc/7RSBXMMoDdvMJp\r\nx16u9l9NAiaLH3vwR5e83nDHI0ty/c8bYWLtjngmZsuGXC+idbYePHgInB63\r\n5RYxWMMBKpU5jaV3Vcirbn2kFbFlXE3GhIELGEtpD5pxDH9o9fCjsCHHIfC5\r\ni5YF6Q2xanvGoYoE4ViGSDNCGvXXufnwjf/bL7hT/ITDeZXoQ+XdCDreFrNW\r\noUjrWylIbmAZpaNdK3OJzSVn1ZIGJWx/OXsn43TPUCGPQXaHlhwvshxtOd17\r\nA1uHFHgwYxXhv+rvdBsq66bUVjnv0SlC8E8M3iwDV38m5fr1EI4PIWfiTpta\r\nlEDdMfIHLc8LQID/dzClfjoHpAJ3MXNIm3E=\r\n=e+Cr\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2022.12.13-dev.287_1670958440577_0.19430641433958318"},"_hasShrinkwrap":false},"2022.12.14-dev.288":{"name":"@opencamlib/opencamlib","version":"2022.12.14-dev.288","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"readme":"##########\nOpenCAMLib\n##########\n\n.. image:: https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg\n    :target: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html\n\n.. image:: https://github.com/aewallin/opencamlib/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/aewallin/opencamlib/actions/workflows/test.yml\n\n.. image:: https://readthedocs.org/projects/opencamlib/badge/?version=latest\n    :target: https://opencamlib.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n************\nIntroduction\n************\n\nOpenCAMLib (ocl) is a library for creating 3D toolpaths for CNC-machines such as mills and lathes.\nIt is written in C++ and has bindings for Python, Node.js and the browser.\nAt the moment it supports the following algorithms:\n\n===========\nDrop-cutter\n===========\n\nThe drop cutter algorithm drops a cutter, positioned at a predefined (x,y) location, until it touches the 3D model.\n\n.. image:: ./docs/drop-cutter.png\n  :width: 200\n  :alt: Drop Cutter\n\n===========\nPush-cutter\n===========\n\nThe Push-cutter is used to create a Waterline toolpath that follows the shape of the model at a constant z-height in the xy-plane.\n\n.. image:: ./docs/push-cutter.png\n  :width: 200\n  :alt: Push Cutter\n\n=======\nCutters\n=======\n\nThe algorithms listed above can be used with following cutters:\n\n- **CylCutter** (flat end mill / cylindrical)\n- **BallCutter** (ball end mill / spherical)\n- **BullCutter** (radius end mill / toroidal)\n- **ConeCutter** (tapered end mill / conical)\n- **CompositeCutter** (combinations of the above / compound)\n\nFrom August 2018 OpenCAMLib is released under LGPL license.\n\n**********************\nPre-compiled Libraries\n**********************\n\nOpenCAMLib provides pre-compiled C++, Node.js and Python libraries for the following platforms and architectures:\n\n+-------------+------------------+\n| **Windows** | ia32 / x64       |\n+-------------+------------------+\n| **macOS**   | x86_64 / arm64   |\n+-------------+------------------+\n| **Linux**   | x86_64 / aarch64 |\n+-------------+------------------+\n\n- The Python library is called ``opencamlib`` and is hosted on PyPi (pypi.org), precompiled libraries are available for Python v3.7 up to v3.11.\n- The Node.js + emscripten library is called ``@opencamlib/opencamlib`` and is hosted on npm (npmjs.org), precompiled libraries are available for Node-API v3 and up.\n- The C++ library is called ``libocl`` and is hosted on our Github Releases page.\n\n======\nPython\n======\n\nThe Python library (hosted on PyPi) can be installed like this:\n\n..  code-block:: shell\n\n    pip install opencamlib\n\nOn some platforms, pip is called pip3, you might have to run:\n\n..  code-block:: shell\n\n    pip3 install opencamlib\n\nNote that pip / pip3 is will install packages for to the system installation of Python, if you want to install a package in a custom Python installation that is not in your $PATH\n(for example, the Python which comes with Blender), you can install packages like so:\n\n..  code-block:: shell\n\n    /path/to/your/custom/python -m pip install opencamlib\n\n==========\nJavaScript\n==========\n\nThe JavaScript library (hosted on npm) works in Node.js and the browser (by leveraging emscripten / WASM) can be installed like this:\n\n..  code-block:: shell\n\n    npm install --save @opencamlib/opencamlib\n\nOr, using yarn:\n\n..  code-block:: shell\n\n    yarn add @opencamlib/opencamlib\n\n===\nC++\n===\n\nPrecompiled C++ libraries are available on the Github Releases page (https://github.com/aewallin/opencamlib/releases).\nThis project also installs a OpenCAMLibConfig.cmake, which, if your project uses CMake, allows you to use ``find_package(OpenCAMLib REQUIRED)``.\nYou can see an example of that in use over here: ``examples/cpp/test/CMakeLists.txt``\n\n********************\nBuilding from Source\n********************\n\nHaving trouble with a pre-compiled library? Please report it to us.\nIf there are no pre-compiled libraries for your platform or architecture, or want to customize or package opencamlib, this is for you.\n\nOpenCAMLib uses functionality from a library called Boost.\nFor the Python library it uses an extra library called Boost.Python.\n\nOnly the Python bindings need Boost to be **compiled** (with Boost.Python).\nAll other libraries **DO NOT** need Boost to be compiled, in those cases, a headers only version will suffice.\nSo, if you are not compiling the Python libraries, simply download Boost, extract it into a folder, and tell CMake where to look for it.\n\nMake sure to download Boost from the boost.org downloads page, if you download it from github, you have to make sure to install the git submodules **and** build the headers.\n\nWe provide a ``install.sh`` script that helps with installation of dependencies and building OpenCAMLib libraries, you might want to take a look at it first.\nYou can run ``./install.sh --help`` to look at the available options, or inspect it's source code to find out more.\n\n============\nDependencies\n============\n\nTo compile OpenCAMLib, you need:\n\n- **C++ compiler** (It should at least support C++ 14)\n- **Git** (This is used for cloning the repository, and the emscripten SDK)\n- **CMake** (At least version 3.15)\n- **Boost** (When compiling the Python library, you have to **compile** Boost.Python for your Python version after installation)\n\nAt this time of writing, here are the packages to install:\n\nUbuntu Dependencies\n-------------------\n\n..  code-block:: shell\n\n    sudo apt install -y git cmake curl build-essential libboost-dev\n\nmacOS Dependencies\n------------------\n\n..  code-block:: shell\n\n    brew install git cmake curl boost python@3.11 boost-python3\n\nWindows Dependencies\n--------------------\n\nInstall\n\n- Visual Studio Build Tools (https://visualstudio.microsoft.com/visual-cpp-build-tools/)\n- Git (https://git-scm.com/download/win)\n- CMake (https://git-scm.com/download/win)\n\nBy downloading the installers from the internet, or by using your package manager.\n\n================\nBuilding for C++\n================\n\nThe C++ library is the easiest to build, it only depends on Boost's headers.\nMake sure you have a compiler, git, cmake and Boost installed (or simply download and extract it somewhere).\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    cmake .. -D CXX_LIB=\"ON\"\n    make . # try make -j4 for a faster build if you have a multi-core machine\n    make install .\n\nWhen boost is not in a standard location, you can add the ``-D BOOST_ROOT=/path/to/boost`` option to the cmake command.\n\n=======================\nBuilding for Emscripten\n=======================\n\nTo compile the emscripten library, first download, install and activate it using the following commands:\n\n..  code-block:: shell\n\n    git clone https://github.com/emscripten-core/emsdk.git\n    cd emsdk\n    ./emsdk install latest\n    ./emsdk activate latest\n\nNow you can compile opencamlib like this (make sure to replace the ``path/to/`` sections):\n\n..  code-block:: shell\n\n    source path/to/emsdk/emsdk_env.sh\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    emcmake cmake \\\n      -D CMAKE_BUILD_TYPE=\"Release\" \\\n      -D BUILD_EMSCRIPTEN_LIB=\"ON\" \\\n      -D USE_OPENMP=\"OFF\" \\\n      -D CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/src/npmpackage/build\" \\\n      -D BOOST_ROOT=\"/path/to/boost\" \\\n      ..\n    emmake make # try emmake make -j4 for a faster build if you have a multi-core machine\n\nNote that USE_OPENMP has been turned off, OpenMP is not supported with Emscripten at the moment\n\n====================\nBuilding for Node.js\n====================\n\nTo compile the Node.js library, install the dependencies in ``src/nodejslib``:\n\n..  code-block:: shell\n\n    cd src/nodejslib\n    npm install\n\nNext, use cmake-js to compile the library:\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    ../src/nodejslib/node_modules/.bin/cmake-js \\\n      build \\\n      --directory \"..\" \\\n      --out \".\" \\\n      --parallel 4 \\\n      --CD BUILD_NODEJS_LIB=\"ON\" \\\n      --CD USE_OPENMP=\"ON\" \\\n      --CD CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/build/Release/$(node --print 'process.platform')-nodejs-$(node --print 'process.arch')\" \\\n      --CD BOOST_ROOT=\"/path/to/boost\" \\\n      --config \"Release\"\n\n===================\nBuilding for Python\n===================\n\nThe Python library can be compiled similarly to the C++ example above, however, this time Boost.Python has to be compiled first.\nMost systems have Boost.Python available as a download, but only for a specific Python version only (usually the latest Python version).\nThese might work if you are using Python from the same package, unfortunately, this is not a very reliable method, so compiling them yourself is usually the best option.\n\nFirst, download and extract Boost:\n\n..  code-block:: shell\n\n    curl \"https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz\" --output \"boost_1_80_0.tar.gz\" --location\n    tar -zxf boost_1_80_0.tar.gz -C /tmp/boost\n    cd /tmp/boost/boost_1_80_0\n\nNow we can compile it:\n\n..  code-block:: shell\n\n    echo \"using python ;\" > ./user-config.jam\n    ./bootstrap.sh\n    ./b2 \\\n      -a \\\n      threading=\"multi\" \\\n      -j4 \\\n      variant=\"release\" \\\n      link=\"static\" \\\n      address-model=\"64\" \\\n      architecture=\"x86\" \\\n      --layout=\"system\" \\\n      --with-python \\\n      --user-config=\"./user-config.jam\" \\\n      cxxflags=\"-fPIC\" \\\n      stage\n\nNote that you can customize the user-config.jam file to point it to your Python installation\n(see: https://www.boost.org/doc/libs/1_78_0/libs/python/doc/html/building/configuring_boost_build.html).\nYou should also specify the correct architecture and address-model.\nOn windows, make sure to use windows style paths, e.g. ``C:\\\\path\\\\to\\\\Python``\n\n*****\nUsage\n*****\n\nPlease take a look at the ``examples/`` folder on how to use OpenCAMLib.\nFor each language there is an example named ``test`` which calls all of the algorithms.\n\n***************\nCommon Problems\n***************\n\nCompiling OpenCAMLib is unfortunately not very easy and there are many things that can go wrong.\nHere is a list of common problems and solutions.\n\n=================================================\nCould NOT find Boost (missing: Boost_INCLUDE_DIR)\n=================================================\n\nThis happens a lot, here are some of the reasons why this happens:\n\n**You don't have Boost installed.**\n\nIf you forgot to install boost, go ahead and download Boost from from their website: https://www.boost.org/users/download/ and extract it somewhere.\nNow, when compiling the C++ or node.js module, add the\n\n``-D BOOST_ROOT=/path/to/extracted/boost`` flag to the ``cmake ..`` command, or the.\n\n``--boost-prefix /path/to/extracted/boost`` flag to the ``./install.sh`` command\n\n**You installed Boost from Github.**\n\nThe boost that is hosted on Github does not have the headers yet! To compile those, you should run the following commands:\n\n..  code-block:: shell\n\n    ./bootstrap.sh\n    ./b2 headers\n\n**Your CMake version has a FindBoost module which is unaware of your Boost's version.**\n\nThe CMake module that looks for Boost, is usually not aware of the existence of the latest Boost versions.\nYou can help it by providing the version number of your Boost with the ``-D Boost_ADDITIONAL_VERSIONS=\"1.80.0\"`` flag.\nMake sure to change 1.80.0 with your version of Boost.\n\nIt can also be helpfull to enable ``Boost_DEBUG`` in the CMake configuration.\n\n***************\nCross Compiling\n***************\n\nTo compile OpenCAMLib for other architectures, we recommend the following strategies.\nAlways make sure to compile Boost for the correct architecture as well!\n\n=====\nmacOS\n=====\n\nCross compiling on macOS is possible by setting the CMake ``CMAKE_OSX_ARCHITECTURES`` flag.\nWhen using the ``install.sh`` script, you can use the ``--macos-architecture`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=======\nWindows\n=======\n\nCross compiling on Windows is possible by using the \"Visual Studio\" generator (default) and by setting the CMake ``CMAKE_GENERATOR_PLATFORM`` flag.\nWhen using the ``install.sh`` script, you can use the ``--cmake-generator-platform`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=====\nLinux\n=====\n\nTo ensure that compiled libraries work on older linux versions, it has to be compiled with an older Glibc version.\nThe easiest way to accomplish this is by using Docker, there are images available especially for this purpose.\nWhen using the ``install.sh`` script, you can use the ``--docker-image`` flag which will make the command run in a container with the given image name.\n\nC++ docker image\n----------------\n\nWhen cross compiling the C++ library, make sure to use an old Glibc, this is included in the dockcross docker images.\nFor a list of supported architectures, take a look at:\n\nhttps://github.com/dockcross/dockcross#summary-cross-compilers\n\nNode.js docker image\n--------------------\n\nCross compilers for node.js are available here:\n\nhttps://github.com/prebuild/docker-images\n\nPython docker image\n-------------------\n\nCross compilers for python are here:\n\nhttps://github.com/pypa/manylinux#manylinux2014-centos-7-based\n\n*****\nLinks\n*****\n\n- repository https://github.com/aewallin/opencamlib\n- PPAs\n  - https://launchpad.net/~iacobs/+archive/ubuntu/cnc/\n  - https://launchpad.net/~neomilium/+archive/ubuntu/cam\n  - https://launchpad.net/~freecad-community/+archive/ubuntu/ppa\n  - (updated 2012) https://launchpad.net/~anders-e-e-wallin/+archive/ubuntu/cam\n- mailing-list http://groups.google.com/group/opencamlib\n- IRC-channel #cam on irc.freenode.net\n- coding standard (?) http://www.possibility.com/Cpp/CppCodingStandard.html\n\n*********************\nOrganization of Files\n*********************\n\n(generate this with 'tree -dL 2')::\n\n ├── docs                        documentation (not much here yet!)\n ├── examples                    c++, emscripten, nodejs and python examples\n ├── scripts                     CI scripts for installing and building ocl\n ├── src\n │   ├── algo                    algorithms under development\n │   ├── common                  common algorithms and data-structures\n │   ├── cutters                 cutter-classes\n │   ├── cxxlib                  c++ library cmake config\n │   ├── deb                     debian package cmake config\n │   ├── dropcutter              drop-cutter algorithms and operations\n │   ├── emscriptenlib           bindings for emscripten library\n │   ├── geo                     primitive geometry classes (point, triangle, stlsurf, etc.)\n │   ├── nodejslib               Node.js library bindings and cmake config\n │   ├── npmpackage              combined Node.js and emscripten wrappers, for publishing to npm\n │   ├── pythonlib               python library bindings and cmake config\n └── stl                         STL files for testing\n","readmeFilename":"README.rst","_id":"@opencamlib/opencamlib@2022.12.14-dev.288","_nodeVersion":"14.21.1","_npmVersion":"6.14.17","dist":{"integrity":"sha512-XhWoknRxuwxaBvZ+5ls17vnLAP0XDCiPO01/IQjrFYHGHU6FFdXgVyxrzBusdLYJsbeJwZ6IWYGfztOp5CWZqg==","shasum":"45842013a219f3fad49e823815459f010fcd8d3d","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2022.12.14-dev.288.tgz","fileCount":70,"unpackedSize":6446682,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+EOvvA4akzyG/m+l3laVqAX8gAWtPK1NQ+xmXy32cBAIhAMTv4JYRVzgHstJ3WMwthY3ghXs9gEtPcyTwh8vYZC/2"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjmavlACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmptWg//QAbOz7TXiyszqwDiNoD/nKcpaYWjugNEVp9otZSjs6YsgbCe\r\nd2VNR4KCDtbzJxFWcgh6w1ZAz8Xzj3vu9vabQsB/DiUXx1JFnIAz9BEgmxhG\r\nx7/1UbZMD2zOzmqAynenRKbLiuTiu5qJzgk3sRG6uLeg9Kursndp7JClBZEG\r\nHniCOgdCQVpihDwkeYwwKibRC5z/ScDTAcyocM6WUkF1PSL9Q2HjISeGlqWZ\r\nfYwD2tcJb3qvubddpWwo8j5M1TACmFgZk8ezFt1FtKHZMV9Q2A4XkTnWRbEZ\r\nEMxF3cB7f0nSe62FtkewxMj4zUl6ma8/NX6HjyC0SzjC6Sp+qfrWGHp5IVIW\r\nQpWe0aMh/doosjIok70b4hxQRfW3TVP+XArv2yS554C1z6b3tSPl33hkiV2f\r\nRuJK1KIcWMzIyG/GpPTKMTBeT+cxqclqf5lnlzrIAOaIIwLg3nxUHH3prx8d\r\nZNrbsbUuoMD8Mi0Ue3SNZJ9j6AA6lcwRIIdpW0bHbpLBx5sXepbGFTgvlvj9\r\nIxc/7ETAaBXzuGjDRFibhC1sB7vXhfY3IbfPMNsnvjtvG+tuLs5ZdbGeegFK\r\nToDqpq8kfmaFDq0EMtaQZCqzmzhvlHXZl3ikLrszjg489aZ3ao15YmfkNsHW\r\nLuwh7KNKSmTe0Kgruq7H46qhqDCtHL/1zok=\r\n=maUZ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2022.12.14-dev.288_1671015397050_0.24009640818402023"},"_hasShrinkwrap":false},"2022.12.17-dev.289":{"name":"@opencamlib/opencamlib","version":"2022.12.17-dev.289","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"readme":"##########\nOpenCAMLib\n##########\n\n.. image:: https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg\n    :target: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html\n\n.. image:: https://github.com/aewallin/opencamlib/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/aewallin/opencamlib/actions/workflows/test.yml\n\n.. image:: https://readthedocs.org/projects/opencamlib/badge/?version=latest\n    :target: https://opencamlib.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n************\nIntroduction\n************\n\nOpenCAMLib (ocl) is a library for creating 3D toolpaths for CNC-machines such as mills and lathes.\nIt is written in C++ and has bindings for Python, Node.js and the browser.\nAt the moment it supports the following algorithms:\n\n===========\nDrop-cutter\n===========\n\nThe drop cutter algorithm drops a cutter, positioned at a predefined (x,y) location, until it touches the 3D model.\n\n.. image:: ./docs/drop-cutter.png\n  :width: 200\n  :alt: Drop Cutter\n\n===========\nPush-cutter\n===========\n\nThe Push-cutter is used to create a Waterline toolpath that follows the shape of the model at a constant z-height in the xy-plane.\n\n.. image:: ./docs/push-cutter.png\n  :width: 200\n  :alt: Push Cutter\n\n=======\nCutters\n=======\n\nThe algorithms listed above can be used with following cutters:\n\n- **CylCutter** (flat end mill / cylindrical)\n- **BallCutter** (ball end mill / spherical)\n- **BullCutter** (radius end mill / toroidal)\n- **ConeCutter** (tapered end mill / conical)\n- **CompositeCutter** (combinations of the above / compound)\n\nFrom August 2018 OpenCAMLib is released under LGPL license.\n\n**********************\nPre-compiled Libraries\n**********************\n\nOpenCAMLib provides pre-compiled C++, Node.js and Python libraries for the following platforms and architectures:\n\n+-------------+------------------+\n| **Windows** | ia32 / x64       |\n+-------------+------------------+\n| **macOS**   | x86_64 / arm64   |\n+-------------+------------------+\n| **Linux**   | x86_64 / aarch64 |\n+-------------+------------------+\n\n- The Python library is called ``opencamlib`` and is hosted on PyPi (pypi.org), precompiled libraries are available for Python v3.7 up to v3.11.\n- The Node.js + emscripten library is called ``@opencamlib/opencamlib`` and is hosted on npm (npmjs.org), precompiled libraries are available for Node-API v3 and up.\n- The C++ library is called ``libocl`` and is hosted on our Github Releases page.\n\n======\nPython\n======\n\nThe Python library (hosted on PyPi) can be installed like this:\n\n..  code-block:: shell\n\n    pip install opencamlib\n\nOn some platforms, pip is called pip3, you might have to run:\n\n..  code-block:: shell\n\n    pip3 install opencamlib\n\nNote that pip / pip3 is will install packages for to the system installation of Python, if you want to install a package in a custom Python installation that is not in your $PATH\n(for example, the Python which comes with Blender), you can install packages like so:\n\n..  code-block:: shell\n\n    /path/to/your/custom/python -m pip install opencamlib\n\nLastly, if you don't know where Python is, but you have access to it's interpreter (FreeCAD and Blender both have a Python console), you can simply enter this command in there to install opencamlib:\n\n..  code-block:: python\n\n    import sys; import subprocess; subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'opencamlib'])\n\n\n==========\nJavaScript\n==========\n\nThe JavaScript library (hosted on npm) works in Node.js and the browser (by leveraging emscripten / WASM) can be installed like this:\n\n..  code-block:: shell\n\n    npm install --save @opencamlib/opencamlib\n\nOr, using yarn:\n\n..  code-block:: shell\n\n    yarn add @opencamlib/opencamlib\n\n===\nC++\n===\n\nPrecompiled C++ libraries are available on the Github Releases page (https://github.com/aewallin/opencamlib/releases).\nThis project also installs a OpenCAMLibConfig.cmake, which, if your project uses CMake, allows you to use ``find_package(OpenCAMLib REQUIRED)``.\nYou can see an example of that in use over here: ``examples/cpp/test/CMakeLists.txt``\n\n********************\nBuilding from Source\n********************\n\nHaving trouble with a pre-compiled library? Please report it to us.\nIf there are no pre-compiled libraries for your platform or architecture, or want to customize or package opencamlib, this is for you.\n\nOpenCAMLib uses functionality from a library called Boost.\nFor the Python library it uses an extra library called Boost.Python.\n\nOnly the Python bindings need Boost to be **compiled** (with Boost.Python).\nAll other libraries **DO NOT** need Boost to be compiled, in those cases, a headers only version will suffice.\nSo, if you are not compiling the Python libraries, simply download Boost, extract it into a folder, and tell CMake where to look for it.\n\nMake sure to download Boost from the boost.org downloads page, if you download it from github, you have to make sure to install the git submodules **and** build the headers.\n\nWe provide a ``install.sh`` script that helps with installation of dependencies and building OpenCAMLib libraries, you might want to take a look at it first.\nYou can run ``./install.sh --help`` to look at the available options, or inspect it's source code to find out more.\n\n============\nDependencies\n============\n\nTo compile OpenCAMLib, you need:\n\n- **C++ compiler** (It should at least support C++ 14)\n- **Git** (This is used for cloning the repository, and the emscripten SDK)\n- **CMake** (At least version 3.15)\n- **Boost** (When compiling the Python library, you have to **compile** Boost.Python for your Python version after installation)\n\nAt this time of writing, here are the packages to install:\n\nUbuntu Dependencies\n-------------------\n\n..  code-block:: shell\n\n    sudo apt install -y git cmake curl build-essential libboost-dev\n\nmacOS Dependencies\n------------------\n\n..  code-block:: shell\n\n    brew install git cmake curl boost python@3.11 boost-python3\n\nWindows Dependencies\n--------------------\n\nInstall\n\n- Visual Studio Build Tools (https://visualstudio.microsoft.com/visual-cpp-build-tools/)\n- Git (https://git-scm.com/download/win)\n- CMake (https://git-scm.com/download/win)\n\nBy downloading the installers from the internet, or by using your package manager.\n\n================\nBuilding for C++\n================\n\nThe C++ library is the easiest to build, it only depends on Boost's headers.\nMake sure you have a compiler, git, cmake and Boost installed (or simply download and extract it somewhere).\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    cmake .. -D CXX_LIB=\"ON\"\n    make . # try make -j4 for a faster build if you have a multi-core machine\n    make install .\n\nWhen boost is not in a standard location, you can add the ``-D BOOST_ROOT=/path/to/boost`` option to the cmake command.\n\n=======================\nBuilding for Emscripten\n=======================\n\nTo compile the emscripten library, first download, install and activate it using the following commands:\n\n..  code-block:: shell\n\n    git clone https://github.com/emscripten-core/emsdk.git\n    cd emsdk\n    ./emsdk install latest\n    ./emsdk activate latest\n\nNow you can compile opencamlib like this (make sure to replace the ``path/to/`` sections):\n\n..  code-block:: shell\n\n    source path/to/emsdk/emsdk_env.sh\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    emcmake cmake \\\n      -D CMAKE_BUILD_TYPE=\"Release\" \\\n      -D BUILD_EMSCRIPTEN_LIB=\"ON\" \\\n      -D USE_OPENMP=\"OFF\" \\\n      -D CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/src/npmpackage/build\" \\\n      -D BOOST_ROOT=\"/path/to/boost\" \\\n      ..\n    emmake make # try emmake make -j4 for a faster build if you have a multi-core machine\n\nNote that USE_OPENMP has been turned off, OpenMP is not supported with Emscripten at the moment\n\n====================\nBuilding for Node.js\n====================\n\nTo compile the Node.js library, install the dependencies in ``src/nodejslib``:\n\n..  code-block:: shell\n\n    cd src/nodejslib\n    npm install\n\nNext, use cmake-js to compile the library:\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    ../src/nodejslib/node_modules/.bin/cmake-js \\\n      build \\\n      --directory \"..\" \\\n      --out \".\" \\\n      --parallel 4 \\\n      --CD BUILD_NODEJS_LIB=\"ON\" \\\n      --CD USE_OPENMP=\"ON\" \\\n      --CD CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/build/Release/$(node --print 'process.platform')-nodejs-$(node --print 'process.arch')\" \\\n      --CD BOOST_ROOT=\"/path/to/boost\" \\\n      --config \"Release\"\n\n===================\nBuilding for Python\n===================\n\nThe Python library can be compiled similarly to the C++ example above, however, this time Boost.Python has to be compiled first.\nMost systems have Boost.Python available as a download, but only for a specific Python version only (usually the latest Python version).\nThese might work if you are using Python from the same package, unfortunately, this is not a very reliable method, so compiling them yourself is usually the best option.\n\nFirst, download and extract Boost:\n\n..  code-block:: shell\n\n    curl \"https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz\" --output \"boost_1_80_0.tar.gz\" --location\n    tar -zxf boost_1_80_0.tar.gz -C /tmp/boost\n    cd /tmp/boost/boost_1_80_0\n\nNow we can compile it:\n\n..  code-block:: shell\n\n    echo \"using python ;\" > ./user-config.jam\n    ./bootstrap.sh\n    ./b2 \\\n      -a \\\n      threading=\"multi\" \\\n      -j4 \\\n      variant=\"release\" \\\n      link=\"static\" \\\n      address-model=\"64\" \\\n      architecture=\"x86\" \\\n      --layout=\"system\" \\\n      --with-python \\\n      --user-config=\"./user-config.jam\" \\\n      cxxflags=\"-fPIC\" \\\n      stage\n\nNote that you can customize the user-config.jam file to point it to your Python installation\n(see: https://www.boost.org/doc/libs/1_78_0/libs/python/doc/html/building/configuring_boost_build.html).\nYou should also specify the correct architecture and address-model.\nOn windows, make sure to use windows style paths, e.g. ``C:\\\\path\\\\to\\\\Python``\n\n*****\nUsage\n*****\n\nPlease take a look at the ``examples/`` folder on how to use OpenCAMLib.\nFor each language there is an example named ``test`` which calls all of the algorithms.\n\n***************\nCommon Problems\n***************\n\nCompiling OpenCAMLib is unfortunately not very easy and there are many things that can go wrong.\nHere is a list of common problems and solutions.\n\n=================================================\nCould NOT find Boost (missing: Boost_INCLUDE_DIR)\n=================================================\n\nThis happens a lot, here are some of the reasons why this happens:\n\n**You don't have Boost installed.**\n\nIf you forgot to install boost, go ahead and download Boost from from their website: https://www.boost.org/users/download/ and extract it somewhere.\nNow, when compiling the C++ or node.js module, add the\n\n``-D BOOST_ROOT=/path/to/extracted/boost`` flag to the ``cmake ..`` command, or the.\n\n``--boost-prefix /path/to/extracted/boost`` flag to the ``./install.sh`` command\n\n**You installed Boost from Github.**\n\nThe boost that is hosted on Github does not have the headers yet! To compile those, you should run the following commands:\n\n..  code-block:: shell\n\n    ./bootstrap.sh\n    ./b2 headers\n\n**Your CMake version has a FindBoost module which is unaware of your Boost's version.**\n\nThe CMake module that looks for Boost, is usually not aware of the existence of the latest Boost versions.\nYou can help it by providing the version number of your Boost with the ``-D Boost_ADDITIONAL_VERSIONS=\"1.80.0\"`` flag.\nMake sure to change 1.80.0 with your version of Boost.\n\nIt can also be helpfull to enable ``Boost_DEBUG`` in the CMake configuration.\n\n***************\nCross Compiling\n***************\n\nTo compile OpenCAMLib for other architectures, we recommend the following strategies.\nAlways make sure to compile Boost for the correct architecture as well!\n\n=====\nmacOS\n=====\n\nCross compiling on macOS is possible by setting the CMake ``CMAKE_OSX_ARCHITECTURES`` flag.\nWhen using the ``install.sh`` script, you can use the ``--macos-architecture`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=======\nWindows\n=======\n\nCross compiling on Windows is possible by using the \"Visual Studio\" generator (default) and by setting the CMake ``CMAKE_GENERATOR_PLATFORM`` flag.\nWhen using the ``install.sh`` script, you can use the ``--cmake-generator-platform`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=====\nLinux\n=====\n\nTo ensure that compiled libraries work on older linux versions, it has to be compiled with an older Glibc version.\nThe easiest way to accomplish this is by using Docker, there are images available especially for this purpose.\nWhen using the ``install.sh`` script, you can use the ``--docker-image`` flag which will make the command run in a container with the given image name.\n\nC++ docker image\n----------------\n\nWhen cross compiling the C++ library, make sure to use an old Glibc, this is included in the dockcross docker images.\nFor a list of supported architectures, take a look at:\n\nhttps://github.com/dockcross/dockcross#summary-cross-compilers\n\nNode.js docker image\n--------------------\n\nCross compilers for node.js are available here:\n\nhttps://github.com/prebuild/docker-images\n\nPython docker image\n-------------------\n\nCross compilers for python are here:\n\nhttps://github.com/pypa/manylinux#manylinux2014-centos-7-based\n\n*****\nLinks\n*****\n\n- repository https://github.com/aewallin/opencamlib\n- PPAs\n  - https://launchpad.net/~iacobs/+archive/ubuntu/cnc/\n  - https://launchpad.net/~neomilium/+archive/ubuntu/cam\n  - https://launchpad.net/~freecad-community/+archive/ubuntu/ppa\n  - (updated 2012) https://launchpad.net/~anders-e-e-wallin/+archive/ubuntu/cam\n- mailing-list http://groups.google.com/group/opencamlib\n- IRC-channel #cam on irc.freenode.net\n- coding standard (?) http://www.possibility.com/Cpp/CppCodingStandard.html\n\n*********************\nOrganization of Files\n*********************\n\n(generate this with 'tree -dL 2')::\n\n ├── docs                        documentation (not much here yet!)\n ├── examples                    c++, emscripten, nodejs and python examples\n ├── scripts                     CI scripts for installing and building ocl\n ├── src\n │   ├── algo                    algorithms under development\n │   ├── common                  common algorithms and data-structures\n │   ├── cutters                 cutter-classes\n │   ├── cxxlib                  c++ library cmake config\n │   ├── deb                     debian package cmake config\n │   ├── dropcutter              drop-cutter algorithms and operations\n │   ├── emscriptenlib           bindings for emscripten library\n │   ├── geo                     primitive geometry classes (point, triangle, stlsurf, etc.)\n │   ├── nodejslib               Node.js library bindings and cmake config\n │   ├── npmpackage              combined Node.js and emscripten wrappers, for publishing to npm\n │   ├── pythonlib               python library bindings and cmake config\n └── stl                         STL files for testing\n","readmeFilename":"README.rst","_id":"@opencamlib/opencamlib@2022.12.17-dev.289","_nodeVersion":"14.21.1","_npmVersion":"6.14.17","dist":{"integrity":"sha512-6BQ6llsNCbLvrKlHGqOStuKNJ6O3zvLtfBK/MfXslWZTTiO7vHOlq5FVe5DfFZ2IDUk9KA9AiM1QfjoflzfGBA==","shasum":"4d80b30dd2c855fbf743d100ae111b166ed8bac4","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2022.12.17-dev.289.tgz","fileCount":70,"unpackedSize":6447022,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCzoISv6vaCPd89Kr6V6GsJ5ipCL2X5AhGrnBUGZ7DIVQIhAKTFTU92DaLce0CJ09bf5fak7mExgFME0ShkuWe6b35Z"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjnc/iACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrOIw//TUlqQ9OHUF8V15r4JG6w3fGQUyPmYv1G2XBdb3pUh+oO5k+1\r\nj2bRude9I92u/9QwOBp4LLz5Gq9gNNTgzl6AW0MJE9sOnEVLXUEVBCH4Xjv0\r\nPhWWmpDi6hg5NDUi6we+gv3MOB4BhQwqP9qWXhOEnhc4/+uHpEXEKPjlHQDR\r\nLvXedd7yg8lMziJjYarIdHdb4joYgIiaAbIC/Wda0pKxVBgtQMoA3iyDj6l9\r\nlbPg5beaczZtTU3+kfHKAW+aQ6Rd/8K4UNtJ2j+w+a3498euK1blzPAnHJJ5\r\nSy45NVyL2mIBpLhEbV7FVglc3H2txFeCc98/8hTWmfYl4AO0Gix9alGyisvO\r\nWCzENHTTLxa6VmST4ljWk7I95q1zG4aRpyUBvUmnW1XFXMS/vnG9F7YLHIic\r\nkZJLp+0mWpl2g8Nn8QESCVJtxtc9NPSgH/pnO4DCGMPXkkHGZ+5trTIk3Qmr\r\ntnCuitAewFkbgl98OhCbtqUo/m7W2Y37vhD+hXTVuQlg8ZQMaKTaIoZ1sUkR\r\n59cPD3NHYMm/yBtxUvcOjk/JjJffgi6o2vjrmmxoq/u5588y7yLQxEDzF1Sm\r\nbuj1yGxpv6HmZQb1Ep2o+OMs/Z1Vrh+rBaCa1gywKc0o+QZwC0oeuteX7R3a\r\n1InRiM07jY/j2azV75f/mSRCKE3vtDuYZVE=\r\n=/nuu\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2022.12.17-dev.289_1671286754141_0.3537176943736604"},"_hasShrinkwrap":false},"2022.12.17-dev.290":{"name":"@opencamlib/opencamlib","version":"2022.12.17-dev.290","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"readme":"##########\nOpenCAMLib\n##########\n\n.. image:: https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg\n    :target: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html\n\n.. image:: https://github.com/aewallin/opencamlib/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/aewallin/opencamlib/actions/workflows/test.yml\n\n.. image:: https://readthedocs.org/projects/opencamlib/badge/?version=latest\n    :target: https://opencamlib.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n************\nIntroduction\n************\n\nOpenCAMLib (ocl) is a library for creating 3D toolpaths for CNC-machines such as mills and lathes.\nIt is written in C++ and has bindings for Python, Node.js and the browser.\nAt the moment it supports the following algorithms:\n\n===========\nDrop-cutter\n===========\n\nThe drop cutter algorithm drops a cutter, positioned at a predefined (x,y) location, until it touches the 3D model.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/drop-cutter.png\n  :width: 200\n  :alt: Drop Cutter\n\n===========\nPush-cutter\n===========\n\nThe Push-cutter is used to create a Waterline toolpath that follows the shape of the model at a constant z-height in the xy-plane.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/push-cutter.png\n  :width: 200\n  :alt: Push Cutter\n\n=======\nCutters\n=======\n\nThe algorithms listed above can be used with following cutters:\n\n- **CylCutter** (flat end mill / cylindrical)\n- **BallCutter** (ball end mill / spherical)\n- **BullCutter** (radius end mill / toroidal)\n- **ConeCutter** (tapered end mill / conical)\n- **CompositeCutter** (combinations of the above / compound)\n\nFrom August 2018 OpenCAMLib is released under LGPL license.\n\n**********************\nPre-compiled Libraries\n**********************\n\nOpenCAMLib provides pre-compiled C++, Node.js and Python libraries for the following platforms and architectures:\n\n+-------------+------------------+\n| **Windows** | ia32 / x64       |\n+-------------+------------------+\n| **macOS**   | x86_64 / arm64   |\n+-------------+------------------+\n| **Linux**   | x86_64 / aarch64 |\n+-------------+------------------+\n\n- The Python library is called ``opencamlib`` and is hosted on PyPi (pypi.org), precompiled libraries are available for Python v3.7 up to v3.11.\n- The Node.js + emscripten library is called ``@opencamlib/opencamlib`` and is hosted on npm (npmjs.org), precompiled libraries are available for Node-API v3 and up.\n- The C++ library is called ``libocl`` and is hosted on our Github Releases page.\n\n======\nPython\n======\n\nThe Python library (hosted on PyPi) can be installed like this:\n\n..  code-block:: shell\n\n    pip install opencamlib\n\nOn some platforms, pip is called pip3, you might have to run:\n\n..  code-block:: shell\n\n    pip3 install opencamlib\n\nNote that pip / pip3 is will install packages for to the system installation of Python, if you want to install a package in a custom Python installation that is not in your $PATH\n(for example, the Python which comes with Blender), you can install packages like so:\n\n..  code-block:: shell\n\n    /path/to/your/custom/python -m pip install opencamlib\n\nLastly, if you don't know where Python is, but you have access to it's interpreter (FreeCAD and Blender both have a Python console), you can simply enter this command in there to install opencamlib:\n\n..  code-block:: python\n\n    import sys; import subprocess; subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'opencamlib'])\n\n\n==========\nJavaScript\n==========\n\nThe JavaScript library (hosted on npm) works in Node.js and the browser (by leveraging emscripten / WASM) can be installed like this:\n\n..  code-block:: shell\n\n    npm install --save @opencamlib/opencamlib\n\nOr, using yarn:\n\n..  code-block:: shell\n\n    yarn add @opencamlib/opencamlib\n\n===\nC++\n===\n\nPrecompiled C++ libraries are available on the Github Releases page (https://github.com/aewallin/opencamlib/releases).\nThis project also installs a OpenCAMLibConfig.cmake, which, if your project uses CMake, allows you to use ``find_package(OpenCAMLib REQUIRED)``.\nYou can see an example of that in use over here: ``examples/cpp/test/CMakeLists.txt``\n\n********************\nBuilding from Source\n********************\n\nHaving trouble with a pre-compiled library? Please report it to us.\nIf there are no pre-compiled libraries for your platform or architecture, or want to customize or package opencamlib, this is for you.\n\nOpenCAMLib uses functionality from a library called Boost.\nFor the Python library it uses an extra library called Boost.Python.\n\nOnly the Python bindings need Boost to be **compiled** (with Boost.Python).\nAll other libraries **DO NOT** need Boost to be compiled, in those cases, a headers only version will suffice.\nSo, if you are not compiling the Python libraries, simply download Boost, extract it into a folder, and tell CMake where to look for it.\n\nMake sure to download Boost from the boost.org downloads page, if you download it from github, you have to make sure to install the git submodules **and** build the headers.\n\nWe provide a ``install.sh`` script that helps with installation of dependencies and building OpenCAMLib libraries, you might want to take a look at it first.\nYou can run ``./install.sh --help`` to look at the available options, or inspect it's source code to find out more.\n\n============\nDependencies\n============\n\nTo compile OpenCAMLib, you need:\n\n- **C++ compiler** (It should at least support C++ 14)\n- **Git** (This is used for cloning the repository, and the emscripten SDK)\n- **CMake** (At least version 3.15)\n- **Boost** (When compiling the Python library, you have to **compile** Boost.Python for your Python version after installation)\n\nAt this time of writing, here are the packages to install:\n\nUbuntu Dependencies\n-------------------\n\n..  code-block:: shell\n\n    sudo apt install -y git cmake curl build-essential libboost-dev\n\nmacOS Dependencies\n------------------\n\n..  code-block:: shell\n\n    brew install git cmake curl boost python@3.11 boost-python3\n\nWindows Dependencies\n--------------------\n\nInstall\n\n- Visual Studio Build Tools (https://visualstudio.microsoft.com/visual-cpp-build-tools/)\n- Git (https://git-scm.com/download/win)\n- CMake (https://git-scm.com/download/win)\n\nBy downloading the installers from the internet, or by using your package manager.\n\n================\nBuilding for C++\n================\n\nThe C++ library is the easiest to build, it only depends on Boost's headers.\nMake sure you have a compiler, git, cmake and Boost installed (or simply download and extract it somewhere).\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    cmake .. -D CXX_LIB=\"ON\"\n    make . # try make -j4 for a faster build if you have a multi-core machine\n    make install .\n\nWhen boost is not in a standard location, you can add the ``-D BOOST_ROOT=/path/to/boost`` option to the cmake command.\n\n=======================\nBuilding for Emscripten\n=======================\n\nTo compile the emscripten library, first download, install and activate it using the following commands:\n\n..  code-block:: shell\n\n    git clone https://github.com/emscripten-core/emsdk.git\n    cd emsdk\n    ./emsdk install latest\n    ./emsdk activate latest\n\nNow you can compile opencamlib like this (make sure to replace the ``path/to/`` sections):\n\n..  code-block:: shell\n\n    source path/to/emsdk/emsdk_env.sh\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    emcmake cmake \\\n      -D CMAKE_BUILD_TYPE=\"Release\" \\\n      -D BUILD_EMSCRIPTEN_LIB=\"ON\" \\\n      -D USE_OPENMP=\"OFF\" \\\n      -D CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/src/npmpackage/build\" \\\n      -D BOOST_ROOT=\"/path/to/boost\" \\\n      ..\n    emmake make # try emmake make -j4 for a faster build if you have a multi-core machine\n\nNote that USE_OPENMP has been turned off, OpenMP is not supported with Emscripten at the moment\n\n====================\nBuilding for Node.js\n====================\n\nTo compile the Node.js library, install the dependencies in ``src/nodejslib``:\n\n..  code-block:: shell\n\n    cd src/nodejslib\n    npm install\n\nNext, use cmake-js to compile the library:\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    ../src/nodejslib/node_modules/.bin/cmake-js \\\n      build \\\n      --directory \"..\" \\\n      --out \".\" \\\n      --parallel 4 \\\n      --CD BUILD_NODEJS_LIB=\"ON\" \\\n      --CD USE_OPENMP=\"ON\" \\\n      --CD CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/build/Release/$(node --print 'process.platform')-nodejs-$(node --print 'process.arch')\" \\\n      --CD BOOST_ROOT=\"/path/to/boost\" \\\n      --config \"Release\"\n\n===================\nBuilding for Python\n===================\n\nThe Python library can be compiled similarly to the C++ example above, however, this time Boost.Python has to be compiled first.\nMost systems have Boost.Python available as a download, but only for a specific Python version only (usually the latest Python version).\nThese might work if you are using Python from the same package, unfortunately, this is not a very reliable method, so compiling them yourself is usually the best option.\n\nFirst, download and extract Boost:\n\n..  code-block:: shell\n\n    curl \"https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz\" --output \"boost_1_80_0.tar.gz\" --location\n    tar -zxf boost_1_80_0.tar.gz -C /tmp/boost\n    cd /tmp/boost/boost_1_80_0\n\nNow we can compile it:\n\n..  code-block:: shell\n\n    echo \"using python ;\" > ./user-config.jam\n    ./bootstrap.sh\n    ./b2 \\\n      -a \\\n      threading=\"multi\" \\\n      -j4 \\\n      variant=\"release\" \\\n      link=\"static\" \\\n      address-model=\"64\" \\\n      architecture=\"x86\" \\\n      --layout=\"system\" \\\n      --with-python \\\n      --user-config=\"./user-config.jam\" \\\n      cxxflags=\"-fPIC\" \\\n      stage\n\nNote that you can customize the user-config.jam file to point it to your Python installation\n(see: https://www.boost.org/doc/libs/1_78_0/libs/python/doc/html/building/configuring_boost_build.html).\nYou should also specify the correct architecture and address-model.\nOn windows, make sure to use windows style paths, e.g. ``C:\\\\path\\\\to\\\\Python``\n\n*****\nUsage\n*****\n\nPlease take a look at the ``examples/`` folder on how to use OpenCAMLib.\nFor each language there is an example named ``test`` which calls all of the algorithms.\n\n***************\nCommon Problems\n***************\n\nCompiling OpenCAMLib is unfortunately not very easy and there are many things that can go wrong.\nHere is a list of common problems and solutions.\n\n=================================================\nCould NOT find Boost (missing: Boost_INCLUDE_DIR)\n=================================================\n\nThis happens a lot, here are some of the reasons why this happens:\n\n**You don't have Boost installed.**\n\nIf you forgot to install boost, go ahead and download Boost from from their website: https://www.boost.org/users/download/ and extract it somewhere.\nNow, when compiling the C++ or node.js module, add the\n\n``-D BOOST_ROOT=/path/to/extracted/boost`` flag to the ``cmake ..`` command, or the.\n\n``--boost-prefix /path/to/extracted/boost`` flag to the ``./install.sh`` command\n\n**You installed Boost from Github.**\n\nThe boost that is hosted on Github does not have the headers yet! To compile those, you should run the following commands:\n\n..  code-block:: shell\n\n    ./bootstrap.sh\n    ./b2 headers\n\n**Your CMake version has a FindBoost module which is unaware of your Boost's version.**\n\nThe CMake module that looks for Boost, is usually not aware of the existence of the latest Boost versions.\nYou can help it by providing the version number of your Boost with the ``-D Boost_ADDITIONAL_VERSIONS=\"1.80.0\"`` flag.\nMake sure to change 1.80.0 with your version of Boost.\n\nIt can also be helpfull to enable ``Boost_DEBUG`` in the CMake configuration.\n\n***************\nCross Compiling\n***************\n\nTo compile OpenCAMLib for other architectures, we recommend the following strategies.\nAlways make sure to compile Boost for the correct architecture as well!\n\n=====\nmacOS\n=====\n\nCross compiling on macOS is possible by setting the CMake ``CMAKE_OSX_ARCHITECTURES`` flag.\nWhen using the ``install.sh`` script, you can use the ``--macos-architecture`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=======\nWindows\n=======\n\nCross compiling on Windows is possible by using the \"Visual Studio\" generator (default) and by setting the CMake ``CMAKE_GENERATOR_PLATFORM`` flag.\nWhen using the ``install.sh`` script, you can use the ``--cmake-generator-platform`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=====\nLinux\n=====\n\nTo ensure that compiled libraries work on older linux versions, it has to be compiled with an older Glibc version.\nThe easiest way to accomplish this is by using Docker, there are images available especially for this purpose.\nWhen using the ``install.sh`` script, you can use the ``--docker-image`` flag which will make the command run in a container with the given image name.\n\nC++ docker image\n----------------\n\nWhen cross compiling the C++ library, make sure to use an old Glibc, this is included in the dockcross docker images.\nFor a list of supported architectures, take a look at:\n\nhttps://github.com/dockcross/dockcross#summary-cross-compilers\n\nNode.js docker image\n--------------------\n\nCross compilers for node.js are available here:\n\nhttps://github.com/prebuild/docker-images\n\nPython docker image\n-------------------\n\nCross compilers for python are here:\n\nhttps://github.com/pypa/manylinux#manylinux2014-centos-7-based\n\n*****\nLinks\n*****\n\n- repository https://github.com/aewallin/opencamlib\n- PPAs\n  - https://launchpad.net/~iacobs/+archive/ubuntu/cnc/\n  - https://launchpad.net/~neomilium/+archive/ubuntu/cam\n  - https://launchpad.net/~freecad-community/+archive/ubuntu/ppa\n  - (updated 2012) https://launchpad.net/~anders-e-e-wallin/+archive/ubuntu/cam\n- mailing-list http://groups.google.com/group/opencamlib\n- IRC-channel #cam on irc.freenode.net\n- coding standard (?) http://www.possibility.com/Cpp/CppCodingStandard.html\n\n*********************\nOrganization of Files\n*********************\n\n(generate this with 'tree -dL 2')::\n\n ├── docs                        documentation (not much here yet!)\n ├── examples                    c++, emscripten, nodejs and python examples\n ├── scripts                     CI scripts for installing and building ocl\n ├── src\n │   ├── algo                    algorithms under development\n │   ├── common                  common algorithms and data-structures\n │   ├── cutters                 cutter-classes\n │   ├── cxxlib                  c++ library cmake config\n │   ├── deb                     debian package cmake config\n │   ├── dropcutter              drop-cutter algorithms and operations\n │   ├── emscriptenlib           bindings for emscripten library\n │   ├── geo                     primitive geometry classes (point, triangle, stlsurf, etc.)\n │   ├── nodejslib               Node.js library bindings and cmake config\n │   ├── npmpackage              combined Node.js and emscripten wrappers, for publishing to npm\n │   ├── pythonlib               python library bindings and cmake config\n └── stl                         STL files for testing\n","readmeFilename":"README.rst","_id":"@opencamlib/opencamlib@2022.12.17-dev.290","_nodeVersion":"14.21.1","_npmVersion":"6.14.17","dist":{"integrity":"sha512-b3M7WwzI56TZroU6jc8Q5H2W582gOEPuUgIB8WJAfGQGI2sIAfar4sg0f9QUhul3idk3kZ7j3m5BY7h+J/G0wg==","shasum":"aaa1cfcc773ccac500da92049975a38fb1be46a0","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2022.12.17-dev.290.tgz","fileCount":70,"unpackedSize":6447120,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID8OfwreOOkCkIpJ37Uf7+VH1od69E8AChrLXwTT690tAiAZwlC1ooN7fJErEq3eFRzF4rDW2Mis8jCXm5pVg5nkwA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjndOiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq5rQ/+LvlElbv+yK5/ZY/fDUHS9IbHbH+/wEeF3m/9ldYUX/UNvlMS\r\nF5uHAD3HX/zkKh2hYAjiZmBwtzLhaojjcqZEbhaj+3WZ6+VSI7ELPN5Lcqpi\r\nuC/EWkd/EOvCfPW9Oz+O+oWl1xX7Y9bNkl8TkpkA5a7ePq9d2jzkWtzEEdlI\r\nqBPtS7pDCcTj0bNKpIN73TIBhYKTceqOQap66LqULGPiDdYf9yZo7sN8b9hA\r\naDviXLidd7Q6OmvrM9HU+Th5m2J3Sn+Y2Kh53AGuWwbXBo6F9BMDWxuew0XA\r\neDxpTrdO+l2mG6AdUx+4FGtx3sIneiAoZoPQb/X+YRnr1QxMenXanET6/Q0L\r\nmfF0Dpcs3ZdbUyGeAktyUi8UeI/Y9hrxthwgUUbSgehQf2WDhHccCCUU3b1d\r\nwx8bzd2scyuPQjoM1aWPCH/E0zEY/UMlbfLpidKe4P/EA7tq+IQK3XUT23ez\r\nRkF9o89tmLWKJjpTRHjFUdhIPjC9aPxS/YWgTeYRONJtemqtGBbDuDf8+IBE\r\nYHNnWrcWxvS8evBGHSlwRUBprruh55DfrvlKlEnbKlgsEEnOZt39FNCsbEzj\r\nL5xqJYPcvkw2V7g8ZMCdT4i2BwFY0QKiwRM++heCUoti+Hl/Fz/M8TK4OwW+\r\nhb+n9sr4GEySJzaSW2J1NGy9O/V4YPK2cBE=\r\n=63LH\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2022.12.17-dev.290_1671287714435_0.4319924483464508"},"_hasShrinkwrap":false},"2022.12.17":{"name":"@opencamlib/opencamlib","version":"2022.12.17","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"_id":"@opencamlib/opencamlib@2022.12.17","_nodeVersion":"14.21.1","_npmVersion":"6.14.17","dist":{"integrity":"sha512-N3cujIa/lbo8r6bL02RpB0mb1KJTCvNjV9coD4aWdMkcrJE6vyfJC12ox50iMPi0EtcAACX4Qt10fJzT4Z/YJw==","shasum":"bdc090966ea4db992c6ff8fa3ac08262d337a16b","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2022.12.17.tgz","fileCount":70,"unpackedSize":6447130,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF8MM9eOns703YrLtgfOlTO3kU6BOyKzHANvtIAw6QdHAiEA03TV9unevCSTQAkMwYwo1mRQlIKk8Q1WzVkmwLm9pSg="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjnd58ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo2uA/+IGydtzceNKhUgfFu4q++5tlI9V7tKBZs+6kXbMnGDp5QKOLw\r\ngwGyF2Rju2s5CMoCw8U+FW49Fxlag2S1N3//2R3jSQ7p5KlJRGhBohmqrt6P\r\nnOX2OTsas1hGNOQGGSpWZOfpUM4YKHD6fUnkt9L384B1lko/OUjEkC9LQFfc\r\n/NhQlzaD/Cq0cuj7yYFu7IdDkoM4IS82Y4GA4RIlzGqUv4vFV5HkxGPjStXr\r\nba5JcPa8hq6GWaRRaHRxXA4hanmqd68No+LtgwKF3YRcCgZONv0swl/mLIL8\r\nMfUgC8/ZaOaYRx/jdn4h3gobEaTetElm2xcXUzcQsrIqN5Mf7LB9Ji6lPUxg\r\nNtrsFZmFSzRv0jSCY4fde6WrvmSHTQ3VeF8Mr4HhWjtAI54C1baI6AFAaGD8\r\nQ8fjDR/iGRotAJ4ejclaKpZFwYCh/IRvhnV5ZJZ0Q1uDtUjQvtlCiC9gQKKG\r\nEN5zZ/wSe9b5SUpmA22K+vJlNY6DNXHC2lQnBR9BTea57An8PtbDvjk5IGHv\r\n3wf0Peq9TuzGm3+9lQ7hUo3qF5B9caF7I27jo5k3QfEAJV2N3RsM9KdN3RHn\r\n1LOAnLyauq+RLSOyJuDgFrz/DVX3nPbKRIp6TvzTDqDonR0Qfg0wEWnIxW+i\r\nT+o6leJl92qxEdqtJVwz0hDT7g6jvRSk7pQ=\r\n=usjq\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2022.12.17_1671290491773_0.25832378034267944"},"_hasShrinkwrap":false},"2022.12.18":{"name":"@opencamlib/opencamlib","version":"2022.12.18","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"_id":"@opencamlib/opencamlib@2022.12.18","_nodeVersion":"14.21.1","_npmVersion":"6.14.17","dist":{"integrity":"sha512-+ntYc0oVUWtEtsHiDJkpspa7SMDxIrFL+VBhDTQXRYhZeAgxDFMX4s2XrFUAZILy6DAmvSp9Xg16iVmWYH2DaA==","shasum":"45063cae4f21364a4227b60a4bf251d89cfbbb53","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2022.12.18.tgz","fileCount":70,"unpackedSize":6447306,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIERHfkkM1MQfgGj7IGS/oX13PVfWCgBDiVtymigGYRmKAiEA4C88Z76sekSatoMKEFh8xsdBSm+ojkDwqDkqYf2ULHU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjnwc/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpcLw/+MNynpZu3zHPSB9/NW9jaSOiW5ZUwVLNWDweQKqyiQpU4wKB/\r\nnnds/ImrBEeDxFE0NGCgc1XjRWU7o5h3eaRG8atXW+dYp1ZpQGZlMy7MiP+m\r\nF8yd1aTbb2x1cQmNsawkCFwT+88Wgr4rV2j5kGsrDVeB5+bsVleYhYKPxR6v\r\neEXbHEEf1qfv/mTrW/cLNVtdFWyawnEMmO4cjVBgHXSt2reqY6juV5o0WPqR\r\nEJ+1QUJeIdFMuouYdpJzXnJ05y7ICEx7Djn1hAQdXokob6r4sq9QXMNUiuQJ\r\nJCaRhfnQhpL6NibwFpAbrCQ4ZruFvS4wg3uCZJX7Kny9Jdc97IFkWZ6JSLDc\r\nCufBXT9XB6TaSu0nJNg+ml7x8bQAw6qjW/N4HcHhUJbQ4ZaKEmd6CvZpetoq\r\n9SrWo0LK/Sqle42ZoandWSGAOZAU8YO1fhq+kG8KAnFO+KvOlBTbGZb5ZVLs\r\nyfuiSdF5hCWxXlWRdFa+svKXQB0uzoMw7cvHpk3laWipk3IDIqnGO3eSaT4X\r\n/Gtp52utrOCHNY2QWWTlNKMS/dHq2vxaf0kSu6oBqKj7IdyiczQh2rZEyB3B\r\niVXRLqEcJdV3TYjW+dO7Um+3ln6hK8RKihCWe+C3SsQfYASl7qSEbbgejjdp\r\nX02k+OOdTE1B5vbNjeU9EiupsUNWPtOwldc=\r\n=wF82\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2022.12.18_1671366463050_0.3815390030733563"},"_hasShrinkwrap":false},"2023.1.9-dev.296":{"name":"@opencamlib/opencamlib","version":"2023.1.9-dev.296","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"readme":"##########\nOpenCAMLib\n##########\n\n.. image:: https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg\n    :target: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html\n\n.. image:: https://github.com/aewallin/opencamlib/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/aewallin/opencamlib/actions/workflows/test.yml\n\n.. image:: https://readthedocs.org/projects/opencamlib/badge/?version=latest\n    :target: https://opencamlib.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n************\nIntroduction\n************\n\nOpenCAMLib (ocl) is a library for creating 3D toolpaths for CNC-machines such as mills and lathes.\nIt is written in C++ and has bindings for Python, Node.js and the browser.\nAt the moment it supports the following algorithms:\n\n===========\nDrop-cutter\n===========\n\nThe drop cutter algorithm drops a cutter, positioned at a predefined (x,y) location, until it touches the 3D model.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/drop-cutter.png?raw=true\n  :width: 200\n  :alt: Drop Cutter\n\n===========\nPush-cutter\n===========\n\nThe Push-cutter is used to create a Waterline toolpath that follows the shape of the model at a constant z-height in the xy-plane.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/push-cutter.png?raw=true\n  :width: 200\n  :alt: Push Cutter\n\n=======\nCutters\n=======\n\nThe algorithms listed above can be used with following cutters:\n\n- **CylCutter** (flat end mill / cylindrical)\n- **BallCutter** (ball end mill / spherical)\n- **BullCutter** (radius end mill / toroidal)\n- **ConeCutter** (tapered end mill / conical)\n- **CompositeCutter** (combinations of the above / compound)\n\nFrom August 2018 OpenCAMLib is released under LGPL license.\n\n**********************\nPre-compiled Libraries\n**********************\n\nOpenCAMLib provides pre-compiled C++, Node.js and Python libraries for the following platforms and architectures:\n\n+-------------+------------------+\n| **Windows** | ia32 / x64       |\n+-------------+------------------+\n| **macOS**   | x86_64 / arm64   |\n+-------------+------------------+\n| **Linux**   | x86_64 / aarch64 |\n+-------------+------------------+\n\n- The Python library is called ``opencamlib`` and is hosted on PyPi (pypi.org), precompiled libraries are available for Python v3.7 up to v3.11.\n- The Node.js + emscripten library is called ``@opencamlib/opencamlib`` and is hosted on npm (npmjs.org), precompiled libraries are available for Node-API v3 and up.\n- The C++ library is called ``libocl`` and is hosted on our Github Releases page.\n\n======\nPython\n======\n\nThe Python library (hosted on PyPi) can be installed like this:\n\n..  code-block:: shell\n\n    pip install opencamlib\n\nOn some platforms, pip is called pip3, you might have to run:\n\n..  code-block:: shell\n\n    pip3 install opencamlib\n\nNote that pip / pip3 is will install packages for to the system installation of Python, if you want to install a package in a custom Python installation that is not in your $PATH\n(for example, the Python which comes with Blender), you can install packages like so:\n\n..  code-block:: shell\n\n    /path/to/your/custom/python -m pip install opencamlib\n\nIf you don't know where Python is, but you have access to it's interpreter (FreeCAD and Blender both have a Python console), you can simply enter this command in there to install OpenCAMLib:\n\n..  code-block:: python\n\n    import sys; import subprocess; subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'opencamlib'])\n\n\n==========\nJavaScript\n==========\n\nThe JavaScript library (hosted on npm) works in Node.js and the browser (by leveraging emscripten / WASM) can be installed like this:\n\n..  code-block:: shell\n\n    npm install --save @opencamlib/opencamlib\n\nOr, using yarn:\n\n..  code-block:: shell\n\n    yarn add @opencamlib/opencamlib\n\nNote that it is not 100% feature complete and lacking some functionality still.\n\n===\nC++\n===\n\nPre-compiled C++ libraries are available on the Github Releases page (https://github.com/aewallin/opencamlib/releases).\nThis project also installs a OpenCAMLibConfig.cmake, which, if your project uses CMake, allows you to use ``find_package(OpenCAMLib REQUIRED)``.\n\nYou can see an example of that in use over here: ``examples/cpp/test/CMakeLists.txt``\n\n********************\nBuilding from Source\n********************\n\nHaving trouble with a pre-compiled library? Please report it to us.\nIf there are no pre-compiled libraries for your platform or architecture, or want to customize or package opencamlib, this is for you.\n\nOpenCAMLib uses functionality from a library called Boost.\nFor the Python library it uses an extra library called Boost.Python.\n\nOnly the Python bindings need Boost to be **compiled** (with Boost.Python).\nAll other libraries **DO NOT** need Boost to be compiled, in those cases, a headers only version will suffice.\nSo, if you are not compiling the Python libraries, simply download Boost, extract it into a folder, and tell CMake where to look for it.\n\nMake sure to download Boost from the boost.org downloads page, if you download it from github, you have to make sure to install the git submodules **and** build the headers.\n\nWe provide a ``install.sh`` script that helps with installation of dependencies and building OpenCAMLib libraries, you might want to take a look at it first.\nYou can run ``./install.sh --help`` to look at the available options, or inspect it's source code to find out more.\n\n============\nDependencies\n============\n\nTo compile OpenCAMLib, you need:\n\n- **C++ compiler** (It should at least support C++ 14)\n- **Git** (This is used for cloning the repository, and the emscripten SDK)\n- **CMake** (At least version 3.15)\n- **Boost** (When compiling the Python library, you have to **compile** Boost.Python for your Python version after installation)\n\nAt this time of writing, here are the packages to install:\n\nUbuntu Dependencies\n-------------------\n\n..  code-block:: shell\n\n    sudo apt install -y git cmake curl build-essential libboost-dev\n\nmacOS Dependencies\n------------------\n\n..  code-block:: shell\n\n    brew install git cmake curl boost python@3.11 boost-python3\n\nWindows Dependencies\n--------------------\n\nInstall\n\n- Visual Studio Build Tools (https://visualstudio.microsoft.com/visual-cpp-build-tools/)\n- Git (https://git-scm.com/download/win)\n- CMake (https://git-scm.com/download/win)\n\nBy downloading the installers from the internet, or by using your package manager.\n\n================\nBuilding for C++\n================\n\nThe C++ library is the easiest to build, it only depends on Boost's headers.\nMake sure you have a compiler, git, cmake and Boost installed (or simply download and extract it somewhere).\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    cmake .. -D CXX_LIB=\"ON\"\n    make . # try make -j4 for a faster build if you have a multi-core machine\n    make install .\n\nWhen boost is not in a standard location, you can add the ``-D BOOST_ROOT=/path/to/boost`` option to the cmake command.\n\n=======================\nBuilding for Emscripten\n=======================\n\nTo compile the emscripten library, first download, install and activate it using the following commands:\n\n..  code-block:: shell\n\n    git clone https://github.com/emscripten-core/emsdk.git\n    cd emsdk\n    ./emsdk install latest\n    ./emsdk activate latest\n\nNow you can compile OpenCAMLib like this (make sure to replace the ``path/to/`` sections):\n\n..  code-block:: shell\n\n    source path/to/emsdk/emsdk_env.sh\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    emcmake cmake \\\n      -D CMAKE_BUILD_TYPE=\"Release\" \\\n      -D BUILD_EMSCRIPTEN_LIB=\"ON\" \\\n      -D USE_OPENMP=\"OFF\" \\\n      -D CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/src/npmpackage/build\" \\\n      -D BOOST_ROOT=\"/path/to/boost\" \\\n      ..\n    emmake make # try emmake make -j4 for a faster build if you have a multi-core machine\n\nNote that ``USE_OPENMP`` has been turned off, OpenMP is not supported with Emscripten at the moment\n\n====================\nBuilding for Node.js\n====================\n\nTo compile the Node.js library, install the dependencies in ``src/nodejslib``:\n\n..  code-block:: shell\n\n    cd src/nodejslib\n    npm install\n\nNext, use cmake-js to compile the library:\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    ../src/nodejslib/node_modules/.bin/cmake-js \\\n      build \\\n      --directory \"..\" \\\n      --out \".\" \\\n      --parallel 4 \\\n      --CD BUILD_NODEJS_LIB=\"ON\" \\\n      --CD USE_OPENMP=\"ON\" \\\n      --CD CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/build/Release/$(node --print 'process.platform')-nodejs-$(node --print 'process.arch')\" \\\n      --CD BOOST_ROOT=\"/path/to/boost\" \\\n      --config \"Release\"\n\n===================\nBuilding for Python\n===================\n\nThe Python library can be compiled similarly to the C++ example above, however, this time Boost.Python has to be compiled first.\nMost systems have Boost.Python available as a download, but only for a specific Python version only (usually the latest Python version).\nThese might work if you are using Python from the same package provider, but, unfortunately, this is not a very reliable method, so compiling them yourself is usually the best option.\n\nFirst, download and extract Boost:\n\n..  code-block:: shell\n\n    curl \"https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz\" --output \"boost_1_80_0.tar.gz\" --location\n    tar -zxf boost_1_80_0.tar.gz -C /tmp/boost\n    cd /tmp/boost/boost_1_80_0\n\nNow we can compile it:\n\n..  code-block:: shell\n\n    echo \"using python ;\" > ./user-config.jam\n    ./bootstrap.sh\n    ./b2 \\\n      -a \\\n      threading=\"multi\" \\\n      -j4 \\\n      variant=\"release\" \\\n      link=\"static\" \\\n      address-model=\"64\" \\\n      architecture=\"x86\" \\\n      --layout=\"system\" \\\n      --with-python \\\n      --user-config=\"./user-config.jam\" \\\n      cxxflags=\"-fPIC\" \\\n      stage\n\nNote that you can customize the user-config.jam file to point it to your Python installation\n(see: https://www.boost.org/doc/libs/1_78_0/libs/python/doc/html/building/configuring_boost_build.html).\nYou should also specify the correct architecture and address-model.\nOn windows, make sure to use windows style paths, e.g. ``C:\\\\path\\\\to\\\\Python``\n\n*****\nUsage\n*****\n\nPlease take a look at the ``examples/`` folder on how to use OpenCAMLib.\nFor each language there is an example named ``test`` which calls all of the algorithms.\n\nThere is also some API documentation over here: https://opencamlib.readthedocs.io\n\n***************\nCommon Problems\n***************\n\nCompiling OpenCAMLib is unfortunately not very easy and there are many things that can go wrong.\nHere is a list of common problems and solutions.\n\n=================================================\nCould NOT find Boost (missing: Boost_INCLUDE_DIR)\n=================================================\n\nThis happens a lot, here are some of the reasons why this happens:\n\n**You don't have Boost installed.**\n\nIf you forgot to install boost, go ahead and download Boost from from their website: https://www.boost.org/users/download/ and extract it somewhere.\nNow, when compiling the C++ or node.js module, add the\n\n``-D BOOST_ROOT=/path/to/extracted/boost`` flag to the ``cmake ..`` command, or the.\n\n``--boost-prefix /path/to/extracted/boost`` flag to the ``./install.sh`` command\n\n**You installed Boost from Github.**\n\nThe boost that is hosted on Github does not have the headers yet! To compile those, you should run the following commands:\n\n..  code-block:: shell\n\n    ./bootstrap.sh\n    ./b2 headers\n\n**Your CMake version has a FindBoost module which is unaware of your Boost's version.**\n\nThe CMake module that looks for Boost, is usually not aware of the existence of the latest Boost versions.\nYou can help it by providing the version number of your Boost with the ``-D Boost_ADDITIONAL_VERSIONS=\"1.80.0\"`` flag.\nMake sure to change 1.80.0 with your version of Boost.\n\nIt can also be helpfull to enable ``Boost_DEBUG`` in the CMake configuration.\n\n***************\nCross Compiling\n***************\n\nTo compile OpenCAMLib for other architectures, we recommend the following strategies.\nAlways make sure to compile Boost for the correct architecture as well!\n\n=====\nmacOS\n=====\n\nCross compiling on macOS is possible by setting the CMake ``CMAKE_OSX_ARCHITECTURES`` flag.\nWhen using the ``install.sh`` script, you can use the ``--macos-architecture`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=======\nWindows\n=======\n\nCross compiling on Windows is possible by using the \"Visual Studio\" generator (default) and by setting the CMake ``CMAKE_GENERATOR_PLATFORM`` flag.\nWhen using the ``install.sh`` script, you can use the ``--cmake-generator-platform`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=====\nLinux\n=====\n\nTo ensure that compiled libraries work on older linux versions, it has to be compiled with an older Glibc version.\nThe easiest way to accomplish this is by using Docker, there are images available especially for this purpose.\nWhen using the ``install.sh`` script, you can use the ``--docker-image`` flag which will make the command run in a container with the given image name.\n\nC++ docker image\n----------------\n\nWhen cross compiling the C++ library, make sure to use an old Glibc, this is included in the dockcross docker images.\nFor a list of supported architectures, take a look at:\n\nhttps://github.com/dockcross/dockcross#summary-cross-compilers\n\nNode.js docker image\n--------------------\n\nCross compilers for node.js are available here:\n\nhttps://github.com/prebuild/docker-images\n\nPython docker image\n-------------------\n\nCross compilers for python are here:\n\nhttps://github.com/pypa/manylinux#manylinux2014-centos-7-based\n\n*****\nLinks\n*****\n\n- repository https://github.com/aewallin/opencamlib\n- PPAs\n  - https://launchpad.net/~iacobs/+archive/ubuntu/cnc/\n  - https://launchpad.net/~neomilium/+archive/ubuntu/cam\n  - https://launchpad.net/~freecad-community/+archive/ubuntu/ppa\n  - (updated 2012) https://launchpad.net/~anders-e-e-wallin/+archive/ubuntu/cam\n- mailing-list http://groups.google.com/group/opencamlib\n- IRC-channel #cam on irc.freenode.net\n- coding standard (?) http://www.possibility.com/Cpp/CppCodingStandard.html\n\n*********************\nOrganization of Files\n*********************\n\n(generate this with 'tree -dL 2')::\n\n ├── docs                        documentation (not much here yet!)\n ├── examples                    c++, emscripten, nodejs and python examples\n ├── scripts                     CI scripts for installing and building ocl\n ├── src\n │   ├── algo                    algorithms under development\n │   ├── common                  common algorithms and data-structures\n │   ├── cutters                 cutter-classes\n │   ├── cxxlib                  c++ library cmake config\n │   ├── deb                     debian package cmake config\n │   ├── dropcutter              drop-cutter algorithms and operations\n │   ├── emscriptenlib           bindings for emscripten library\n │   ├── geo                     primitive geometry classes (point, triangle, stlsurf, etc.)\n │   ├── nodejslib               Node.js library bindings and cmake config\n │   ├── npmpackage              combined Node.js and emscripten wrappers, for publishing to npm\n │   ├── pythonlib               python library bindings and cmake config\n └── stl                         STL files for testing\n","readmeFilename":"README.rst","_id":"@opencamlib/opencamlib@2023.1.9-dev.296","_nodeVersion":"14.21.1","_npmVersion":"6.14.17","dist":{"integrity":"sha512-hJQ5rHRlQsTqaXIwq7PO+pj2ZaiLGk+BgWHWPe+pz+fPVJF7a1Bxl4NR8Ba53G42MrDqOmuoNwX/SNr6bMZ7vg==","shasum":"dfdf659cfa29ead5bb1d2c6568ee700df4e9708a","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2023.1.9-dev.296.tgz","fileCount":70,"unpackedSize":39645986,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZgUOuE5clYuuv5/wcX9KSbTO9HBoMJuNhsScKEYCz6AIhAP2CBjFqPVVh4tyK9xfHEpHVha13I7TUY5dJuXUgyQuF"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJju/RfACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoP/Q/+Odqp/uDBO6t4MpLp25z//rlnfVseLHEbFEfBDE3IjYO1152+\r\nWXLwdT3Koeb5NAnLevis3zdxd+EEiyLevUfgrAx7m87QQlDtnfLuBj7Mw85E\r\n3exd1k9+9PuhL6toYa6mavOpYSvEqB6uHSUCRmQ7uedErtF5UStwnkzSUL7k\r\ntw4jbDd1bciSOyy8gxP7E4Tq3sVzRh5TKDtteSWm5yIRGFQIeJs/T8SQP3v7\r\nOSih0GkA2LpTu4oQK7CRRwDf0rOu4oD9JFSGTvD5vBKf2wH4K5fN4FWu8Z0P\r\nET3wjc1o7LYviTxBz+AGBXvyh+vtRyWic7oWoKYO0BEzwJnn+qr2u0a/zxAh\r\nF1E4a3ZQVAN1k/gsKEmDqknmCXqRceoj/621hGIz8cYWlTZBhL0fMOJnTp3p\r\noZSRwWVf63IxTVm5M/H3TD44QLW7eQ0Rpa4vrnH8yQD2VlaOiFJdjN4j2RZa\r\n5DYFUnctxWxDeVefERifLHRw3FvlNGsIKrNXgFl6kHUoNjBjaNdbcobzIj/d\r\nRZIQ6I89DKIp3MYhidkFZbHE4QmM+Vk9HEdtsAAtfZqRIoHe1k5BZOvv10sO\r\nXLgTsllWJyZi44ieLcECsU5y1nImoxBFnr6YqICWzaHawQgQbtR6iKnb+5aP\r\nteZCySD7sZIviCH8YV0dtpsgNhIS/Hbv8Tk=\r\n=E6gg\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2023.1.9-dev.296_1673262175084_0.9649476680774052"},"_hasShrinkwrap":false},"2023.1.9-dev.297":{"name":"@opencamlib/opencamlib","version":"2023.1.9-dev.297","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"readme":"##########\nOpenCAMLib\n##########\n\n.. image:: https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg\n    :target: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html\n\n.. image:: https://github.com/aewallin/opencamlib/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/aewallin/opencamlib/actions/workflows/test.yml\n\n.. image:: https://readthedocs.org/projects/opencamlib/badge/?version=latest\n    :target: https://opencamlib.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n************\nIntroduction\n************\n\nOpenCAMLib (ocl) is a library for creating 3D toolpaths for CNC-machines such as mills and lathes.\nIt is written in C++ and has bindings for Python, Node.js and the browser.\nAt the moment it supports the following algorithms:\n\n===========\nDrop-cutter\n===========\n\nThe drop cutter algorithm drops a cutter, positioned at a predefined (x,y) location, until it touches the 3D model.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/drop-cutter.png?raw=true\n  :width: 200\n  :alt: Drop Cutter\n\n===========\nPush-cutter\n===========\n\nThe Push-cutter is used to create a Waterline toolpath that follows the shape of the model at a constant z-height in the xy-plane.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/push-cutter.png?raw=true\n  :width: 200\n  :alt: Push Cutter\n\n=======\nCutters\n=======\n\nThe algorithms listed above can be used with following cutters:\n\n- **CylCutter** (flat end mill / cylindrical)\n- **BallCutter** (ball end mill / spherical)\n- **BullCutter** (radius end mill / toroidal)\n- **ConeCutter** (tapered end mill / conical)\n- **CompositeCutter** (combinations of the above / compound)\n\nFrom August 2018 OpenCAMLib is released under LGPL license.\n\n**********************\nPre-compiled Libraries\n**********************\n\nOpenCAMLib provides pre-compiled C++, Node.js and Python libraries for the following platforms and architectures:\n\n+-------------+------------------+\n| **Windows** | ia32 / x64       |\n+-------------+------------------+\n| **macOS**   | x86_64 / arm64   |\n+-------------+------------------+\n| **Linux**   | x86_64 / aarch64 |\n+-------------+------------------+\n\n- The Python library is called ``opencamlib`` and is hosted on PyPi (pypi.org), precompiled libraries are available for Python v3.7 up to v3.11.\n- The Node.js + emscripten library is called ``@opencamlib/opencamlib`` and is hosted on npm (npmjs.org), precompiled libraries are available for Node-API v3 and up.\n- The C++ library is called ``libocl`` and is hosted on our Github Releases page.\n\n======\nPython\n======\n\nThe Python library (hosted on PyPi) can be installed like this:\n\n..  code-block:: shell\n\n    pip install opencamlib\n\nOn some platforms, pip is called pip3, you might have to run:\n\n..  code-block:: shell\n\n    pip3 install opencamlib\n\nNote that pip / pip3 is will install packages for to the system installation of Python, if you want to install a package in a custom Python installation that is not in your $PATH\n(for example, the Python which comes with Blender), you can install packages like so:\n\n..  code-block:: shell\n\n    /path/to/your/custom/python -m pip install opencamlib\n\nIf you don't know where Python is, but you have access to it's interpreter (FreeCAD and Blender both have a Python console), you can simply enter this command in there to install OpenCAMLib:\n\n..  code-block:: python\n\n    import sys; import subprocess; subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'opencamlib'])\n\n\n==========\nJavaScript\n==========\n\nThe JavaScript library (hosted on npm) works in Node.js and the browser (by leveraging emscripten / WASM) can be installed like this:\n\n..  code-block:: shell\n\n    npm install --save @opencamlib/opencamlib\n\nOr, using yarn:\n\n..  code-block:: shell\n\n    yarn add @opencamlib/opencamlib\n\nNote that it is not 100% feature complete and lacking some functionality still.\n\n===\nC++\n===\n\nPre-compiled C++ libraries are available on the Github Releases page (https://github.com/aewallin/opencamlib/releases).\nThis project also installs a OpenCAMLibConfig.cmake, which, if your project uses CMake, allows you to use ``find_package(OpenCAMLib REQUIRED)``.\n\nYou can see an example of that in use over here: ``examples/cpp/test/CMakeLists.txt``\n\n********************\nBuilding from Source\n********************\n\nHaving trouble with a pre-compiled library? Please report it to us.\nIf there are no pre-compiled libraries for your platform or architecture, or want to customize or package opencamlib, this is for you.\n\nOpenCAMLib uses functionality from a library called Boost.\nFor the Python library it uses an extra library called Boost.Python.\n\nOnly the Python bindings need Boost to be **compiled** (with Boost.Python).\nAll other libraries **DO NOT** need Boost to be compiled, in those cases, a headers only version will suffice.\nSo, if you are not compiling the Python libraries, simply download Boost, extract it into a folder, and tell CMake where to look for it.\n\nMake sure to download Boost from the boost.org downloads page, if you download it from github, you have to make sure to install the git submodules **and** build the headers.\n\nWe provide a ``install.sh`` script that helps with installation of dependencies and building OpenCAMLib libraries, you might want to take a look at it first.\nYou can run ``./install.sh --help`` to look at the available options, or inspect it's source code to find out more.\n\n============\nDependencies\n============\n\nTo compile OpenCAMLib, you need:\n\n- **C++ compiler** (It should at least support C++ 14)\n- **Git** (This is used for cloning the repository, and the emscripten SDK)\n- **CMake** (At least version 3.15)\n- **Boost** (When compiling the Python library, you have to **compile** Boost.Python for your Python version after installation)\n\nAt this time of writing, here are the packages to install:\n\nUbuntu Dependencies\n-------------------\n\n..  code-block:: shell\n\n    sudo apt install -y git cmake curl build-essential libboost-dev\n\nmacOS Dependencies\n------------------\n\n..  code-block:: shell\n\n    brew install git cmake curl boost python@3.11 boost-python3\n\nWindows Dependencies\n--------------------\n\nInstall\n\n- Visual Studio Build Tools (https://visualstudio.microsoft.com/visual-cpp-build-tools/)\n- Git (https://git-scm.com/download/win)\n- CMake (https://git-scm.com/download/win)\n\nBy downloading the installers from the internet, or by using your package manager.\n\n================\nBuilding for C++\n================\n\nThe C++ library is the easiest to build, it only depends on Boost's headers.\nMake sure you have a compiler, git, cmake and Boost installed (or simply download and extract it somewhere).\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    cmake .. -D CXX_LIB=\"ON\"\n    make . # try make -j4 for a faster build if you have a multi-core machine\n    make install .\n\nWhen boost is not in a standard location, you can add the ``-D BOOST_ROOT=/path/to/boost`` option to the cmake command.\n\n=======================\nBuilding for Emscripten\n=======================\n\nTo compile the emscripten library, first download, install and activate it using the following commands:\n\n..  code-block:: shell\n\n    git clone https://github.com/emscripten-core/emsdk.git\n    cd emsdk\n    ./emsdk install latest\n    ./emsdk activate latest\n\nNow you can compile OpenCAMLib like this (make sure to replace the ``path/to/`` sections):\n\n..  code-block:: shell\n\n    source path/to/emsdk/emsdk_env.sh\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    emcmake cmake \\\n      -D CMAKE_BUILD_TYPE=\"Release\" \\\n      -D BUILD_EMSCRIPTEN_LIB=\"ON\" \\\n      -D USE_OPENMP=\"OFF\" \\\n      -D CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/src/npmpackage/build\" \\\n      -D BOOST_ROOT=\"/path/to/boost\" \\\n      ..\n    emmake make # try emmake make -j4 for a faster build if you have a multi-core machine\n\nNote that ``USE_OPENMP`` has been turned off, OpenMP is not supported with Emscripten at the moment\n\n====================\nBuilding for Node.js\n====================\n\nTo compile the Node.js library, install the dependencies in ``src/nodejslib``:\n\n..  code-block:: shell\n\n    cd src/nodejslib\n    npm install\n\nNext, use cmake-js to compile the library:\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    ../src/nodejslib/node_modules/.bin/cmake-js \\\n      build \\\n      --directory \"..\" \\\n      --out \".\" \\\n      --parallel 4 \\\n      --CD BUILD_NODEJS_LIB=\"ON\" \\\n      --CD USE_OPENMP=\"ON\" \\\n      --CD CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/build/Release/$(node --print 'process.platform')-nodejs-$(node --print 'process.arch')\" \\\n      --CD BOOST_ROOT=\"/path/to/boost\" \\\n      --config \"Release\"\n\n===================\nBuilding for Python\n===================\n\nThe Python library can be compiled similarly to the C++ example above, however, this time Boost.Python has to be compiled first.\nMost systems have Boost.Python available as a download, but only for a specific Python version only (usually the latest Python version).\nThese might work if you are using Python from the same package provider, but, unfortunately, this is not a very reliable method, so compiling them yourself is usually the best option.\n\nFirst, download and extract Boost:\n\n..  code-block:: shell\n\n    curl \"https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz\" --output \"boost_1_80_0.tar.gz\" --location\n    tar -zxf boost_1_80_0.tar.gz -C /tmp/boost\n    cd /tmp/boost/boost_1_80_0\n\nNow we can compile it:\n\n..  code-block:: shell\n\n    echo \"using python ;\" > ./user-config.jam\n    ./bootstrap.sh\n    ./b2 \\\n      -a \\\n      threading=\"multi\" \\\n      -j4 \\\n      variant=\"release\" \\\n      link=\"static\" \\\n      address-model=\"64\" \\\n      architecture=\"x86\" \\\n      --layout=\"system\" \\\n      --with-python \\\n      --user-config=\"./user-config.jam\" \\\n      cxxflags=\"-fPIC\" \\\n      stage\n\nNote that you can customize the user-config.jam file to point it to your Python installation\n(see: https://www.boost.org/doc/libs/1_78_0/libs/python/doc/html/building/configuring_boost_build.html).\nYou should also specify the correct architecture and address-model.\nOn windows, make sure to use windows style paths, e.g. ``C:\\\\path\\\\to\\\\Python``\n\n*****\nUsage\n*****\n\nPlease take a look at the ``examples/`` folder on how to use OpenCAMLib.\nFor each language there is an example named ``test`` which calls all of the algorithms.\n\nThere is also some API documentation over here: https://opencamlib.readthedocs.io\n\n***************\nCommon Problems\n***************\n\nCompiling OpenCAMLib is unfortunately not very easy and there are many things that can go wrong.\nHere is a list of common problems and solutions.\n\n=================================================\nCould NOT find Boost (missing: Boost_INCLUDE_DIR)\n=================================================\n\nThis happens a lot, here are some of the reasons why this happens:\n\n**You don't have Boost installed.**\n\nIf you forgot to install boost, go ahead and download Boost from from their website: https://www.boost.org/users/download/ and extract it somewhere.\nNow, when compiling the C++ or node.js module, add the\n\n``-D BOOST_ROOT=/path/to/extracted/boost`` flag to the ``cmake ..`` command, or the.\n\n``--boost-prefix /path/to/extracted/boost`` flag to the ``./install.sh`` command\n\n**You installed Boost from Github.**\n\nThe boost that is hosted on Github does not have the headers yet! To compile those, you should run the following commands:\n\n..  code-block:: shell\n\n    ./bootstrap.sh\n    ./b2 headers\n\n**Your CMake version has a FindBoost module which is unaware of your Boost's version.**\n\nThe CMake module that looks for Boost, is usually not aware of the existence of the latest Boost versions.\nYou can help it by providing the version number of your Boost with the ``-D Boost_ADDITIONAL_VERSIONS=\"1.80.0\"`` flag.\nMake sure to change 1.80.0 with your version of Boost.\n\nIt can also be helpfull to enable ``Boost_DEBUG`` in the CMake configuration.\n\n***************\nCross Compiling\n***************\n\nTo compile OpenCAMLib for other architectures, we recommend the following strategies.\nAlways make sure to compile Boost for the correct architecture as well!\n\n=====\nmacOS\n=====\n\nCross compiling on macOS is possible by setting the CMake ``CMAKE_OSX_ARCHITECTURES`` flag.\nWhen using the ``install.sh`` script, you can use the ``--macos-architecture`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=======\nWindows\n=======\n\nCross compiling on Windows is possible by using the \"Visual Studio\" generator (default) and by setting the CMake ``CMAKE_GENERATOR_PLATFORM`` flag.\nWhen using the ``install.sh`` script, you can use the ``--cmake-generator-platform`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=====\nLinux\n=====\n\nTo ensure that compiled libraries work on older linux versions, it has to be compiled with an older Glibc version.\nThe easiest way to accomplish this is by using Docker, there are images available especially for this purpose.\nWhen using the ``install.sh`` script, you can use the ``--docker-image`` flag which will make the command run in a container with the given image name.\n\nC++ docker image\n----------------\n\nWhen cross compiling the C++ library, make sure to use an old Glibc, this is included in the dockcross docker images.\nFor a list of supported architectures, take a look at:\n\nhttps://github.com/dockcross/dockcross#summary-cross-compilers\n\nNode.js docker image\n--------------------\n\nCross compilers for node.js are available here:\n\nhttps://github.com/prebuild/docker-images\n\nPython docker image\n-------------------\n\nCross compilers for python are here:\n\nhttps://github.com/pypa/manylinux#manylinux2014-centos-7-based\n\n*****\nLinks\n*****\n\n- repository https://github.com/aewallin/opencamlib\n- PPAs\n  - https://launchpad.net/~iacobs/+archive/ubuntu/cnc/\n  - https://launchpad.net/~neomilium/+archive/ubuntu/cam\n  - https://launchpad.net/~freecad-community/+archive/ubuntu/ppa\n  - (updated 2012) https://launchpad.net/~anders-e-e-wallin/+archive/ubuntu/cam\n- mailing-list http://groups.google.com/group/opencamlib\n- IRC-channel #cam on irc.freenode.net\n- coding standard (?) http://www.possibility.com/Cpp/CppCodingStandard.html\n\n*********************\nOrganization of Files\n*********************\n\n(generate this with 'tree -dL 2')::\n\n ├── docs                        documentation (not much here yet!)\n ├── examples                    c++, emscripten, nodejs and python examples\n ├── scripts                     CI scripts for installing and building ocl\n ├── src\n │   ├── algo                    algorithms under development\n │   ├── common                  common algorithms and data-structures\n │   ├── cutters                 cutter-classes\n │   ├── cxxlib                  c++ library cmake config\n │   ├── deb                     debian package cmake config\n │   ├── dropcutter              drop-cutter algorithms and operations\n │   ├── emscriptenlib           bindings for emscripten library\n │   ├── geo                     primitive geometry classes (point, triangle, stlsurf, etc.)\n │   ├── nodejslib               Node.js library bindings and cmake config\n │   ├── npmpackage              combined Node.js and emscripten wrappers, for publishing to npm\n │   ├── pythonlib               python library bindings and cmake config\n └── stl                         STL files for testing\n","readmeFilename":"README.rst","_id":"@opencamlib/opencamlib@2023.1.9-dev.297","_nodeVersion":"14.21.1","_npmVersion":"6.14.17","dist":{"integrity":"sha512-3Y6RhN4fuYiJB3dlhHA6nhIbkJPJvRVeRuP1dxDudSFTYRmie2tExOpy1uvzk9A/gublgGBd2Y/kWfhEniIoXQ==","shasum":"8598002bb35a1bcb6e9d81b85205a91957586ac6","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2023.1.9-dev.297.tgz","fileCount":70,"unpackedSize":39645986,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBcMoSjc2y63hrPvalNNgtN097+8Qiw5XCRNJg4BSgFXAiEA655GoLhHBd4Bd565c0bVjMg3UbtDtWhnGxhJvBWXpFY="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvAHtACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo/dw/8CzYPAEndDaQzBfCLwqTDMWTlZSXyWimE+CXi4sBZau8pxKc0\r\nxaIU5aO1Ho3Toayemz793pAYCYrOv9y5T3BreIwLFUsDldxbuit/x8grVixT\r\n5qLmyE2t7fzc1681MGuXvHtL6R4nKueG4T4dCaK6W1tDEQNW9Aw27psJ1zYf\r\nFu3d1PvdbAs6W+wSLU7BHN1fhGWKY+3PbxSGg8ryd/88jwyOYu/eKL0rPtD0\r\nYAxiMV0LNh8164/4LHezQIo9ZFEAN1BjCFLaHFHE+/9902eD1VqXK1xOhX9y\r\na8dnCtmvhombXQaH7j33j2dupmtG2/LBTuMMCh5CmS8qmszrcs6t+OQL6y8m\r\n5cupIbpuzd6VfKJAHVNmwVhvgR98XPE7kQIlPzuRGWtEwtAqYFeddn7rLHX6\r\nVuxJHJ//xTUNCPFzD36FYEh4SLbAcB/R+KH6ySOSkoitLVrCd5Ht/IdIcMlf\r\n2Vg1H+8MsBC5d25ngyNYDSpeXsiGZJd/+bYcbTejsVr+l1Sd5sJ+h+XFr2vP\r\n8ChbJ2bLQPGghH0ZdVCp2+FsmlrB536pShX/hhBz0Pf8hVbVM9d7fWaEY6XA\r\n1HJEPIP4DPOLvHf7QosAt74fjgQh3s0Dt3ggEYFUpHW+z7PdmNTbxpWYc833\r\nINUkUVMltGsNS+OdR358vMIqHxmnB2uEFy4=\r\n=NGw9\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2023.1.9-dev.297_1673265645238_0.21193365336862136"},"_hasShrinkwrap":false},"2023.1.10-dev.299":{"name":"@opencamlib/opencamlib","version":"2023.1.10-dev.299","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"readme":"##########\nOpenCAMLib\n##########\n\n.. image:: https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg\n    :target: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html\n\n.. image:: https://github.com/aewallin/opencamlib/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/aewallin/opencamlib/actions/workflows/test.yml\n\n.. image:: https://readthedocs.org/projects/opencamlib/badge/?version=latest\n    :target: https://opencamlib.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n************\nIntroduction\n************\n\nOpenCAMLib (ocl) is a library for creating 3D toolpaths for CNC-machines such as mills and lathes.\nIt is written in C++ and has bindings for Python, Node.js and the browser.\nAt the moment it supports the following algorithms:\n\n===========\nDrop-cutter\n===========\n\nThe drop cutter algorithm drops a cutter, positioned at a predefined (x,y) location, until it touches the 3D model.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/drop-cutter.png?raw=true\n  :width: 200\n  :alt: Drop Cutter\n\n===========\nPush-cutter\n===========\n\nThe Push-cutter is used to create a Waterline toolpath that follows the shape of the model at a constant z-height in the xy-plane.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/push-cutter.png?raw=true\n  :width: 200\n  :alt: Push Cutter\n\n=======\nCutters\n=======\n\nThe algorithms listed above can be used with following cutters:\n\n- **CylCutter** (flat end mill / cylindrical)\n- **BallCutter** (ball end mill / spherical)\n- **BullCutter** (radius end mill / toroidal)\n- **ConeCutter** (tapered end mill / conical)\n- **CompositeCutter** (combinations of the above / compound)\n\nFrom August 2018 OpenCAMLib is released under LGPL license.\n\n**********************\nPre-compiled Libraries\n**********************\n\nOpenCAMLib provides pre-compiled C++, Node.js and Python libraries for the following platforms and architectures:\n\n+-------------+------------------+\n| **Windows** | ia32 / x64       |\n+-------------+------------------+\n| **macOS**   | x86_64 / arm64   |\n+-------------+------------------+\n| **Linux**   | x86_64 / aarch64 |\n+-------------+------------------+\n\n- The Python library is called ``opencamlib`` and is hosted on PyPi (pypi.org), precompiled libraries are available for Python v3.7 up to v3.11.\n- The Node.js + emscripten library is called ``@opencamlib/opencamlib`` and is hosted on npm (npmjs.org), precompiled libraries are available for Node-API v3 and up.\n- The C++ library is called ``libocl`` and is hosted on our Github Releases page.\n\n======\nPython\n======\n\nThe Python library (hosted on PyPi) can be installed like this:\n\n..  code-block:: shell\n\n    pip install opencamlib\n\nOn some platforms, pip is called pip3, you might have to run:\n\n..  code-block:: shell\n\n    pip3 install opencamlib\n\nNote that pip / pip3 is will install packages for to the system installation of Python, if you want to install a package in a custom Python installation that is not in your $PATH\n(for example, the Python which comes with Blender), you can install packages like so:\n\n..  code-block:: shell\n\n    /path/to/your/custom/python -m pip install opencamlib\n\nIf you don't know where Python is, but you have access to it's interpreter (FreeCAD and Blender both have a Python console), you can simply enter this command in there to install OpenCAMLib:\n\n..  code-block:: python\n\n    import sys; import subprocess; subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'opencamlib'])\n\n\n==========\nJavaScript\n==========\n\nThe JavaScript library (hosted on npm) works in Node.js and the browser (by leveraging emscripten / WASM) can be installed like this:\n\n..  code-block:: shell\n\n    npm install --save @opencamlib/opencamlib\n\nOr, using yarn:\n\n..  code-block:: shell\n\n    yarn add @opencamlib/opencamlib\n\nNote that it is not 100% feature complete and lacking some functionality still.\n\n===\nC++\n===\n\nPre-compiled C++ libraries are available on the Github Releases page (https://github.com/aewallin/opencamlib/releases).\nThis project also installs a OpenCAMLibConfig.cmake, which, if your project uses CMake, allows you to use ``find_package(OpenCAMLib REQUIRED)``.\n\nYou can see an example of that in use over here: ``examples/cpp/test/CMakeLists.txt``\n\n********************\nBuilding from Source\n********************\n\nHaving trouble with a pre-compiled library? Please report it to us.\nIf there are no pre-compiled libraries for your platform or architecture, or want to customize or package opencamlib, this is for you.\n\nOpenCAMLib uses functionality from a library called Boost.\nFor the Python library it uses an extra library called Boost.Python.\n\nOnly the Python bindings need Boost to be **compiled** (with Boost.Python).\nAll other libraries **DO NOT** need Boost to be compiled, in those cases, a headers only version will suffice.\nSo, if you are not compiling the Python libraries, simply download Boost, extract it into a folder, and tell CMake where to look for it.\n\nMake sure to download Boost from the boost.org downloads page, if you download it from github, you have to make sure to install the git submodules **and** build the headers.\n\nWe provide a ``install.sh`` script that helps with installation of dependencies and building OpenCAMLib libraries, you might want to take a look at it first.\nYou can run ``./install.sh --help`` to look at the available options, or inspect it's source code to find out more.\n\n============\nDependencies\n============\n\nTo compile OpenCAMLib, you need:\n\n- **C++ compiler** (It should at least support C++ 14)\n- **Git** (This is used for cloning the repository, and the emscripten SDK)\n- **CMake** (At least version 3.15)\n- **Boost** (When compiling the Python library, you have to **compile** Boost.Python for your Python version after installation)\n\nAt this time of writing, here are the packages to install:\n\nUbuntu Dependencies\n-------------------\n\n..  code-block:: shell\n\n    sudo apt install -y git cmake curl build-essential libboost-dev\n\nmacOS Dependencies\n------------------\n\n..  code-block:: shell\n\n    brew install git cmake curl boost python@3.11 boost-python3\n\nWindows Dependencies\n--------------------\n\nInstall\n\n- Visual Studio Build Tools (https://visualstudio.microsoft.com/visual-cpp-build-tools/)\n- Git (https://git-scm.com/download/win)\n- CMake (https://git-scm.com/download/win)\n\nBy downloading the installers from the internet, or by using your package manager.\n\n================\nBuilding for C++\n================\n\nThe C++ library is the easiest to build, it only depends on Boost's headers.\nMake sure you have a compiler, git, cmake and Boost installed (or simply download and extract it somewhere).\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    cmake .. -D CXX_LIB=\"ON\"\n    make . # try make -j4 for a faster build if you have a multi-core machine\n    make install .\n\nWhen boost is not in a standard location, you can add the ``-D BOOST_ROOT=/path/to/boost`` option to the cmake command.\n\n=======================\nBuilding for Emscripten\n=======================\n\nTo compile the emscripten library, first download, install and activate it using the following commands:\n\n..  code-block:: shell\n\n    git clone https://github.com/emscripten-core/emsdk.git\n    cd emsdk\n    ./emsdk install latest\n    ./emsdk activate latest\n\nNow you can compile OpenCAMLib like this (make sure to replace the ``path/to/`` sections):\n\n..  code-block:: shell\n\n    source path/to/emsdk/emsdk_env.sh\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    emcmake cmake \\\n      -D CMAKE_BUILD_TYPE=\"Release\" \\\n      -D BUILD_EMSCRIPTEN_LIB=\"ON\" \\\n      -D USE_OPENMP=\"OFF\" \\\n      -D CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/src/npmpackage/build\" \\\n      -D BOOST_ROOT=\"/path/to/boost\" \\\n      ..\n    emmake make # try emmake make -j4 for a faster build if you have a multi-core machine\n\nNote that ``USE_OPENMP`` has been turned off, OpenMP is not supported with Emscripten at the moment\n\n====================\nBuilding for Node.js\n====================\n\nTo compile the Node.js library, install the dependencies in ``src/nodejslib``:\n\n..  code-block:: shell\n\n    cd src/nodejslib\n    npm install\n\nNext, use cmake-js to compile the library:\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    ../src/nodejslib/node_modules/.bin/cmake-js \\\n      build \\\n      --directory \"..\" \\\n      --out \".\" \\\n      --parallel 4 \\\n      --CD BUILD_NODEJS_LIB=\"ON\" \\\n      --CD USE_OPENMP=\"ON\" \\\n      --CD CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/build/Release/$(node --print 'process.platform')-nodejs-$(node --print 'process.arch')\" \\\n      --CD BOOST_ROOT=\"/path/to/boost\" \\\n      --config \"Release\"\n\n===================\nBuilding for Python\n===================\n\nThe Python library can be compiled similarly to the C++ example above, however, this time Boost.Python has to be compiled first.\nMost systems have Boost.Python available as a download, but only for a specific Python version only (usually the latest Python version).\nThese might work if you are using Python from the same package provider, but, unfortunately, this is not a very reliable method, so compiling them yourself is usually the best option.\n\nFirst, download and extract Boost:\n\n..  code-block:: shell\n\n    curl \"https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz\" --output \"boost_1_80_0.tar.gz\" --location\n    tar -zxf boost_1_80_0.tar.gz -C /tmp/boost\n    cd /tmp/boost/boost_1_80_0\n\nNow we can compile it:\n\n..  code-block:: shell\n\n    echo \"using python ;\" > ./user-config.jam\n    ./bootstrap.sh\n    ./b2 \\\n      -a \\\n      threading=\"multi\" \\\n      -j4 \\\n      variant=\"release\" \\\n      link=\"static\" \\\n      address-model=\"64\" \\\n      architecture=\"x86\" \\\n      --layout=\"system\" \\\n      --with-python \\\n      --user-config=\"./user-config.jam\" \\\n      cxxflags=\"-fPIC\" \\\n      stage\n\nNote that you can customize the user-config.jam file to point it to your Python installation\n(see: https://www.boost.org/doc/libs/1_78_0/libs/python/doc/html/building/configuring_boost_build.html).\nYou should also specify the correct architecture and address-model.\nOn windows, make sure to use windows style paths, e.g. ``C:\\\\path\\\\to\\\\Python``\n\n*****\nUsage\n*****\n\nPlease take a look at the ``examples/`` folder on how to use OpenCAMLib.\nFor each language there is an example named ``test`` which calls all of the algorithms.\n\nThere is also some API documentation over here: https://opencamlib.readthedocs.io\n\n***************\nCommon Problems\n***************\n\nCompiling OpenCAMLib is unfortunately not very easy and there are many things that can go wrong.\nHere is a list of common problems and solutions.\n\n=================================================\nCould NOT find Boost (missing: Boost_INCLUDE_DIR)\n=================================================\n\nThis happens a lot, here are some of the reasons why this happens:\n\n**You don't have Boost installed.**\n\nIf you forgot to install boost, go ahead and download Boost from from their website: https://www.boost.org/users/download/ and extract it somewhere.\nNow, when compiling the C++ or node.js module, add the\n\n``-D BOOST_ROOT=/path/to/extracted/boost`` flag to the ``cmake ..`` command, or the.\n\n``--boost-prefix /path/to/extracted/boost`` flag to the ``./install.sh`` command\n\n**You installed Boost from Github.**\n\nThe boost that is hosted on Github does not have the headers yet! To compile those, you should run the following commands:\n\n..  code-block:: shell\n\n    ./bootstrap.sh\n    ./b2 headers\n\n**Your CMake version has a FindBoost module which is unaware of your Boost's version.**\n\nThe CMake module that looks for Boost, is usually not aware of the existence of the latest Boost versions.\nYou can help it by providing the version number of your Boost with the ``-D Boost_ADDITIONAL_VERSIONS=\"1.80.0\"`` flag.\nMake sure to change 1.80.0 with your version of Boost.\n\nIt can also be helpfull to enable ``Boost_DEBUG`` in the CMake configuration.\n\n***************\nCross Compiling\n***************\n\nTo compile OpenCAMLib for other architectures, we recommend the following strategies.\nAlways make sure to compile Boost for the correct architecture as well!\n\n=====\nmacOS\n=====\n\nCross compiling on macOS is possible by setting the CMake ``CMAKE_OSX_ARCHITECTURES`` flag.\nWhen using the ``install.sh`` script, you can use the ``--macos-architecture`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=======\nWindows\n=======\n\nCross compiling on Windows is possible by using the \"Visual Studio\" generator (default) and by setting the CMake ``CMAKE_GENERATOR_PLATFORM`` flag.\nWhen using the ``install.sh`` script, you can use the ``--cmake-generator-platform`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=====\nLinux\n=====\n\nTo ensure that compiled libraries work on older linux versions, it has to be compiled with an older Glibc version.\nThe easiest way to accomplish this is by using Docker, there are images available especially for this purpose.\nWhen using the ``install.sh`` script, you can use the ``--docker-image`` flag which will make the command run in a container with the given image name.\n\nC++ docker image\n----------------\n\nWhen cross compiling the C++ library, make sure to use an old Glibc, this is included in the dockcross docker images.\nFor a list of supported architectures, take a look at:\n\nhttps://github.com/dockcross/dockcross#summary-cross-compilers\n\nNode.js docker image\n--------------------\n\nCross compilers for node.js are available here:\n\nhttps://github.com/prebuild/docker-images\n\nPython docker image\n-------------------\n\nCross compilers for python are here:\n\nhttps://github.com/pypa/manylinux#manylinux2014-centos-7-based\n\n*****\nLinks\n*****\n\n- repository https://github.com/aewallin/opencamlib\n- PPAs\n  - https://launchpad.net/~iacobs/+archive/ubuntu/cnc/\n  - https://launchpad.net/~neomilium/+archive/ubuntu/cam\n  - https://launchpad.net/~freecad-community/+archive/ubuntu/ppa\n  - (updated 2012) https://launchpad.net/~anders-e-e-wallin/+archive/ubuntu/cam\n- mailing-list http://groups.google.com/group/opencamlib\n- IRC-channel #cam on irc.freenode.net\n- coding standard (?) http://www.possibility.com/Cpp/CppCodingStandard.html\n\n*********************\nOrganization of Files\n*********************\n\n(generate this with 'tree -dL 2')::\n\n ├── docs                        documentation (not much here yet!)\n ├── examples                    c++, emscripten, nodejs and python examples\n ├── scripts                     CI scripts for installing and building ocl\n ├── src\n │   ├── algo                    algorithms under development\n │   ├── common                  common algorithms and data-structures\n │   ├── cutters                 cutter-classes\n │   ├── cxxlib                  c++ library cmake config\n │   ├── deb                     debian package cmake config\n │   ├── dropcutter              drop-cutter algorithms and operations\n │   ├── emscriptenlib           bindings for emscripten library\n │   ├── geo                     primitive geometry classes (point, triangle, stlsurf, etc.)\n │   ├── nodejslib               Node.js library bindings and cmake config\n │   ├── npmpackage              combined Node.js and emscripten wrappers, for publishing to npm\n │   ├── pythonlib               python library bindings and cmake config\n └── stl                         STL files for testing\n","readmeFilename":"README.rst","_id":"@opencamlib/opencamlib@2023.1.10-dev.299","_nodeVersion":"14.21.1","_npmVersion":"6.14.17","dist":{"integrity":"sha512-f20zKLANmXWTAxH2G+QiWSxkCi4FhRP9ebetTaLYcmhSr09i/z3QwWTg4bF6qAPmrJ//D7ClW6Ek0NHi7Lvr6Q==","shasum":"b7756daf34296b2046e136030dab8b0125c1f3ae","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2023.1.10-dev.299.tgz","fileCount":70,"unpackedSize":39645987,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCOqdv6OonQjN69Wl393rqKqPRq0CmFbffyQ3vMtBKrhwIhAMHKL+3dOAqEsozA6Vc86jYcMZ8+yET1JFa6pD9nV0oQ"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvVOUACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpZHw//dfBOBfIo6/EI2wfHWyLXYEuXHNZyxdZCxXbEoWurid8sID9f\r\nNBzQLqO/M0gTffIy8GfOU711anVCkgmb5dy9X5leM/CEQDTRKg0iJjDgXf40\r\nzVh6unp08SrrNt5EPjb/wvfTP/8+O+nLpO2fVrw3buzmjPBsxHAaz+KPJojH\r\neFvem6mFLgpGOpKnvs3feOSyQ58xiJVdkE54UWLschVMH9EQCPw76RhG9nyp\r\nRWntGnci6XylgRmUbXeqAtpkfPbLzWn6IXwLGblKR3dA9ScQ/IilmjefO87A\r\nR0Ur84s8PfHsvD5dHbICE3621xYICA83UL16XiextC4pT6PE8rUNk/fFRk49\r\nkf/I2PZ7bc0V9Hdmk2JeSIXpESSOKQVo9fgO7LFLAigmqJKU3Ba4O6Sr6n7C\r\nO06H/Ze0xMnh84fpEbgPmprriQ1puGXHSNyMTGktfy1v8VNvKLb6XOr4riUh\r\nbDIf8lPFjuO1GVQKCp06+TRvbUPYPVVqxKXpH84F/nDlxXHQ94sGu2Ev60rU\r\n+kvEhNBAXaFOzo9o5KYI3rjUqIRc1KQcchH23qy+j57VtOmJ8aQo5jHvtm+N\r\nroz5HH+LMNryNCOghO5cBncTRANn7naJE3mYkyI/MXEPSNoL2yMqqm8ecyv+\r\nRbUHn7jACLr4UZNuiLhJFHLRejQ9Js5wXJI=\r\n=6byK\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2023.1.10-dev.299_1673352083609_0.06470183731759671"},"_hasShrinkwrap":false},"2023.1.11-dev.300":{"name":"@opencamlib/opencamlib","version":"2023.1.11-dev.300","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"readme":"##########\nOpenCAMLib\n##########\n\n.. image:: https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg\n    :target: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html\n\n.. image:: https://github.com/aewallin/opencamlib/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/aewallin/opencamlib/actions/workflows/test.yml\n\n.. image:: https://readthedocs.org/projects/opencamlib/badge/?version=latest\n    :target: https://opencamlib.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n************\nIntroduction\n************\n\nOpenCAMLib (ocl) is a library for creating 3D toolpaths for CNC-machines such as mills and lathes.\nIt is written in C++ and has bindings for Python, Node.js and the browser.\nAt the moment it supports the following algorithms:\n\n===========\nDrop-cutter\n===========\n\nThe drop cutter algorithm drops a cutter, positioned at a predefined (x,y) location, until it touches the 3D model.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/drop-cutter.png?raw=true\n  :width: 200\n  :alt: Drop Cutter\n\n===========\nPush-cutter\n===========\n\nThe Push-cutter is used to create a Waterline toolpath that follows the shape of the model at a constant z-height in the xy-plane.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/push-cutter.png?raw=true\n  :width: 200\n  :alt: Push Cutter\n\n=======\nCutters\n=======\n\nThe algorithms listed above can be used with following cutters:\n\n- **CylCutter** (flat end mill / cylindrical)\n- **BallCutter** (ball end mill / spherical)\n- **BullCutter** (radius end mill / toroidal)\n- **ConeCutter** (tapered end mill / conical)\n- **CompositeCutter** (combinations of the above / compound)\n\nFrom August 2018 OpenCAMLib is released under LGPL license.\n\n**********************\nPre-compiled Libraries\n**********************\n\nOpenCAMLib provides pre-compiled C++, Node.js and Python libraries for the following platforms and architectures:\n\n+-------------+------------------+\n| **Windows** | ia32 / x64       |\n+-------------+------------------+\n| **macOS**   | x86_64 / arm64   |\n+-------------+------------------+\n| **Linux**   | x86_64 / aarch64 |\n+-------------+------------------+\n\n- The Python library is called ``opencamlib`` and is hosted on PyPi (pypi.org), precompiled libraries are available for Python v3.7 up to v3.11.\n- The Node.js + emscripten library is called ``@opencamlib/opencamlib`` and is hosted on npm (npmjs.org), precompiled libraries are available for Node-API v3 and up.\n- The C++ library is called ``libocl`` and is hosted on our Github Releases page.\n\n======\nPython\n======\n\nThe Python library (hosted on PyPi) can be installed like this:\n\n..  code-block:: shell\n\n    pip install opencamlib\n\nOn some platforms, pip is called pip3, you might have to run:\n\n..  code-block:: shell\n\n    pip3 install opencamlib\n\nNote that pip / pip3 is will install packages for to the system installation of Python, if you want to install a package in a custom Python installation that is not in your $PATH\n(for example, the Python which comes with Blender), you can install packages like so:\n\n..  code-block:: shell\n\n    /path/to/your/custom/python -m pip install opencamlib\n\nIf you don't know where Python is, but you have access to it's interpreter (FreeCAD and Blender both have a Python console), you can simply enter this command in there to install OpenCAMLib:\n\n..  code-block:: python\n\n    import sys; import subprocess; subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'opencamlib'])\n\n\n==========\nJavaScript\n==========\n\nThe JavaScript library (hosted on npm) works in Node.js and the browser (by leveraging emscripten / WASM) can be installed like this:\n\n..  code-block:: shell\n\n    npm install --save @opencamlib/opencamlib\n\nOr, using yarn:\n\n..  code-block:: shell\n\n    yarn add @opencamlib/opencamlib\n\nNote that it is not 100% feature complete and lacking some functionality still.\n\n===\nC++\n===\n\nPre-compiled C++ libraries are available on the Github Releases page (https://github.com/aewallin/opencamlib/releases).\nThis project also installs a OpenCAMLibConfig.cmake, which, if your project uses CMake, allows you to use ``find_package(OpenCAMLib REQUIRED)``.\n\nYou can see an example of that in use over here: ``examples/cpp/test/CMakeLists.txt``\n\n********************\nBuilding from Source\n********************\n\nHaving trouble with a pre-compiled library? Please report it to us.\nIf there are no pre-compiled libraries for your platform or architecture, or want to customize or package opencamlib, this is for you.\n\nOpenCAMLib uses functionality from a library called Boost.\nFor the Python library it uses an extra library called Boost.Python.\n\nOnly the Python bindings need Boost to be **compiled** (with Boost.Python).\nAll other libraries **DO NOT** need Boost to be compiled, in those cases, a headers only version will suffice.\nSo, if you are not compiling the Python libraries, simply download Boost, extract it into a folder, and tell CMake where to look for it.\n\nMake sure to download Boost from the boost.org downloads page, if you download it from github, you have to make sure to install the git submodules **and** build the headers.\n\nWe provide a ``install.sh`` script that helps with installation of dependencies and building OpenCAMLib libraries, you might want to take a look at it first.\nYou can run ``./install.sh --help`` to look at the available options, or inspect it's source code to find out more.\n\n============\nDependencies\n============\n\nTo compile OpenCAMLib, you need:\n\n- **C++ compiler** (It should at least support C++ 14)\n- **Git** (This is used for cloning the repository, and the emscripten SDK)\n- **CMake** (At least version 3.15)\n- **Boost** (When compiling the Python library, you have to **compile** Boost.Python for your Python version after installation)\n\nAt this time of writing, here are the packages to install:\n\nUbuntu Dependencies\n-------------------\n\n..  code-block:: shell\n\n    sudo apt install -y git cmake curl build-essential libboost-dev\n\nmacOS Dependencies\n------------------\n\n..  code-block:: shell\n\n    brew install git cmake curl boost python@3.11 boost-python3\n\nWindows Dependencies\n--------------------\n\nInstall\n\n- Visual Studio Build Tools (https://visualstudio.microsoft.com/visual-cpp-build-tools/)\n- Git (https://git-scm.com/download/win)\n- CMake (https://git-scm.com/download/win)\n\nBy downloading the installers from the internet, or by using your package manager.\n\n================\nBuilding for C++\n================\n\nThe C++ library is the easiest to build, it only depends on Boost's headers.\nMake sure you have a compiler, git, cmake and Boost installed (or simply download and extract it somewhere).\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    cmake .. -D CXX_LIB=\"ON\"\n    make . # try make -j4 for a faster build if you have a multi-core machine\n    make install .\n\nWhen boost is not in a standard location, you can add the ``-D BOOST_ROOT=/path/to/boost`` option to the cmake command.\n\n=======================\nBuilding for Emscripten\n=======================\n\nTo compile the emscripten library, first download, install and activate it using the following commands:\n\n..  code-block:: shell\n\n    git clone https://github.com/emscripten-core/emsdk.git\n    cd emsdk\n    ./emsdk install latest\n    ./emsdk activate latest\n\nNow you can compile OpenCAMLib like this (make sure to replace the ``path/to/`` sections):\n\n..  code-block:: shell\n\n    source path/to/emsdk/emsdk_env.sh\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    emcmake cmake \\\n      -D CMAKE_BUILD_TYPE=\"Release\" \\\n      -D BUILD_EMSCRIPTEN_LIB=\"ON\" \\\n      -D USE_OPENMP=\"OFF\" \\\n      -D CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/src/npmpackage/build\" \\\n      -D BOOST_ROOT=\"/path/to/boost\" \\\n      ..\n    emmake make # try emmake make -j4 for a faster build if you have a multi-core machine\n\nNote that ``USE_OPENMP`` has been turned off, OpenMP is not supported with Emscripten at the moment\n\n====================\nBuilding for Node.js\n====================\n\nTo compile the Node.js library, install the dependencies in ``src/nodejslib``:\n\n..  code-block:: shell\n\n    cd src/nodejslib\n    npm install\n\nNext, use cmake-js to compile the library:\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    ../src/nodejslib/node_modules/.bin/cmake-js \\\n      build \\\n      --directory \"..\" \\\n      --out \".\" \\\n      --parallel 4 \\\n      --CD BUILD_NODEJS_LIB=\"ON\" \\\n      --CD USE_OPENMP=\"ON\" \\\n      --CD CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/build/Release/$(node --print 'process.platform')-nodejs-$(node --print 'process.arch')\" \\\n      --CD BOOST_ROOT=\"/path/to/boost\" \\\n      --config \"Release\"\n\n===================\nBuilding for Python\n===================\n\nThe Python library can be compiled similarly to the C++ example above, however, this time Boost.Python has to be compiled first.\nMost systems have Boost.Python available as a download, but only for a specific Python version only (usually the latest Python version).\nThese might work if you are using Python from the same package provider, but, unfortunately, this is not a very reliable method, so compiling them yourself is usually the best option.\n\nFirst, download and extract Boost:\n\n..  code-block:: shell\n\n    curl \"https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz\" --output \"boost_1_80_0.tar.gz\" --location\n    tar -zxf boost_1_80_0.tar.gz -C /tmp/boost\n    cd /tmp/boost/boost_1_80_0\n\nNow we can compile it:\n\n..  code-block:: shell\n\n    echo \"using python ;\" > ./user-config.jam\n    ./bootstrap.sh\n    ./b2 \\\n      -a \\\n      threading=\"multi\" \\\n      -j4 \\\n      variant=\"release\" \\\n      link=\"static\" \\\n      address-model=\"64\" \\\n      architecture=\"x86\" \\\n      --layout=\"system\" \\\n      --with-python \\\n      --user-config=\"./user-config.jam\" \\\n      cxxflags=\"-fPIC\" \\\n      stage\n\nNote that you can customize the user-config.jam file to point it to your Python installation\n(see: https://www.boost.org/doc/libs/1_78_0/libs/python/doc/html/building/configuring_boost_build.html).\nYou should also specify the correct architecture and address-model.\nOn windows, make sure to use windows style paths, e.g. ``C:\\\\path\\\\to\\\\Python``\n\n*****\nUsage\n*****\n\nPlease take a look at the ``examples/`` folder on how to use OpenCAMLib.\nFor each language there is an example named ``test`` which calls all of the algorithms.\n\nThere is also some API documentation over here: https://opencamlib.readthedocs.io\n\n***************\nCommon Problems\n***************\n\nCompiling OpenCAMLib is unfortunately not very easy and there are many things that can go wrong.\nHere is a list of common problems and solutions.\n\n=================================================\nCould NOT find Boost (missing: Boost_INCLUDE_DIR)\n=================================================\n\nThis happens a lot, here are some of the reasons why this happens:\n\n**You don't have Boost installed.**\n\nIf you forgot to install boost, go ahead and download Boost from from their website: https://www.boost.org/users/download/ and extract it somewhere.\nNow, when compiling the C++ or node.js module, add the\n\n``-D BOOST_ROOT=/path/to/extracted/boost`` flag to the ``cmake ..`` command, or the.\n\n``--boost-prefix /path/to/extracted/boost`` flag to the ``./install.sh`` command\n\n**You installed Boost from Github.**\n\nThe boost that is hosted on Github does not have the headers yet! To compile those, you should run the following commands:\n\n..  code-block:: shell\n\n    ./bootstrap.sh\n    ./b2 headers\n\n**Your CMake version has a FindBoost module which is unaware of your Boost's version.**\n\nThe CMake module that looks for Boost, is usually not aware of the existence of the latest Boost versions.\nYou can help it by providing the version number of your Boost with the ``-D Boost_ADDITIONAL_VERSIONS=\"1.80.0\"`` flag.\nMake sure to change 1.80.0 with your version of Boost.\n\nIt can also be helpfull to enable ``Boost_DEBUG`` in the CMake configuration.\n\n***************\nCross Compiling\n***************\n\nTo compile OpenCAMLib for other architectures, we recommend the following strategies.\nAlways make sure to compile Boost for the correct architecture as well!\n\n=====\nmacOS\n=====\n\nCross compiling on macOS is possible by setting the CMake ``CMAKE_OSX_ARCHITECTURES`` flag.\nWhen using the ``install.sh`` script, you can use the ``--macos-architecture`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=======\nWindows\n=======\n\nCross compiling on Windows is possible by using the \"Visual Studio\" generator (default) and by setting the CMake ``CMAKE_GENERATOR_PLATFORM`` flag.\nWhen using the ``install.sh`` script, you can use the ``--cmake-generator-platform`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=====\nLinux\n=====\n\nTo ensure that compiled libraries work on older linux versions, it has to be compiled with an older Glibc version.\nThe easiest way to accomplish this is by using Docker, there are images available especially for this purpose.\nWhen using the ``install.sh`` script, you can use the ``--docker-image`` flag which will make the command run in a container with the given image name.\n\nC++ docker image\n----------------\n\nWhen cross compiling the C++ library, make sure to use an old Glibc, this is included in the dockcross docker images.\nFor a list of supported architectures, take a look at:\n\nhttps://github.com/dockcross/dockcross#summary-cross-compilers\n\nNode.js docker image\n--------------------\n\nCross compilers for node.js are available here:\n\nhttps://github.com/prebuild/docker-images\n\nPython docker image\n-------------------\n\nCross compilers for python are here:\n\nhttps://github.com/pypa/manylinux#manylinux2014-centos-7-based\n\n*****\nLinks\n*****\n\n- repository https://github.com/aewallin/opencamlib\n- PPAs\n  - https://launchpad.net/~iacobs/+archive/ubuntu/cnc/\n  - https://launchpad.net/~neomilium/+archive/ubuntu/cam\n  - https://launchpad.net/~freecad-community/+archive/ubuntu/ppa\n  - (updated 2012) https://launchpad.net/~anders-e-e-wallin/+archive/ubuntu/cam\n- mailing-list http://groups.google.com/group/opencamlib\n- IRC-channel #cam on irc.freenode.net\n- coding standard (?) http://www.possibility.com/Cpp/CppCodingStandard.html\n\n*********************\nOrganization of Files\n*********************\n\n(generate this with 'tree -dL 2')::\n\n ├── docs                        documentation (not much here yet!)\n ├── examples                    c++, emscripten, nodejs and python examples\n ├── scripts                     CI scripts for installing and building ocl\n ├── src\n │   ├── algo                    algorithms under development\n │   ├── common                  common algorithms and data-structures\n │   ├── cutters                 cutter-classes\n │   ├── cxxlib                  c++ library cmake config\n │   ├── deb                     debian package cmake config\n │   ├── dropcutter              drop-cutter algorithms and operations\n │   ├── emscriptenlib           bindings for emscripten library\n │   ├── geo                     primitive geometry classes (point, triangle, stlsurf, etc.)\n │   ├── nodejslib               Node.js library bindings and cmake config\n │   ├── npmpackage              combined Node.js and emscripten wrappers, for publishing to npm\n │   ├── pythonlib               python library bindings and cmake config\n └── stl                         STL files for testing\n","readmeFilename":"README.rst","_id":"@opencamlib/opencamlib@2023.1.11-dev.300","_nodeVersion":"14.21.1","_npmVersion":"6.14.17","dist":{"integrity":"sha512-rmPQ6xgpD6VXhsXch23vxruvLWl2+nhgHpmfd1p0Wd/WpoAvhDKBByrnGJ2fFBLmzxZKBOXbcf/tpDuChO1qiw==","shasum":"c0444e24553cb0687f77f1e6f9a017d98d7e3231","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2023.1.11-dev.300.tgz","fileCount":70,"unpackedSize":39092739,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH3NLeWwf145b46PATM0Yk6GMIxWVJZVe7RspCdhP/ioAiAtaPXiqBi6bjcp20JvhhK6MuuWkjLE3SZ1+2LTllMhzQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvqPKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpprxAAn9pz6hSnlDncLVIWlFG/Ot0/eYyiC9w3kWMGI8ztogftiJp2\r\nUEuAGk/GAx8Bzr7APpFZ5313llAzIdje2lF08MWHQ1QigyQJHyX5qajxP4z0\r\nLxVSEht9c69xh/nhLOn+SU71STrWJ6bzkGLyoOlLYDlGouEb3fvnWi/TQ8NB\r\nbX+Xwd7okXXSZHjalW8NGWNYYuggpHqu6NG8YZJktU3zqrsPA9WA+yKlazdX\r\nEPBJiKJuqnm+a4xRwpQqx+mLfbqMXraoWDvS5S59yKHBsooMpJvRP6eY0RSq\r\nKPNmIvdpUGvi+babv79/ZejNzTmKWkXbQuEFGExyUZ0YHmXtEK/Ebdi6HDi+\r\nOktS4w6/nbJ5Y7idkZkj+JcEb7dSHwpcEWh4egwirYa5/Fmx/LmPoYVgwfF8\r\n53WNb+r5M1B8lnHtuLU1i+O+V04PdIplPzHe4XcoAUy/T3qyb2PfV8QrjmAj\r\nYPONcTIbUQ8xguZWnndg9fBHlgG2N3r8UMqPyDTKx54EeAJQbE8y6nLTyMJo\r\n+AE4AIPYSbP8135r18Xn3HOz6G6tXEYjdCFSiX6aNWJtQMuuF2ZAzATM3MWi\r\ndpV0KwjGFv7uyIkoLl0/evi1L7/YugJ2hLn01W4WnEBDPuNlc/VAb/CXY3cG\r\n2HUktRBj3zVntG6RvmcIDnU3HaVmBwtGz6A=\r\n=ea9W\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2023.1.11-dev.300_1673438154381_0.11467979048379173"},"_hasShrinkwrap":false},"2023.1.11-dev.301":{"name":"@opencamlib/opencamlib","version":"2023.1.11-dev.301","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"readme":"##########\nOpenCAMLib\n##########\n\n.. image:: https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg\n    :target: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html\n\n.. image:: https://github.com/aewallin/opencamlib/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/aewallin/opencamlib/actions/workflows/test.yml\n\n.. image:: https://readthedocs.org/projects/opencamlib/badge/?version=latest\n    :target: https://opencamlib.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n************\nIntroduction\n************\n\nOpenCAMLib (ocl) is a library for creating 3D toolpaths for CNC-machines such as mills and lathes.\nIt is written in C++ and has bindings for Python, Node.js and the browser.\nAt the moment it supports the following algorithms:\n\n===========\nDrop-cutter\n===========\n\nThe drop cutter algorithm drops a cutter, positioned at a predefined (x,y) location, until it touches the 3D model.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/drop-cutter.png?raw=true\n  :width: 200\n  :alt: Drop Cutter\n\n===========\nPush-cutter\n===========\n\nThe Push-cutter is used to create a Waterline toolpath that follows the shape of the model at a constant z-height in the xy-plane.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/push-cutter.png?raw=true\n  :width: 200\n  :alt: Push Cutter\n\n=======\nCutters\n=======\n\nThe algorithms listed above can be used with following cutters:\n\n- **CylCutter** (flat end mill / cylindrical)\n- **BallCutter** (ball end mill / spherical)\n- **BullCutter** (radius end mill / toroidal)\n- **ConeCutter** (tapered end mill / conical)\n- **CompositeCutter** (combinations of the above / compound)\n\nFrom August 2018 OpenCAMLib is released under LGPL license.\n\n**********************\nPre-compiled Libraries\n**********************\n\nOpenCAMLib provides pre-compiled C++, Node.js and Python libraries for the following platforms and architectures:\n\n+-------------+------------------+\n| **Windows** | ia32 / x64       |\n+-------------+------------------+\n| **macOS**   | x86_64 / arm64   |\n+-------------+------------------+\n| **Linux**   | x86_64 / aarch64 |\n+-------------+------------------+\n\n- The Python library is called ``opencamlib`` and is hosted on PyPi (pypi.org), precompiled libraries are available for Python v3.7 up to v3.11.\n- The Node.js + emscripten library is called ``@opencamlib/opencamlib`` and is hosted on npm (npmjs.org), precompiled libraries are available for Node-API v3 and up.\n- The C++ library is called ``libocl`` and is hosted on our Github Releases page.\n\n======\nPython\n======\n\nThe Python library (hosted on PyPi) can be installed like this:\n\n..  code-block:: shell\n\n    pip install opencamlib\n\nOn some platforms, pip is called pip3, you might have to run:\n\n..  code-block:: shell\n\n    pip3 install opencamlib\n\nNote that pip / pip3 is will install packages for to the system installation of Python, if you want to install a package in a custom Python installation that is not in your $PATH\n(for example, the Python which comes with Blender), you can install packages like so:\n\n..  code-block:: shell\n\n    /path/to/your/custom/python -m pip install opencamlib\n\nIf you don't know where Python is, but you have access to it's interpreter (FreeCAD and Blender both have a Python console), you can simply enter this command in there to install OpenCAMLib:\n\n..  code-block:: python\n\n    import sys; import subprocess; subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'opencamlib'])\n\n\n==========\nJavaScript\n==========\n\nThe JavaScript library (hosted on npm) works in Node.js and the browser (by leveraging emscripten / WASM) can be installed like this:\n\n..  code-block:: shell\n\n    npm install --save @opencamlib/opencamlib\n\nOr, using yarn:\n\n..  code-block:: shell\n\n    yarn add @opencamlib/opencamlib\n\nNote that it is not 100% feature complete and lacking some functionality still.\n\n===\nC++\n===\n\nPre-compiled C++ libraries are available on the Github Releases page (https://github.com/aewallin/opencamlib/releases).\nThis project also installs a OpenCAMLibConfig.cmake, which, if your project uses CMake, allows you to use ``find_package(OpenCAMLib REQUIRED)``.\n\nYou can see an example of that in use over here: ``examples/cpp/test/CMakeLists.txt``\n\n********************\nBuilding from Source\n********************\n\nHaving trouble with a pre-compiled library? Please report it to us.\nIf there are no pre-compiled libraries for your platform or architecture, or want to customize or package opencamlib, this is for you.\n\nOpenCAMLib uses functionality from a library called Boost.\nFor the Python library it uses an extra library called Boost.Python.\n\nOnly the Python bindings need Boost to be **compiled** (with Boost.Python).\nAll other libraries **DO NOT** need Boost to be compiled, in those cases, a headers only version will suffice.\nSo, if you are not compiling the Python libraries, simply download Boost, extract it into a folder, and tell CMake where to look for it.\n\nMake sure to download Boost from the boost.org downloads page, if you download it from github, you have to make sure to install the git submodules **and** build the headers.\n\nWe provide a ``install.sh`` script that helps with installation of dependencies and building OpenCAMLib libraries, you might want to take a look at it first.\nYou can run ``./install.sh --help`` to look at the available options, or inspect it's source code to find out more.\n\n============\nDependencies\n============\n\nTo compile OpenCAMLib, you need:\n\n- **C++ compiler** (It should at least support C++ 14)\n- **Git** (This is used for cloning the repository, and the emscripten SDK)\n- **CMake** (At least version 3.15)\n- **Boost** (When compiling the Python library, you have to **compile** Boost.Python for your Python version after installation)\n\nAt this time of writing, here are the packages to install:\n\nUbuntu Dependencies\n-------------------\n\n..  code-block:: shell\n\n    sudo apt install -y git cmake curl build-essential libboost-dev\n\nmacOS Dependencies\n------------------\n\n..  code-block:: shell\n\n    brew install git cmake curl boost python@3.11 boost-python3\n\nWindows Dependencies\n--------------------\n\nInstall\n\n- Visual Studio Build Tools (https://visualstudio.microsoft.com/visual-cpp-build-tools/)\n- Git (https://git-scm.com/download/win)\n- CMake (https://git-scm.com/download/win)\n\nBy downloading the installers from the internet, or by using your package manager.\n\n================\nBuilding for C++\n================\n\nThe C++ library is the easiest to build, it only depends on Boost's headers.\nMake sure you have a compiler, git, cmake and Boost installed (or simply download and extract it somewhere).\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    cmake .. -D CXX_LIB=\"ON\"\n    make . # try make -j4 for a faster build if you have a multi-core machine\n    make install .\n\nWhen boost is not in a standard location, you can add the ``-D BOOST_ROOT=/path/to/boost`` option to the cmake command.\n\n=======================\nBuilding for Emscripten\n=======================\n\nTo compile the emscripten library, first download, install and activate it using the following commands:\n\n..  code-block:: shell\n\n    git clone https://github.com/emscripten-core/emsdk.git\n    cd emsdk\n    ./emsdk install latest\n    ./emsdk activate latest\n\nNow you can compile OpenCAMLib like this (make sure to replace the ``path/to/`` sections):\n\n..  code-block:: shell\n\n    source path/to/emsdk/emsdk_env.sh\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    emcmake cmake \\\n      -D CMAKE_BUILD_TYPE=\"Release\" \\\n      -D BUILD_EMSCRIPTEN_LIB=\"ON\" \\\n      -D USE_OPENMP=\"OFF\" \\\n      -D CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/src/npmpackage/build\" \\\n      -D BOOST_ROOT=\"/path/to/boost\" \\\n      ..\n    emmake make # try emmake make -j4 for a faster build if you have a multi-core machine\n\nNote that ``USE_OPENMP`` has been turned off, OpenMP is not supported with Emscripten at the moment\n\n====================\nBuilding for Node.js\n====================\n\nTo compile the Node.js library, install the dependencies in ``src/nodejslib``:\n\n..  code-block:: shell\n\n    cd src/nodejslib\n    npm install\n\nNext, use cmake-js to compile the library:\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    ../src/nodejslib/node_modules/.bin/cmake-js \\\n      build \\\n      --directory \"..\" \\\n      --out \".\" \\\n      --parallel 4 \\\n      --CD BUILD_NODEJS_LIB=\"ON\" \\\n      --CD USE_OPENMP=\"ON\" \\\n      --CD CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/build/Release/$(node --print 'process.platform')-nodejs-$(node --print 'process.arch')\" \\\n      --CD BOOST_ROOT=\"/path/to/boost\" \\\n      --config \"Release\"\n\n===================\nBuilding for Python\n===================\n\nThe Python library can be compiled similarly to the C++ example above, however, this time Boost.Python has to be compiled first.\nMost systems have Boost.Python available as a download, but only for a specific Python version only (usually the latest Python version).\nThese might work if you are using Python from the same package provider, but, unfortunately, this is not a very reliable method, so compiling them yourself is usually the best option.\n\nFirst, download and extract Boost:\n\n..  code-block:: shell\n\n    curl \"https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz\" --output \"boost_1_80_0.tar.gz\" --location\n    tar -zxf boost_1_80_0.tar.gz -C /tmp/boost\n    cd /tmp/boost/boost_1_80_0\n\nNow we can compile it:\n\n..  code-block:: shell\n\n    echo \"using python ;\" > ./user-config.jam\n    ./bootstrap.sh\n    ./b2 \\\n      -a \\\n      threading=\"multi\" \\\n      -j4 \\\n      variant=\"release\" \\\n      link=\"static\" \\\n      address-model=\"64\" \\\n      architecture=\"x86\" \\\n      --layout=\"system\" \\\n      --with-python \\\n      --user-config=\"./user-config.jam\" \\\n      cxxflags=\"-fPIC\" \\\n      stage\n\nNote that you can customize the user-config.jam file to point it to your Python installation\n(see: https://www.boost.org/doc/libs/1_78_0/libs/python/doc/html/building/configuring_boost_build.html).\nYou should also specify the correct architecture and address-model.\nOn windows, make sure to use windows style paths, e.g. ``C:\\\\path\\\\to\\\\Python``\n\n*****\nUsage\n*****\n\nPlease take a look at the ``examples/`` folder on how to use OpenCAMLib.\nFor each language there is an example named ``test`` which calls all of the algorithms.\n\nThere is also some API documentation over here: https://opencamlib.readthedocs.io\n\n***************\nCommon Problems\n***************\n\nCompiling OpenCAMLib is unfortunately not very easy and there are many things that can go wrong.\nHere is a list of common problems and solutions.\n\n=================================================\nCould NOT find Boost (missing: Boost_INCLUDE_DIR)\n=================================================\n\nThis happens a lot, here are some of the reasons why this happens:\n\n**You don't have Boost installed.**\n\nIf you forgot to install boost, go ahead and download Boost from from their website: https://www.boost.org/users/download/ and extract it somewhere.\nNow, when compiling the C++ or node.js module, add the\n\n``-D BOOST_ROOT=/path/to/extracted/boost`` flag to the ``cmake ..`` command, or the.\n\n``--boost-prefix /path/to/extracted/boost`` flag to the ``./install.sh`` command\n\n**You installed Boost from Github.**\n\nThe boost that is hosted on Github does not have the headers yet! To compile those, you should run the following commands:\n\n..  code-block:: shell\n\n    ./bootstrap.sh\n    ./b2 headers\n\n**Your CMake version has a FindBoost module which is unaware of your Boost's version.**\n\nThe CMake module that looks for Boost, is usually not aware of the existence of the latest Boost versions.\nYou can help it by providing the version number of your Boost with the ``-D Boost_ADDITIONAL_VERSIONS=\"1.80.0\"`` flag.\nMake sure to change 1.80.0 with your version of Boost.\n\nIt can also be helpfull to enable ``Boost_DEBUG`` in the CMake configuration.\n\n***************\nCross Compiling\n***************\n\nTo compile OpenCAMLib for other architectures, we recommend the following strategies.\nAlways make sure to compile Boost for the correct architecture as well!\n\n=====\nmacOS\n=====\n\nCross compiling on macOS is possible by setting the CMake ``CMAKE_OSX_ARCHITECTURES`` flag.\nWhen using the ``install.sh`` script, you can use the ``--macos-architecture`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=======\nWindows\n=======\n\nCross compiling on Windows is possible by using the \"Visual Studio\" generator (default) and by setting the CMake ``CMAKE_GENERATOR_PLATFORM`` flag.\nWhen using the ``install.sh`` script, you can use the ``--cmake-generator-platform`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=====\nLinux\n=====\n\nTo ensure that compiled libraries work on older linux versions, it has to be compiled with an older Glibc version.\nThe easiest way to accomplish this is by using Docker, there are images available especially for this purpose.\nWhen using the ``install.sh`` script, you can use the ``--docker-image`` flag which will make the command run in a container with the given image name.\n\nC++ docker image\n----------------\n\nWhen cross compiling the C++ library, make sure to use an old Glibc, this is included in the dockcross docker images.\nFor a list of supported architectures, take a look at:\n\nhttps://github.com/dockcross/dockcross#summary-cross-compilers\n\nNode.js docker image\n--------------------\n\nCross compilers for node.js are available here:\n\nhttps://github.com/prebuild/docker-images\n\nPython docker image\n-------------------\n\nCross compilers for python are here:\n\nhttps://github.com/pypa/manylinux#manylinux2014-centos-7-based\n\n*****\nLinks\n*****\n\n- repository https://github.com/aewallin/opencamlib\n- PPAs\n  - https://launchpad.net/~iacobs/+archive/ubuntu/cnc/\n  - https://launchpad.net/~neomilium/+archive/ubuntu/cam\n  - https://launchpad.net/~freecad-community/+archive/ubuntu/ppa\n  - (updated 2012) https://launchpad.net/~anders-e-e-wallin/+archive/ubuntu/cam\n- mailing-list http://groups.google.com/group/opencamlib\n- IRC-channel #cam on irc.freenode.net\n- coding standard (?) http://www.possibility.com/Cpp/CppCodingStandard.html\n\n*********************\nOrganization of Files\n*********************\n\n(generate this with 'tree -dL 2')::\n\n ├── docs                        documentation (not much here yet!)\n ├── examples                    c++, emscripten, nodejs and python examples\n ├── scripts                     CI scripts for installing and building ocl\n ├── src\n │   ├── algo                    algorithms under development\n │   ├── common                  common algorithms and data-structures\n │   ├── cutters                 cutter-classes\n │   ├── cxxlib                  c++ library cmake config\n │   ├── deb                     debian package cmake config\n │   ├── dropcutter              drop-cutter algorithms and operations\n │   ├── emscriptenlib           bindings for emscripten library\n │   ├── geo                     primitive geometry classes (point, triangle, stlsurf, etc.)\n │   ├── nodejslib               Node.js library bindings and cmake config\n │   ├── npmpackage              combined Node.js and emscripten wrappers, for publishing to npm\n │   ├── pythonlib               python library bindings and cmake config\n └── stl                         STL files for testing\n","readmeFilename":"README.rst","_id":"@opencamlib/opencamlib@2023.1.11-dev.301","_nodeVersion":"14.21.1","_npmVersion":"6.14.17","dist":{"integrity":"sha512-A9qInWrcgACR4EcmDKwo+eHsoEhIFLIPXLEjWKGOSTmH6LZx86Q0Q9Cj56wj3nNrxqPo/Smdmxo3M/HdnZA+ng==","shasum":"3eec32a7fa7e19daed1795522af07f8067d5f84c","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2023.1.11-dev.301.tgz","fileCount":70,"unpackedSize":39092739,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEG373CCSMWRnmoBTU67gSFnqM+VEd6Y4rXspK5Xw/q7AiEA/QRTObKlT6ZCdnTc2hi25f+AXTqN14s+wxU8mJ+blz4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvq5DACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrhkg/5AEhZHWSVujZeotlqCxbbPsvcXeYU4MttLjp57rB2m47tsC/V\r\nTMNHU5u5az1b0Ak6RLDAVcgSzgrr9ytycElkkJqrZoTaaRwoPZFifUvKI8J3\r\nvkXAOozs3jybnO21trZ8Y5Zow2b1EnfC/ITw+ll57G2z0pr2x7SOy3qVO6uN\r\nGOXdVQFHM7PPrWJpCIdRXH1bey+f1yk3/GRki4R9Ut3syYOiI253DXT/jXff\r\nsHnAb5Cg0m9WLthstZ73R0iXUvZdLS5/oT3IlqmDoquHiHueVg/tgvqB/8Na\r\nWvpc95lSJZSPFFbLHX5MC8oh6C5UHuICnJue3lyVn0qcQ5iwtNvOVVtcSdxI\r\n7rP1ZbQvdDGwPAFtfshoH45gpi8fTC9nkRlZbIqVgYhgZYYdEgAtvr/MbRsU\r\nDPIj5ESxPP1lDJ5+g8lYrPIcGmMstGJIl0AuL1ECm54jTQTuO0wXKLcr5LXZ\r\nKw6SDDhqSpLEd1DUP4JYQZJmGt2WJXWO+6HlwS3+laQcz1EcWtlnRcdW08Cj\r\nqXWKv55AWiD3I7zTGznfUJIrM2CjwaSWLqYnQTS4JUln695sDFSE2yx521G0\r\ny3lJWb0veTBVfNCmcd1jDz5pjO4WZT/fynqGIekKNMHwWfcVTeTBvMz/b/Kw\r\n/Wp6z1DrGhaP58YLSfwEMxM93KSNpzsHb6o=\r\n=Pess\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2023.1.11-dev.301_1673440835432_0.8360528493554948"},"_hasShrinkwrap":false},"2023.1.11":{"name":"@opencamlib/opencamlib","version":"2023.1.11","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"_id":"@opencamlib/opencamlib@2023.1.11","_nodeVersion":"14.21.1","_npmVersion":"6.14.17","dist":{"integrity":"sha512-tbAU9x3cPoC5+SJn57cGOobk+Rz+yM2PKpQuPudJE49RgRfIVpwN92ZBYePIz9w6ptiS0/bmzm+w5FyvNFX2IA==","shasum":"6896b664c3ec31bfc88563228b5777e372e9049f","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2023.1.11.tgz","fileCount":70,"unpackedSize":39092860,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFllBq6qVcYYVrT44J8YQCDEkJyT08BIV3rTIS64npkGAiEAnI7YmVIdmR09G4AYOiRrseCtaU76ybXjf55d//JOZJw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvrKZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrJ4Q/+JXEil7whwWV5uuO4cBq6Dea8va6tCBFzmzECnw8IpxWtNDed\r\nWI60PKuvtK4OgbWr4AtQ5nS27oSb2KAFawwZnm5/FPixiDF55oPjwZupkVtD\r\nJtpPQy/bMbLUqd2gDSAJC+IJUk/aaeyM2/TjohDrr0dTgJ0YRbJAy74dPuUj\r\nK79Rke/K4xIQpykpadBs2TdQeAyhl4nsSk99BnFnPBTkg5MBB2XVN4ImzSOe\r\noJENW59yaDn+vdXCd74Gd10TinplY5L+VJS4HuUxjzB6MajNQds7OPCGArHN\r\n8fs9Rc0F/vQkZRpGY6/u5zxM+/qwarQeHXR2qjEI7KYSLrVMtf6F4WkR8maH\r\nol6YSvLS7tpCco4swrzsBlOti10KrcTYFe2z9RLB+/dCC8XFaLC9fb77jQTk\r\nF9WRzzrMwt82po36O/qoXZVXbgA3VOyb8IXwuh41AH+OH/VkDRNVUJf/H6eU\r\nEpYjyVaIDzbmasWnbNsHT8IgW8ajTl+HTjLY1cucxa3u0Yd6VLmIKa5zH+Ov\r\nhX8O6JMbyoKiWg93N9XptETLRN6ASzob+8MEgb+G/XRldnJ3oxv4zm2Pstzv\r\nt5b1xiGTly6PdwZV0Hrdh+mfA4sqN1njHRDEbYR8H3C/YraGS1JQc7zwsLaA\r\nkfQnQRwtuX/tdiokydcOkPvEosZcOe+9QmE=\r\n=FSJ7\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2023.1.11_1673441945123_0.6957147746117192"},"_hasShrinkwrap":false},"2023.1.28-dev.303":{"name":"@opencamlib/opencamlib","version":"2023.1.28-dev.303","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"readme":"##########\nOpenCAMLib\n##########\n\n.. image:: https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg\n    :target: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html\n\n.. image:: https://github.com/aewallin/opencamlib/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/aewallin/opencamlib/actions/workflows/test.yml\n\n.. image:: https://readthedocs.org/projects/opencamlib/badge/?version=latest\n    :target: https://opencamlib.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n************\nIntroduction\n************\n\nOpenCAMLib (ocl) is a library for creating 3D toolpaths for CNC-machines such as mills and lathes.\nIt is written in C++ and has bindings for Python, Node.js and the browser.\nAt the moment it supports the following algorithms:\n\n===========\nDrop-cutter\n===========\n\nThe drop cutter algorithm drops a cutter, positioned at a predefined (x,y) location, until it touches the 3D model.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/drop-cutter.png?raw=true\n  :width: 200\n  :alt: Drop Cutter\n\n===========\nPush-cutter\n===========\n\nThe Push-cutter is used to create a Waterline toolpath that follows the shape of the model at a constant z-height in the xy-plane.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/push-cutter.png?raw=true\n  :width: 200\n  :alt: Push Cutter\n\n=======\nCutters\n=======\n\nThe algorithms listed above can be used with following cutters:\n\n- **CylCutter** (flat end mill / cylindrical)\n- **BallCutter** (ball end mill / spherical)\n- **BullCutter** (radius end mill / toroidal)\n- **ConeCutter** (tapered end mill / conical)\n- **CompositeCutter** (combinations of the above / compound)\n\nFrom August 2018 OpenCAMLib is released under LGPL license.\n\n**********************\nPre-compiled Libraries\n**********************\n\nOpenCAMLib provides pre-compiled C++, Node.js and Python libraries for the following platforms and architectures:\n\n+-------------+------------------+\n| **Windows** | ia32 / x64       |\n+-------------+------------------+\n| **macOS**   | x86_64 / arm64   |\n+-------------+------------------+\n| **Linux**   | x86_64 / aarch64 |\n+-------------+------------------+\n\n- The Python library is called ``opencamlib`` and is hosted on PyPi (pypi.org), precompiled libraries are available for Python v3.7 up to v3.11.\n- The Node.js + emscripten library is called ``@opencamlib/opencamlib`` and is hosted on npm (npmjs.org), precompiled libraries are available for Node-API v3 and up.\n- The C++ library is called ``libocl`` and is hosted on our Github Releases page.\n\n======\nPython\n======\n\nThe Python library (hosted on PyPi) can be installed like this:\n\n..  code-block:: shell\n\n    pip install opencamlib\n\nOn some platforms, pip is called pip3, you might have to run:\n\n..  code-block:: shell\n\n    pip3 install opencamlib\n\nNote that pip / pip3 is will install packages for to the system installation of Python, if you want to install a package in a custom Python installation that is not in your $PATH\n(for example, the Python which comes with Blender), you can install packages like so:\n\n..  code-block:: shell\n\n    /path/to/your/custom/python -m pip install opencamlib\n\nIf you don't know where Python is, but you have access to it's interpreter (FreeCAD and Blender both have a Python console), you can simply enter this command in there to install OpenCAMLib:\n\n..  code-block:: python\n\n    import sys; import subprocess; subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'opencamlib'])\n\n\n==========\nJavaScript\n==========\n\nThe JavaScript library (hosted on npm) works in Node.js and the browser (by leveraging emscripten / WASM) can be installed like this:\n\n..  code-block:: shell\n\n    npm install --save @opencamlib/opencamlib\n\nOr, using yarn:\n\n..  code-block:: shell\n\n    yarn add @opencamlib/opencamlib\n\nNote that it is not 100% feature complete and lacking some functionality still.\n\n===\nC++\n===\n\nPre-compiled C++ libraries are available on the Github Releases page (https://github.com/aewallin/opencamlib/releases).\nThis project also installs a OpenCAMLibConfig.cmake, which, if your project uses CMake, allows you to use ``find_package(OpenCAMLib REQUIRED)``.\n\nYou can see an example of that in use over here: ``examples/cpp/test/CMakeLists.txt``\n\n********************\nBuilding from Source\n********************\n\nHaving trouble with a pre-compiled library? Please report it to us.\nIf there are no pre-compiled libraries for your platform or architecture, or want to customize or package opencamlib, this is for you.\n\nOpenCAMLib uses functionality from a library called Boost.\nFor the Python library it uses an extra library called Boost.Python.\n\nOnly the Python bindings need Boost to be **compiled** (with Boost.Python).\nAll other libraries **DO NOT** need Boost to be compiled, in those cases, a headers only version will suffice.\nSo, if you are not compiling the Python libraries, simply download Boost, extract it into a folder, and tell CMake where to look for it.\n\nMake sure to download Boost from the boost.org downloads page, if you download it from github, you have to make sure to install the git submodules **and** build the headers.\n\nWe provide a ``install.sh`` script that helps with installation of dependencies and building OpenCAMLib libraries, you might want to take a look at it first.\nYou can run ``./install.sh --help`` to look at the available options, or inspect it's source code to find out more.\n\n============\nDependencies\n============\n\nTo compile OpenCAMLib, you need:\n\n- **C++ compiler** (It should at least support C++ 14)\n- **Git** (This is used for cloning the repository, and the emscripten SDK)\n- **CMake** (At least version 3.15)\n- **Boost** (When compiling the Python library, you have to **compile** Boost.Python for your Python version after installation)\n\nAt this time of writing, here are the packages to install:\n\nUbuntu Dependencies\n-------------------\n\n..  code-block:: shell\n\n    sudo apt install -y git cmake curl build-essential libboost-dev\n\nmacOS Dependencies\n------------------\n\n..  code-block:: shell\n\n    brew install git cmake curl boost python@3.11 boost-python3\n\nWindows Dependencies\n--------------------\n\nInstall\n\n- Visual Studio Build Tools (https://visualstudio.microsoft.com/visual-cpp-build-tools/)\n- Git (https://git-scm.com/download/win)\n- CMake (https://git-scm.com/download/win)\n\nBy downloading the installers from the internet, or by using your package manager.\n\n================\nBuilding for C++\n================\n\nThe C++ library is the easiest to build, it only depends on Boost's headers.\nMake sure you have a compiler, git, cmake and Boost installed (or simply download and extract it somewhere).\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    cmake .. -D CXX_LIB=\"ON\"\n    make . # try make -j4 for a faster build if you have a multi-core machine\n    make install .\n\nWhen boost is not in a standard location, you can add the ``-D BOOST_ROOT=/path/to/boost`` option to the cmake command.\n\n=======================\nBuilding for Emscripten\n=======================\n\nTo compile the emscripten library, first download, install and activate it using the following commands:\n\n..  code-block:: shell\n\n    git clone https://github.com/emscripten-core/emsdk.git\n    cd emsdk\n    ./emsdk install latest\n    ./emsdk activate latest\n\nNow you can compile OpenCAMLib like this (make sure to replace the ``path/to/`` sections):\n\n..  code-block:: shell\n\n    source path/to/emsdk/emsdk_env.sh\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    emcmake cmake \\\n      -D CMAKE_BUILD_TYPE=\"Release\" \\\n      -D BUILD_EMSCRIPTEN_LIB=\"ON\" \\\n      -D USE_OPENMP=\"OFF\" \\\n      -D CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/src/npmpackage/build\" \\\n      -D BOOST_ROOT=\"/path/to/boost\" \\\n      ..\n    emmake make # try emmake make -j4 for a faster build if you have a multi-core machine\n\nNote that ``USE_OPENMP`` has been turned off, OpenMP is not supported with Emscripten at the moment\n\n====================\nBuilding for Node.js\n====================\n\nTo compile the Node.js library, install the dependencies in ``src/nodejslib``:\n\n..  code-block:: shell\n\n    cd src/nodejslib\n    npm install\n\nNext, use cmake-js to compile the library:\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    ../src/nodejslib/node_modules/.bin/cmake-js \\\n      build \\\n      --directory \"..\" \\\n      --out \".\" \\\n      --parallel 4 \\\n      --CD BUILD_NODEJS_LIB=\"ON\" \\\n      --CD USE_OPENMP=\"ON\" \\\n      --CD CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/build/Release/$(node --print 'process.platform')-nodejs-$(node --print 'process.arch')\" \\\n      --CD BOOST_ROOT=\"/path/to/boost\" \\\n      --config \"Release\"\n\n===================\nBuilding for Python\n===================\n\nThe Python library can be compiled similarly to the C++ example above, however, this time Boost.Python has to be compiled first.\nMost systems have Boost.Python available as a download, but only for a specific Python version only (usually the latest Python version).\nThese might work if you are using Python from the same package provider, but, unfortunately, this is not a very reliable method, so compiling them yourself is usually the best option.\n\nFirst, download and extract Boost:\n\n..  code-block:: shell\n\n    curl \"https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz\" --output \"boost_1_80_0.tar.gz\" --location\n    tar -zxf boost_1_80_0.tar.gz -C /tmp/boost\n    cd /tmp/boost/boost_1_80_0\n\nNow we can compile it:\n\n..  code-block:: shell\n\n    echo \"using python ;\" > ./user-config.jam\n    ./bootstrap.sh\n    ./b2 \\\n      -a \\\n      threading=\"multi\" \\\n      -j4 \\\n      variant=\"release\" \\\n      link=\"static\" \\\n      address-model=\"64\" \\\n      architecture=\"x86\" \\\n      --layout=\"system\" \\\n      --with-python \\\n      --user-config=\"./user-config.jam\" \\\n      cxxflags=\"-fPIC\" \\\n      stage\n\nNote that you can customize the user-config.jam file to point it to your Python installation\n(see: https://www.boost.org/doc/libs/1_78_0/libs/python/doc/html/building/configuring_boost_build.html).\nYou should also specify the correct architecture and address-model.\nOn windows, make sure to use windows style paths, e.g. ``C:\\\\path\\\\to\\\\Python``\n\n*****\nUsage\n*****\n\nPlease take a look at the ``examples/`` folder on how to use OpenCAMLib.\nFor each language there is an example named ``test`` which calls all of the algorithms.\n\nThere is also some API documentation over here: https://opencamlib.readthedocs.io\n\n***************\nCommon Problems\n***************\n\nCompiling OpenCAMLib is unfortunately not very easy and there are many things that can go wrong.\nHere is a list of common problems and solutions.\n\n=================================================\nCould NOT find Boost (missing: Boost_INCLUDE_DIR)\n=================================================\n\nThis happens a lot, here are some of the reasons why this happens:\n\n**You don't have Boost installed.**\n\nIf you forgot to install boost, go ahead and download Boost from from their website: https://www.boost.org/users/download/ and extract it somewhere.\nNow, when compiling the C++ or node.js module, add the\n\n``-D BOOST_ROOT=/path/to/extracted/boost`` flag to the ``cmake ..`` command, or the.\n\n``--boost-prefix /path/to/extracted/boost`` flag to the ``./install.sh`` command\n\n**You installed Boost from Github.**\n\nThe boost that is hosted on Github does not have the headers yet! To compile those, you should run the following commands:\n\n..  code-block:: shell\n\n    ./bootstrap.sh\n    ./b2 headers\n\n**Your CMake version has a FindBoost module which is unaware of your Boost's version.**\n\nThe CMake module that looks for Boost, is usually not aware of the existence of the latest Boost versions.\nYou can help it by providing the version number of your Boost with the ``-D Boost_ADDITIONAL_VERSIONS=\"1.80.0\"`` flag.\nMake sure to change 1.80.0 with your version of Boost.\n\nIt can also be helpful to enable ``Boost_DEBUG`` in the CMake configuration.\n\n***************\nCross Compiling\n***************\n\nTo compile OpenCAMLib for other architectures, we recommend the following strategies.\nAlways make sure to compile Boost for the correct architecture as well!\n\n=====\nmacOS\n=====\n\nCross compiling on macOS is possible by setting the CMake ``CMAKE_OSX_ARCHITECTURES`` flag.\nWhen using the ``install.sh`` script, you can use the ``--macos-architecture`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=======\nWindows\n=======\n\nCross compiling on Windows is possible by using the \"Visual Studio\" generator (default) and by setting the CMake ``CMAKE_GENERATOR_PLATFORM`` flag.\nWhen using the ``install.sh`` script, you can use the ``--cmake-generator-platform`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=====\nLinux\n=====\n\nTo ensure that compiled libraries work on older linux versions, it has to be compiled with an older Glibc version.\nThe easiest way to accomplish this is by using Docker, there are images available especially for this purpose.\nWhen using the ``install.sh`` script, you can use the ``--docker-image`` flag which will make the command run in a container with the given image name.\n\nC++ docker image\n----------------\n\nWhen cross compiling the C++ library, make sure to use an old Glibc, this is included in the dockcross docker images.\nFor a list of supported architectures, take a look at:\n\nhttps://github.com/dockcross/dockcross#summary-cross-compilers\n\nNode.js docker image\n--------------------\n\nCross compilers for node.js are available here:\n\nhttps://github.com/prebuild/docker-images\n\nPython docker image\n-------------------\n\nCross compilers for python are here:\n\nhttps://github.com/pypa/manylinux#manylinux2014-centos-7-based\n\n*****\nLinks\n*****\n\n- repository https://github.com/aewallin/opencamlib\n- PPAs\n  - https://launchpad.net/~iacobs/+archive/ubuntu/cnc/\n  - https://launchpad.net/~neomilium/+archive/ubuntu/cam\n  - https://launchpad.net/~freecad-community/+archive/ubuntu/ppa\n  - (updated 2012) https://launchpad.net/~anders-e-e-wallin/+archive/ubuntu/cam\n- mailing-list http://groups.google.com/group/opencamlib\n- IRC-channel #cam on irc.freenode.net\n- coding standard (?) http://www.possibility.com/Cpp/CppCodingStandard.html\n\n*********************\nOrganization of Files\n*********************\n\n(generate this with 'tree -dL 2')::\n\n ├── docs                        documentation (not much here yet!)\n ├── examples                    c++, emscripten, nodejs and python examples\n ├── scripts                     CI scripts for installing and building ocl\n ├── src\n │   ├── algo                    algorithms under development\n │   ├── common                  common algorithms and data-structures\n │   ├── cutters                 cutter-classes\n │   ├── cxxlib                  c++ library cmake config\n │   ├── deb                     debian package cmake config\n │   ├── dropcutter              drop-cutter algorithms and operations\n │   ├── emscriptenlib           bindings for emscripten library\n │   ├── geo                     primitive geometry classes (point, triangle, stlsurf, etc.)\n │   ├── nodejslib               Node.js library bindings and cmake config\n │   ├── npmpackage              combined Node.js and emscripten wrappers, for publishing to npm\n │   ├── pythonlib               python library bindings and cmake config\n └── stl                         STL files for testing\n","readmeFilename":"README.rst","_id":"@opencamlib/opencamlib@2023.1.28-dev.303","_nodeVersion":"14.21.2","_npmVersion":"6.14.17","dist":{"integrity":"sha512-wEqzg8EF2znahLI3NYIQFTeelifJF0BPvCFO0Fq3xNjilSJdYNBtntIugEM3Ne4tTC/yq4ecbI1/zAnFSxvsEQ==","shasum":"356f5ebffa66d74185c90130dcc03d86e8b251df","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2023.1.28-dev.303.tgz","fileCount":70,"unpackedSize":39022640,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEiW54nRzEJlPAO/PkNHKALJglDGyB3Qin3f+EnsW+VsAiEAmwfxoUHSvdkINrIo+FsKBxIF6mHG2qehPxW53m09wwc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj1N6OACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq9XxAAiD9wya+Gz5Wf1H1xKbAC8YTaEp0+1kkHG4xQFDwuOYxdggR8\r\np3EgPob0tzX6GF0oPOFsD0ggRjuB9PwtjB/L0QQdfxJiin6x7tZlbvs0AM0c\r\nC2ijjIhyErV5fC44zpinTvo2jvOAIN+I1eUrI+vmWNDVRzdgO+S80fpEobNW\r\ncrW136TgWeWw54l5nu2FmWpnnZINcbk0GlaBGTvhxKQVBla/F1zH3zUqNjAp\r\nJ7t8BWN7FCi0Az9Y7fQzoKL+iK2jXxiLVxHdni0sqf4QbSLivWsFztLF9R7t\r\n9LC60ddx4wKe2rwDslG4ZyT59+iwPc4uqokLbCD9a5HZaG1g8pBaPA54Oy9N\r\nMbAJlEU7ZKWYPUJxbYHD3NZ+srR1aH9uDiKItkboGnC8xTd5G4zeFYZtKex6\r\nQBrhRGSPfreJeIWbLnVi5tnNJPBjEUrmSpGoMsLlnh9dsy6Xu8ucvqQUTIzn\r\ncTFyImj/EhyHzlELfEczDMlXAg9UmMdEoQZaFKzY5OiCtvl+jXP3ZShC/7D+\r\nKPyEoEdAPtez1kx+oGT6HrHcrD7T9xjHR8KM524ceE3usq83jo6o+Zn8tnJk\r\nOHf7oXx9VtVz31NAKUPSBHRRcrO/DotvSN/Td2r2HXO8oKbwMtK/gDikhIbX\r\nuLs/2YJoReotIQ+hsAGPqnoxP481upCELFc=\r\n=f597\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2023.1.28-dev.303_1674894990135_0.3373508412824362"},"_hasShrinkwrap":false},"2023.1.28-dev.304":{"name":"@opencamlib/opencamlib","version":"2023.1.28-dev.304","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"readme":"##########\nOpenCAMLib\n##########\n\n.. image:: https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg\n    :target: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html\n\n.. image:: https://github.com/aewallin/opencamlib/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/aewallin/opencamlib/actions/workflows/test.yml\n\n.. image:: https://readthedocs.org/projects/opencamlib/badge/?version=latest\n    :target: https://opencamlib.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n************\nIntroduction\n************\n\nOpenCAMLib (ocl) is a library for creating 3D toolpaths for CNC-machines such as mills and lathes.\nIt is written in C++ and has bindings for Python, Node.js and the browser.\nAt the moment it supports the following algorithms:\n\n===========\nDrop-cutter\n===========\n\nThe drop cutter algorithm drops a cutter, positioned at a predefined (x,y) location, until it touches the 3D model.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/drop-cutter.png?raw=true\n  :width: 200\n  :alt: Drop Cutter\n\n===========\nPush-cutter\n===========\n\nThe Push-cutter is used to create a Waterline toolpath that follows the shape of the model at a constant z-height in the xy-plane.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/push-cutter.png?raw=true\n  :width: 200\n  :alt: Push Cutter\n\n=======\nCutters\n=======\n\nThe algorithms listed above can be used with following cutters:\n\n- **CylCutter** (flat end mill / cylindrical)\n- **BallCutter** (ball end mill / spherical)\n- **BullCutter** (radius end mill / toroidal)\n- **ConeCutter** (tapered end mill / conical)\n- **CompositeCutter** (combinations of the above / compound)\n\nFrom August 2018 OpenCAMLib is released under LGPL license.\n\n**********************\nPre-compiled Libraries\n**********************\n\nOpenCAMLib provides pre-compiled C++, Node.js and Python libraries for the following platforms and architectures:\n\n+-------------+------------------+\n| **Windows** | ia32 / x64       |\n+-------------+------------------+\n| **macOS**   | x86_64 / arm64   |\n+-------------+------------------+\n| **Linux**   | x86_64 / aarch64 |\n+-------------+------------------+\n\n- The Python library is called ``opencamlib`` and is hosted on PyPi (pypi.org), precompiled libraries are available for Python v3.7 up to v3.11.\n- The Node.js + emscripten library is called ``@opencamlib/opencamlib`` and is hosted on npm (npmjs.org), precompiled libraries are available for Node-API v3 and up.\n- The C++ library is called ``libocl`` and is hosted on our Github Releases page.\n\n======\nPython\n======\n\nThe Python library (hosted on PyPi) can be installed like this:\n\n..  code-block:: shell\n\n    pip install opencamlib\n\nOn some platforms, pip is called pip3, you might have to run:\n\n..  code-block:: shell\n\n    pip3 install opencamlib\n\nNote that pip / pip3 is will install packages for to the system installation of Python, if you want to install a package in a custom Python installation that is not in your $PATH\n(for example, the Python which comes with Blender), you can install packages like so:\n\n..  code-block:: shell\n\n    /path/to/your/custom/python -m pip install opencamlib\n\nIf you don't know where Python is, but you have access to it's interpreter (FreeCAD and Blender both have a Python console), you can simply enter this command in there to install OpenCAMLib:\n\n..  code-block:: python\n\n    import sys; import subprocess; subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'opencamlib'])\n\n\n==========\nJavaScript\n==========\n\nThe JavaScript library (hosted on npm) works in Node.js and the browser (by leveraging emscripten / WASM) can be installed like this:\n\n..  code-block:: shell\n\n    npm install --save @opencamlib/opencamlib\n\nOr, using yarn:\n\n..  code-block:: shell\n\n    yarn add @opencamlib/opencamlib\n\nNote that it is not 100% feature complete and lacking some functionality still.\n\n===\nC++\n===\n\nPre-compiled C++ libraries are available on the Github Releases page (https://github.com/aewallin/opencamlib/releases).\nThis project also installs a OpenCAMLibConfig.cmake, which, if your project uses CMake, allows you to use ``find_package(OpenCAMLib REQUIRED)``.\n\nYou can see an example of that in use over here: ``examples/cpp/test/CMakeLists.txt``\n\n********************\nBuilding from Source\n********************\n\nHaving trouble with a pre-compiled library? Please report it to us.\nIf there are no pre-compiled libraries for your platform or architecture, or want to customize or package opencamlib, this is for you.\n\nOpenCAMLib uses functionality from a library called Boost.\nFor the Python library it uses an extra library called Boost.Python.\n\nOnly the Python bindings need Boost to be **compiled** (with Boost.Python).\nAll other libraries **DO NOT** need Boost to be compiled, in those cases, a headers only version will suffice.\nSo, if you are not compiling the Python libraries, simply download Boost, extract it into a folder, and tell CMake where to look for it.\n\nMake sure to download Boost from the boost.org downloads page, if you download it from github, you have to make sure to install the git submodules **and** build the headers.\n\nWe provide a ``install.sh`` script that helps with installation of dependencies and building OpenCAMLib libraries, you might want to take a look at it first.\nYou can run ``./install.sh --help`` to look at the available options, or inspect it's source code to find out more.\n\n============\nDependencies\n============\n\nTo compile OpenCAMLib, you need:\n\n- **C++ compiler** (It should at least support C++ 14)\n- **Git** (This is used for cloning the repository, and the emscripten SDK)\n- **CMake** (At least version 3.15)\n- **Boost** (When compiling the Python library, you have to **compile** Boost.Python for your Python version after installation)\n\nAt this time of writing, here are the packages to install:\n\nUbuntu Dependencies\n-------------------\n\n..  code-block:: shell\n\n    sudo apt install -y git cmake curl build-essential libboost-dev\n\nmacOS Dependencies\n------------------\n\n..  code-block:: shell\n\n    brew install git cmake curl boost python@3.11 boost-python3\n\nWindows Dependencies\n--------------------\n\nInstall\n\n- Visual Studio Build Tools (https://visualstudio.microsoft.com/visual-cpp-build-tools/)\n- Git (https://git-scm.com/download/win)\n- CMake (https://git-scm.com/download/win)\n\nBy downloading the installers from the internet, or by using your package manager.\n\n================\nBuilding for C++\n================\n\nThe C++ library is the easiest to build, it only depends on Boost's headers.\nMake sure you have a compiler, git, cmake and Boost installed (or simply download and extract it somewhere).\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    cmake .. -D CXX_LIB=\"ON\"\n    make . # try make -j4 for a faster build if you have a multi-core machine\n    make install .\n\nWhen boost is not in a standard location, you can add the ``-D BOOST_ROOT=/path/to/boost`` option to the cmake command.\n\n=======================\nBuilding for Emscripten\n=======================\n\nTo compile the emscripten library, first download, install and activate it using the following commands:\n\n..  code-block:: shell\n\n    git clone https://github.com/emscripten-core/emsdk.git\n    cd emsdk\n    ./emsdk install latest\n    ./emsdk activate latest\n\nNow you can compile OpenCAMLib like this (make sure to replace the ``path/to/`` sections):\n\n..  code-block:: shell\n\n    source path/to/emsdk/emsdk_env.sh\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    emcmake cmake \\\n      -D CMAKE_BUILD_TYPE=\"Release\" \\\n      -D BUILD_EMSCRIPTEN_LIB=\"ON\" \\\n      -D USE_OPENMP=\"OFF\" \\\n      -D CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/src/npmpackage/build\" \\\n      -D BOOST_ROOT=\"/path/to/boost\" \\\n      ..\n    emmake make # try emmake make -j4 for a faster build if you have a multi-core machine\n\nNote that ``USE_OPENMP`` has been turned off, OpenMP is not supported with Emscripten at the moment\n\n====================\nBuilding for Node.js\n====================\n\nTo compile the Node.js library, install the dependencies in ``src/nodejslib``:\n\n..  code-block:: shell\n\n    cd src/nodejslib\n    npm install\n\nNext, use cmake-js to compile the library:\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    ../src/nodejslib/node_modules/.bin/cmake-js \\\n      build \\\n      --directory \"..\" \\\n      --out \".\" \\\n      --parallel 4 \\\n      --CD BUILD_NODEJS_LIB=\"ON\" \\\n      --CD USE_OPENMP=\"ON\" \\\n      --CD CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/build/Release/$(node --print 'process.platform')-nodejs-$(node --print 'process.arch')\" \\\n      --CD BOOST_ROOT=\"/path/to/boost\" \\\n      --config \"Release\"\n\n===================\nBuilding for Python\n===================\n\nThe Python library can be compiled similarly to the C++ example above, however, this time Boost.Python has to be compiled first.\nMost systems have Boost.Python available as a download, but only for a specific Python version only (usually the latest Python version).\nThese might work if you are using Python from the same package provider, but, unfortunately, this is not a very reliable method, so compiling them yourself is usually the best option.\n\nFirst, download and extract Boost:\n\n..  code-block:: shell\n\n    curl \"https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz\" --output \"boost_1_80_0.tar.gz\" --location\n    tar -zxf boost_1_80_0.tar.gz -C /tmp/boost\n    cd /tmp/boost/boost_1_80_0\n\nNow we can compile it:\n\n..  code-block:: shell\n\n    echo \"using python ;\" > ./user-config.jam\n    ./bootstrap.sh\n    ./b2 \\\n      -a \\\n      threading=\"multi\" \\\n      -j4 \\\n      variant=\"release\" \\\n      link=\"static\" \\\n      address-model=\"64\" \\\n      architecture=\"x86\" \\\n      --layout=\"system\" \\\n      --with-python \\\n      --user-config=\"./user-config.jam\" \\\n      cxxflags=\"-fPIC\" \\\n      stage\n\nNote that you can customize the user-config.jam file to point it to your Python installation\n(see: https://www.boost.org/doc/libs/1_78_0/libs/python/doc/html/building/configuring_boost_build.html).\nYou should also specify the correct architecture and address-model.\nOn windows, make sure to use windows style paths, e.g. ``C:\\\\path\\\\to\\\\Python``\n\n*****\nUsage\n*****\n\nPlease take a look at the ``examples/`` folder on how to use OpenCAMLib.\nFor each language there is an example named ``test`` which calls all of the algorithms.\n\nThere is also some API documentation over here: https://opencamlib.readthedocs.io\n\n***************\nCommon Problems\n***************\n\nCompiling OpenCAMLib is unfortunately not very easy and there are many things that can go wrong.\nHere is a list of common problems and solutions.\n\n=================================================\nCould NOT find Boost (missing: Boost_INCLUDE_DIR)\n=================================================\n\nThis happens a lot, here are some of the reasons why this happens:\n\n**You don't have Boost installed.**\n\nIf you forgot to install boost, go ahead and download Boost from from their website: https://www.boost.org/users/download/ and extract it somewhere.\nNow, when compiling the C++ or node.js module, add the\n\n``-D BOOST_ROOT=/path/to/extracted/boost`` flag to the ``cmake ..`` command, or the.\n\n``--boost-prefix /path/to/extracted/boost`` flag to the ``./install.sh`` command\n\n**You installed Boost from Github.**\n\nThe boost that is hosted on Github does not have the headers yet! To compile those, you should run the following commands:\n\n..  code-block:: shell\n\n    ./bootstrap.sh\n    ./b2 headers\n\n**Your CMake version has a FindBoost module which is unaware of your Boost's version.**\n\nThe CMake module that looks for Boost, is usually not aware of the existence of the latest Boost versions.\nYou can help it by providing the version number of your Boost with the ``-D Boost_ADDITIONAL_VERSIONS=\"1.80.0\"`` flag.\nMake sure to change 1.80.0 with your version of Boost.\n\nIt can also be helpful to enable ``Boost_DEBUG`` in the CMake configuration.\n\n***************\nCross Compiling\n***************\n\nTo compile OpenCAMLib for other architectures, we recommend the following strategies.\nAlways make sure to compile Boost for the correct architecture as well!\n\n=====\nmacOS\n=====\n\nCross compiling on macOS is possible by setting the CMake ``CMAKE_OSX_ARCHITECTURES`` flag.\nWhen using the ``install.sh`` script, you can use the ``--macos-architecture`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=======\nWindows\n=======\n\nCross compiling on Windows is possible by using the \"Visual Studio\" generator (default) and by setting the CMake ``CMAKE_GENERATOR_PLATFORM`` flag.\nWhen using the ``install.sh`` script, you can use the ``--cmake-generator-platform`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=====\nLinux\n=====\n\nTo ensure that compiled libraries work on older linux versions, it has to be compiled with an older Glibc version.\nThe easiest way to accomplish this is by using Docker, there are images available especially for this purpose.\nWhen using the ``install.sh`` script, you can use the ``--docker-image`` flag which will make the command run in a container with the given image name.\n\nC++ docker image\n----------------\n\nWhen cross compiling the C++ library, make sure to use an old Glibc, this is included in the dockcross docker images.\nFor a list of supported architectures, take a look at:\n\nhttps://github.com/dockcross/dockcross#summary-cross-compilers\n\nNode.js docker image\n--------------------\n\nCross compilers for node.js are available here:\n\nhttps://github.com/prebuild/docker-images\n\nPython docker image\n-------------------\n\nCross compilers for python are here:\n\nhttps://github.com/pypa/manylinux#manylinux2014-centos-7-based\n\n*****\nLinks\n*****\n\n- repository https://github.com/aewallin/opencamlib\n- PPAs\n  - https://launchpad.net/~iacobs/+archive/ubuntu/cnc/\n  - https://launchpad.net/~neomilium/+archive/ubuntu/cam\n  - https://launchpad.net/~freecad-community/+archive/ubuntu/ppa\n  - (updated 2012) https://launchpad.net/~anders-e-e-wallin/+archive/ubuntu/cam\n- mailing-list http://groups.google.com/group/opencamlib\n- IRC-channel #cam on irc.freenode.net\n- coding standard (?) http://www.possibility.com/Cpp/CppCodingStandard.html\n\n*********************\nOrganization of Files\n*********************\n\n(generate this with 'tree -dL 2')::\n\n ├── docs                        documentation (not much here yet!)\n ├── examples                    c++, emscripten, nodejs and python examples\n ├── scripts                     CI scripts for installing and building ocl\n ├── src\n │   ├── algo                    algorithms under development\n │   ├── common                  common algorithms and data-structures\n │   ├── cutters                 cutter-classes\n │   ├── cxxlib                  c++ library cmake config\n │   ├── deb                     debian package cmake config\n │   ├── dropcutter              drop-cutter algorithms and operations\n │   ├── emscriptenlib           bindings for emscripten library\n │   ├── geo                     primitive geometry classes (point, triangle, stlsurf, etc.)\n │   ├── nodejslib               Node.js library bindings and cmake config\n │   ├── npmpackage              combined Node.js and emscripten wrappers, for publishing to npm\n │   ├── pythonlib               python library bindings and cmake config\n └── stl                         STL files for testing\n","readmeFilename":"README.rst","_id":"@opencamlib/opencamlib@2023.1.28-dev.304","_nodeVersion":"14.21.2","_npmVersion":"6.14.17","dist":{"integrity":"sha512-hVe1ZM1OOZtUDGeCMgUfZRmTEEsOPBlahv13tHZifUMO1Lp1xHjAKNEyBOS0u+Ckl+IT00GgN7uEFbOtZxNRMw==","shasum":"37489aea35dc3392fd4e03ec30e32e96630f29e3","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2023.1.28-dev.304.tgz","fileCount":70,"unpackedSize":39022640,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDU8jrrYyTDfp0oLQZ3svRgNOlyFiCDzKcfrh3VIMzJwAiAzXzdbdU0BcvNstJVO5KzeWmREF51WTc8i53SeV6cvew=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj1OEfACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrkRg//Q6PxlAkNPN7+IQsazrrC0QQpDG3axe+Qjq0w9PZBryx3OMgi\r\nsdgIfDsXQo+LSBebBtdYtUhFaaaGJ9syZ8YjGqZRfk/w/YY9Y8TbY52O+Fqi\r\nuhK3OIXnLRSbveOlm/NANCB3u4EwQvKuzQKjEKfmxWMEZOMyHKWynWZ69Mfj\r\ntuYL9tQfLUJhkuaOK1v1OTdh5haMLq+2XL6nyjAEU0VTj37FzB9bZBizyo/S\r\nO0cNAmIQsX/mnEkiuR1kWJK1Y7jRj3u/l04rWVCsndzHROW3XS5xNC4MZquS\r\nC/Q9P51VtU9Ab2x1XiImt7oLWV14jD11VX+TqFAIIXaWTMFmxEkAE9nimT/j\r\nx/YP6U7uKMnbJ2NBzC83wRKybpMH2n0tLzzGlcE5m1rCzZ3njJcW7nVb/Ej3\r\nxZEJ5CvfZo0/DGN2e3eeLL9I/ospK0KYYzSB0PxeaLAXPg8j/KymNin+kAbL\r\nWz87OYhDJoJopvZCiWDPDVVbSC8scG5jx3MleluJDkpOSyqrcgPs4axsMqSE\r\nNScMhMslJ3sMwTdki25Cpos5DSm1WnfIvtn+bu8GtHmxjYGgdmSTDzR6a7PR\r\nVz0sICQK9OpUsXoCqvnrpxJ6PNqNn4Qx9+iGjd23ZZfyA0qJDN7N149iyCxT\r\n5RSj16OhqKCpDBzHYuB+083udO1HuSRsoNE=\r\n=yxV3\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2023.1.28-dev.304_1674895646924_0.4824143875892617"},"_hasShrinkwrap":false},"2023.3.15-dev.305":{"name":"@opencamlib/opencamlib","version":"2023.3.15-dev.305","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"readme":"##########\nOpenCAMLib\n##########\n\n.. image:: https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg\n    :target: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html\n\n.. image:: https://github.com/aewallin/opencamlib/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/aewallin/opencamlib/actions/workflows/test.yml\n\n.. image:: https://readthedocs.org/projects/opencamlib/badge/?version=latest\n    :target: https://opencamlib.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n************\nIntroduction\n************\n\nOpenCAMLib (ocl) is a library for creating 3D toolpaths for CNC-machines such as mills and lathes.\nIt is written in C++ and has bindings for Python, Node.js and the browser.\nAt the moment it supports the following algorithms:\n\n===========\nDrop-cutter\n===========\n\nThe drop cutter algorithm drops a cutter, positioned at a predefined (x,y) location, until it touches the 3D model.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/drop-cutter.png?raw=true\n  :width: 200\n  :alt: Drop Cutter\n\n===========\nPush-cutter\n===========\n\nThe Push-cutter is used to create a Waterline toolpath that follows the shape of the model at a constant z-height in the xy-plane.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/push-cutter.png?raw=true\n  :width: 200\n  :alt: Push Cutter\n\n=======\nCutters\n=======\n\nThe algorithms listed above can be used with following cutters:\n\n- **CylCutter** (flat end mill / cylindrical)\n- **BallCutter** (ball end mill / spherical)\n- **BullCutter** (radius end mill / toroidal)\n- **ConeCutter** (tapered end mill / conical)\n- **CompositeCutter** (combinations of the above / compound)\n\nFrom August 2018 OpenCAMLib is released under LGPL license.\n\n**********************\nPre-compiled Libraries\n**********************\n\nOpenCAMLib provides pre-compiled C++, Node.js and Python libraries for the following platforms and architectures:\n\n+-------------+------------------+\n| **Windows** | ia32 / x64       |\n+-------------+------------------+\n| **macOS**   | x86_64 / arm64   |\n+-------------+------------------+\n| **Linux**   | x86_64 / aarch64 |\n+-------------+------------------+\n\n- The Python library is called ``opencamlib`` and is hosted on PyPi (pypi.org), precompiled libraries are available for Python v3.7 up to v3.11.\n- The Node.js + emscripten library is called ``@opencamlib/opencamlib`` and is hosted on npm (npmjs.org), precompiled libraries are available for Node-API v3 and up.\n- The C++ library is called ``libocl`` and is hosted on our Github Releases page.\n\n======\nPython\n======\n\nThe Python library (hosted on PyPi) can be installed like this:\n\n..  code-block:: shell\n\n    pip install opencamlib\n\nOn some platforms, pip is called pip3, you might have to run:\n\n..  code-block:: shell\n\n    pip3 install opencamlib\n\nNote that pip / pip3 is will install packages for to the system installation of Python, if you want to install a package in a custom Python installation that is not in your $PATH\n(for example, the Python which comes with Blender), you can install packages like so:\n\n..  code-block:: shell\n\n    /path/to/your/custom/python -m pip install opencamlib\n\nIf you don't know where Python is, but you have access to it's interpreter (FreeCAD and Blender both have a Python console), you can simply enter this command in there to install OpenCAMLib:\n\n..  code-block:: python\n\n    import sys; import subprocess; subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'opencamlib'])\n\n\n==========\nJavaScript\n==========\n\nThe JavaScript library (hosted on npm) works in Node.js and the browser (by leveraging emscripten / WASM) can be installed like this:\n\n..  code-block:: shell\n\n    npm install --save @opencamlib/opencamlib\n\nOr, using yarn:\n\n..  code-block:: shell\n\n    yarn add @opencamlib/opencamlib\n\nNote that it is not 100% feature complete and lacking some functionality still.\n\n===\nC++\n===\n\nPre-compiled C++ libraries are available on the Github Releases page (https://github.com/aewallin/opencamlib/releases).\nThis project also installs a OpenCAMLibConfig.cmake, which, if your project uses CMake, allows you to use ``find_package(OpenCAMLib REQUIRED)``.\n\nYou can see an example of that in use over here: ``examples/cpp/test/CMakeLists.txt``\n\n********************\nBuilding from Source\n********************\n\nHaving trouble with a pre-compiled library? Please report it to us.\nIf there are no pre-compiled libraries for your platform or architecture, or want to customize or package opencamlib, this is for you.\n\nOpenCAMLib uses functionality from a library called Boost.\nFor the Python library it uses an extra library called Boost.Python.\n\nOnly the Python bindings need Boost to be **compiled** (with Boost.Python).\nAll other libraries **DO NOT** need Boost to be compiled, in those cases, a headers only version will suffice.\nSo, if you are not compiling the Python libraries, simply download Boost, extract it into a folder, and tell CMake where to look for it.\n\nMake sure to download Boost from the boost.org downloads page, if you download it from github, you have to make sure to install the git submodules **and** build the headers.\n\nWe provide a ``install.sh`` script that helps with installation of dependencies and building OpenCAMLib libraries, you might want to take a look at it first.\nYou can run ``./install.sh --help`` to look at the available options, or inspect it's source code to find out more.\n\n============\nDependencies\n============\n\nTo compile OpenCAMLib, you need:\n\n- **C++ compiler** (It should at least support C++ 14)\n- **Git** (This is used for cloning the repository, and the emscripten SDK)\n- **CMake** (At least version 3.15)\n- **Boost** (When compiling the Python library, you have to **compile** Boost.Python for your Python version after installation)\n\nAt this time of writing, here are the packages to install:\n\nUbuntu Dependencies\n-------------------\n\n..  code-block:: shell\n\n    sudo apt install -y git cmake curl build-essential libboost-dev\n\nmacOS Dependencies\n------------------\n\n..  code-block:: shell\n\n    brew install git cmake curl boost python@3.11 boost-python3\n\nWindows Dependencies\n--------------------\n\nInstall\n\n- Visual Studio Build Tools (https://visualstudio.microsoft.com/visual-cpp-build-tools/)\n- Git (https://git-scm.com/download/win)\n- CMake (https://git-scm.com/download/win)\n\nBy downloading the installers from the internet, or by using your package manager.\n\n================\nBuilding for C++\n================\n\nThe C++ library is the easiest to build, it only depends on Boost's headers.\nMake sure you have a compiler, git, cmake and Boost installed (or simply download and extract it somewhere).\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    cmake .. -D CXX_LIB=\"ON\"\n    make . # try make -j4 for a faster build if you have a multi-core machine\n    make install .\n\nWhen boost is not in a standard location, you can add the ``-D BOOST_ROOT=/path/to/boost`` option to the cmake command.\n\n=======================\nBuilding for Emscripten\n=======================\n\nTo compile the emscripten library, first download, install and activate it using the following commands:\n\n..  code-block:: shell\n\n    git clone https://github.com/emscripten-core/emsdk.git\n    cd emsdk\n    ./emsdk install latest\n    ./emsdk activate latest\n\nNow you can compile OpenCAMLib like this (make sure to replace the ``path/to/`` sections):\n\n..  code-block:: shell\n\n    source path/to/emsdk/emsdk_env.sh\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    emcmake cmake \\\n      -D CMAKE_BUILD_TYPE=\"Release\" \\\n      -D BUILD_EMSCRIPTEN_LIB=\"ON\" \\\n      -D USE_OPENMP=\"OFF\" \\\n      -D CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/src/npmpackage/build\" \\\n      -D BOOST_ROOT=\"/path/to/boost\" \\\n      ..\n    emmake make # try emmake make -j4 for a faster build if you have a multi-core machine\n\nNote that ``USE_OPENMP`` has been turned off, OpenMP is not supported with Emscripten at the moment\n\n====================\nBuilding for Node.js\n====================\n\nTo compile the Node.js library, install the dependencies in ``src/nodejslib``:\n\n..  code-block:: shell\n\n    cd src/nodejslib\n    npm install\n\nNext, use cmake-js to compile the library:\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    ../src/nodejslib/node_modules/.bin/cmake-js \\\n      build \\\n      --directory \"..\" \\\n      --out \".\" \\\n      --parallel 4 \\\n      --CD BUILD_NODEJS_LIB=\"ON\" \\\n      --CD USE_OPENMP=\"ON\" \\\n      --CD CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/build/Release/$(node --print 'process.platform')-nodejs-$(node --print 'process.arch')\" \\\n      --CD BOOST_ROOT=\"/path/to/boost\" \\\n      --config \"Release\"\n\n===================\nBuilding for Python\n===================\n\nThe Python library can be compiled similarly to the C++ example above, however, this time Boost.Python has to be compiled first.\nMost systems have Boost.Python available as a download, but only for a specific Python version only (usually the latest Python version).\nThese might work if you are using Python from the same package provider, but, unfortunately, this is not a very reliable method, so compiling them yourself is usually the best option.\n\nFirst, download and extract Boost:\n\n..  code-block:: shell\n\n    curl \"https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz\" --output \"boost_1_80_0.tar.gz\" --location\n    tar -zxf boost_1_80_0.tar.gz -C /tmp/boost\n    cd /tmp/boost/boost_1_80_0\n\nNow we can compile it:\n\n..  code-block:: shell\n\n    echo \"using python ;\" > ./user-config.jam\n    ./bootstrap.sh\n    ./b2 \\\n      -a \\\n      threading=\"multi\" \\\n      -j4 \\\n      variant=\"release\" \\\n      link=\"static\" \\\n      address-model=\"64\" \\\n      architecture=\"x86\" \\\n      --layout=\"system\" \\\n      --with-python \\\n      --user-config=\"./user-config.jam\" \\\n      cxxflags=\"-fPIC\" \\\n      stage\n\nNote that you can customize the user-config.jam file to point it to your Python installation\n(see: https://www.boost.org/doc/libs/1_78_0/libs/python/doc/html/building/configuring_boost_build.html).\nYou should also specify the correct architecture and address-model.\nOn windows, make sure to use windows style paths, e.g. ``C:\\\\path\\\\to\\\\Python``\n\n*****\nUsage\n*****\n\nPlease take a look at the ``examples/`` folder on how to use OpenCAMLib.\nFor each language there is an example named ``test`` which calls all of the algorithms.\n\nThere is also some API documentation over here: https://opencamlib.readthedocs.io\n\n***************\nCommon Problems\n***************\n\nCompiling OpenCAMLib is unfortunately not very easy and there are many things that can go wrong.\nHere is a list of common problems and solutions.\n\n=================================================\nCould NOT find Boost (missing: Boost_INCLUDE_DIR)\n=================================================\n\nThis happens a lot, here are some of the reasons why this happens:\n\n**You don't have Boost installed.**\n\nIf you forgot to install boost, go ahead and download Boost from from their website: https://www.boost.org/users/download/ and extract it somewhere.\nNow, when compiling the C++ or node.js module, add the\n\n``-D BOOST_ROOT=/path/to/extracted/boost`` flag to the ``cmake ..`` command, or the.\n\n``--boost-prefix /path/to/extracted/boost`` flag to the ``./install.sh`` command\n\n**You installed Boost from Github.**\n\nThe boost that is hosted on Github does not have the headers yet! To compile those, you should run the following commands:\n\n..  code-block:: shell\n\n    ./bootstrap.sh\n    ./b2 headers\n\n**Your CMake version has a FindBoost module which is unaware of your Boost's version.**\n\nThe CMake module that looks for Boost, is usually not aware of the existence of the latest Boost versions.\nYou can help it by providing the version number of your Boost with the ``-D Boost_ADDITIONAL_VERSIONS=\"1.80.0\"`` flag.\nMake sure to change 1.80.0 with your version of Boost.\n\nIt can also be helpful to enable ``Boost_DEBUG`` in the CMake configuration.\n\n***************\nCross Compiling\n***************\n\nTo compile OpenCAMLib for other architectures, we recommend the following strategies.\nAlways make sure to compile Boost for the correct architecture as well!\n\n=====\nmacOS\n=====\n\nCross compiling on macOS is possible by setting the CMake ``CMAKE_OSX_ARCHITECTURES`` flag.\nWhen using the ``install.sh`` script, you can use the ``--macos-architecture`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=======\nWindows\n=======\n\nCross compiling on Windows is possible by using the \"Visual Studio\" generator (default) and by setting the CMake ``CMAKE_GENERATOR_PLATFORM`` flag.\nWhen using the ``install.sh`` script, you can use the ``--cmake-generator-platform`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=====\nLinux\n=====\n\nTo ensure that compiled libraries work on older linux versions, it has to be compiled with an older Glibc version.\nThe easiest way to accomplish this is by using Docker, there are images available especially for this purpose.\nWhen using the ``install.sh`` script, you can use the ``--docker-image`` flag which will make the command run in a container with the given image name.\n\nC++ docker image\n----------------\n\nWhen cross compiling the C++ library, make sure to use an old Glibc, this is included in the dockcross docker images.\nFor a list of supported architectures, take a look at:\n\nhttps://github.com/dockcross/dockcross#summary-cross-compilers\n\nNode.js docker image\n--------------------\n\nCross compilers for node.js are available here:\n\nhttps://github.com/prebuild/docker-images\n\nPython docker image\n-------------------\n\nCross compilers for python are here:\n\nhttps://github.com/pypa/manylinux#manylinux2014-centos-7-based\n\n*****\nLinks\n*****\n\n- repository https://github.com/aewallin/opencamlib\n- PPAs\n  - https://launchpad.net/~iacobs/+archive/ubuntu/cnc/\n  - https://launchpad.net/~neomilium/+archive/ubuntu/cam\n  - https://launchpad.net/~freecad-community/+archive/ubuntu/ppa\n  - (updated 2012) https://launchpad.net/~anders-e-e-wallin/+archive/ubuntu/cam\n- mailing-list http://groups.google.com/group/opencamlib\n- IRC-channel #cam on irc.freenode.net\n- coding standard (?) http://www.possibility.com/Cpp/CppCodingStandard.html\n\n*********************\nOrganization of Files\n*********************\n\n(generate this with 'tree -dL 2')::\n\n ├── docs                        documentation (not much here yet!)\n ├── examples                    c++, emscripten, nodejs and python examples\n ├── scripts                     CI scripts for installing and building ocl\n ├── src\n │   ├── algo                    algorithms under development\n │   ├── common                  common algorithms and data-structures\n │   ├── cutters                 cutter-classes\n │   ├── cxxlib                  c++ library cmake config\n │   ├── deb                     debian package cmake config\n │   ├── dropcutter              drop-cutter algorithms and operations\n │   ├── emscriptenlib           bindings for emscripten library\n │   ├── geo                     primitive geometry classes (point, triangle, stlsurf, etc.)\n │   ├── nodejslib               Node.js library bindings and cmake config\n │   ├── npmpackage              combined Node.js and emscripten wrappers, for publishing to npm\n │   ├── pythonlib               python library bindings and cmake config\n └── stl                         STL files for testing\n","readmeFilename":"README.rst","_id":"@opencamlib/opencamlib@2023.3.15-dev.305","_nodeVersion":"14.21.3","_npmVersion":"6.14.18","dist":{"integrity":"sha512-zgfBzsFj0OL0CUdNgjySr9ZO/eSxAxtc8RNl4TkEkQYSpWANC2/bvq8e5CHdJrillLS33QquE0REqB9w3DrYdw==","shasum":"5b3a904eb22b04af8d2332eeb5c779fe0a3951a2","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2023.3.15-dev.305.tgz","fileCount":70,"unpackedSize":39131950,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCi4Lblea8iol/JMEoAYhoJe7zhTCaZe4NG0BGVMozMsAIhAPnLPLHgEpiKRKo7+SiGKWSOgffx2jitOvNbL0/jWQGQ"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkEgmGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrMVBAAoGol30BGeZsIce2b7ixJcWtP6T+32d9X/rEYEDqukYqSRzOM\r\np+DHxJIDmkUT4Nm0lI/CR9gZ83LfcF5dzbALjzwA7Ks7cBPomNEnSznKetOf\r\nEUPSbWdLcgobOn6ZRxyJcmsQj4wLCB3J36fZqM2JoqqIPGapADBXkXhfwXYn\r\nHrkl8AXU7fZdR45znbUorSolQLmSR4byXr7rVSDMPJWka19HIX1yFVopfxJr\r\nichuSeQS2V+wCbj0AlQdlLGT/u4+zcT1oZrVjLxN2ISA3OmphFD5driDFADh\r\nsksx9MoCfD7rV9kTidYPZuWCUmP3+9EA/HEwAf+SU9BXKHkG6YEfln+QYIoR\r\ncnZN4SfZIWbk6FYUIepZeeOmOEAagjmDJJdvJ5fEPdpy7u5jk+ee9Hx58icy\r\nru+hD0cwKQksQ8ejwCODY3C/o/5GATcvJpVflLM47ZTgsz9EFYyCsNdsHNTZ\r\nuS1OknQ08Lzts3bynYmqGei7eugf3ncZA0xA3AHI8CS4bIs7nO2iIxUGGl44\r\nFNCFY2rF3E7dGgDvkteykiC8LzrDOnkG7WMfOwsIzSVHAMXz+RJeCsHZw2Ie\r\nzsHCM/gpipc82AdDmc9p5ARyF9Uq3OIz5yF85bMX1XU+i1Tg6ti0dhzSOFY2\r\nsSYZWRS4gnvfLziKgEYueu7wm3bEPpWTuGc=\r\n=3VB4\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2023.3.15-dev.305_1678903686168_0.005433053873203475"},"_hasShrinkwrap":false},"2023.9.11-dev.316":{"name":"@opencamlib/opencamlib","version":"2023.9.11-dev.316","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"readme":"##########\nOpenCAMLib\n##########\n\n.. image:: https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg\n    :target: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html\n\n.. image:: https://github.com/aewallin/opencamlib/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/aewallin/opencamlib/actions/workflows/test.yml\n\n.. image:: https://readthedocs.org/projects/opencamlib/badge/?version=latest\n    :target: https://opencamlib.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n************\nIntroduction\n************\n\nOpenCAMLib (ocl) is a library for creating 3D toolpaths for CNC-machines such as mills and lathes.\nIt is written in C++ and has bindings for Python, Node.js and the browser.\nAt the moment it supports the following algorithms:\n\n===========\nDrop-cutter\n===========\n\nThe drop cutter algorithm drops a cutter, positioned at a predefined (x,y) location, until it touches the 3D model.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/drop-cutter.png?raw=true\n  :width: 200\n  :alt: Drop Cutter\n\n===========\nPush-cutter\n===========\n\nThe Push-cutter is used to create a Waterline toolpath that follows the shape of the model at a constant z-height in the xy-plane.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/push-cutter.png?raw=true\n  :width: 200\n  :alt: Push Cutter\n\n=======\nCutters\n=======\n\nThe algorithms listed above can be used with following cutters:\n\n- **CylCutter** (flat end mill / cylindrical)\n- **BallCutter** (ball end mill / spherical)\n- **BullCutter** (radius end mill / toroidal)\n- **ConeCutter** (tapered end mill / conical)\n- **CompositeCutter** (combinations of the above / compound)\n\nFrom August 2018 OpenCAMLib is released under LGPL license.\n\n**********************\nPre-compiled Libraries\n**********************\n\nOpenCAMLib provides pre-compiled C++, Node.js and Python libraries for the following platforms and architectures:\n\n+-------------+------------------+\n| **Windows** | ia32 / x64       |\n+-------------+------------------+\n| **macOS**   | x86_64 / arm64   |\n+-------------+------------------+\n| **Linux**   | x86_64 / aarch64 |\n+-------------+------------------+\n\n- The Python library is called ``opencamlib`` and is hosted on PyPi (pypi.org), precompiled libraries are available for Python v3.7 up to v3.11.\n- The Node.js + emscripten library is called ``@opencamlib/opencamlib`` and is hosted on npm (npmjs.org), precompiled libraries are available for Node-API v3 and up.\n- The C++ library is called ``libocl`` and is hosted on our Github Releases page.\n\n======\nPython\n======\n\nThe Python library (hosted on PyPi) can be installed like this:\n\n..  code-block:: shell\n\n    pip install opencamlib\n\nOn some platforms, pip is called pip3, you might have to run:\n\n..  code-block:: shell\n\n    pip3 install opencamlib\n\nNote that pip / pip3 is will install packages for to the system installation of Python, if you want to install a package in a custom Python installation that is not in your $PATH\n(for example, the Python which comes with Blender), you can install packages like so:\n\n..  code-block:: shell\n\n    /path/to/your/custom/python -m pip install opencamlib\n\nIf you don't know where Python is, but you have access to it's interpreter (FreeCAD and Blender both have a Python console), you can simply enter this command in there to install OpenCAMLib:\n\n..  code-block:: python\n\n    import sys; import subprocess; subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'opencamlib'])\n\n\n==========\nJavaScript\n==========\n\nThe JavaScript library (hosted on npm) works in Node.js and the browser (by leveraging emscripten / WASM) can be installed like this:\n\n..  code-block:: shell\n\n    npm install --save @opencamlib/opencamlib\n\nOr, using yarn:\n\n..  code-block:: shell\n\n    yarn add @opencamlib/opencamlib\n\nNote that it is not 100% feature complete and lacking some functionality still.\n\n===\nC++\n===\n\nPre-compiled C++ libraries are available on the Github Releases page (https://github.com/aewallin/opencamlib/releases).\nThis project also installs a OpenCAMLibConfig.cmake, which, if your project uses CMake, allows you to use ``find_package(OpenCAMLib REQUIRED)``.\n\nYou can see an example of that in use over here: ``examples/cpp/test/CMakeLists.txt``\n\n********************\nBuilding from Source\n********************\n\nHaving trouble with a pre-compiled library? Please report it to us.\nIf there are no pre-compiled libraries for your platform or architecture, or want to customize or package opencamlib, this is for you.\n\nOpenCAMLib uses functionality from a library called Boost.\nFor the Python library it uses an extra library called Boost.Python.\n\nOnly the Python bindings need Boost to be **compiled** (with Boost.Python).\nAll other libraries **DO NOT** need Boost to be compiled, in those cases, a headers only version will suffice.\nSo, if you are not compiling the Python libraries, simply download Boost, extract it into a folder, and tell CMake where to look for it.\n\nMake sure to download Boost from the boost.org downloads page, if you download it from github, you have to make sure to install the git submodules **and** build the headers.\n\nWe provide a ``install.sh`` script that helps with installation of dependencies and building OpenCAMLib libraries, you might want to take a look at it first.\nYou can run ``./install.sh --help`` to look at the available options, or inspect it's source code to find out more.\n\n============\nDependencies\n============\n\nTo compile OpenCAMLib, you need:\n\n- **C++ compiler** (It should at least support C++ 14)\n- **Git** (This is used for cloning the repository, and the emscripten SDK)\n- **CMake** (At least version 3.15)\n- **Boost** (When compiling the Python library, you have to **compile** Boost.Python for your Python version after installation)\n\nAt this time of writing, here are the packages to install:\n\nUbuntu Dependencies\n-------------------\n\n..  code-block:: shell\n\n    sudo apt install -y git cmake curl build-essential libboost-dev\n\nmacOS Dependencies\n------------------\n\n..  code-block:: shell\n\n    brew install git cmake curl boost python@3.11 boost-python3\n\nWindows Dependencies\n--------------------\n\nInstall\n\n- Visual Studio Build Tools (https://visualstudio.microsoft.com/visual-cpp-build-tools/)\n- Git (https://git-scm.com/download/win)\n- CMake (https://git-scm.com/download/win)\n- Boost (https://www.boost.org/users/download/)\n\nBy downloading the installers from the internet, or by using your package manager.\n\n================\nBuilding for C++\n================\n\nThe C++ library is the easiest to build, it only depends on Boost's headers.\nMake sure you have a compiler, git, cmake and Boost installed (or simply download and extract it somewhere).\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    cmake .. -D CXX_LIB=\"ON\"\n    make . # try make -j4 for a faster build if you have a multi-core machine\n    make install .\n\nWhen boost is not in a standard location, you can add the ``-D BOOST_ROOT=/path/to/boost`` option to the cmake command.\n\n=======================\nBuilding for Emscripten\n=======================\n\nTo compile the emscripten library, first download, install and activate it using the following commands:\n\n..  code-block:: shell\n\n    git clone https://github.com/emscripten-core/emsdk.git\n    cd emsdk\n    ./emsdk install latest\n    ./emsdk activate latest\n\nNow you can compile OpenCAMLib like this (make sure to replace the ``path/to/`` sections):\n\n..  code-block:: shell\n\n    source path/to/emsdk/emsdk_env.sh\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    emcmake cmake \\\n      -D CMAKE_BUILD_TYPE=\"RelWithDebInfo\" \\\n      -D BUILD_EMSCRIPTEN_LIB=\"ON\" \\\n      -D USE_OPENMP=\"OFF\" \\\n      -D CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/src/npmpackage/build\" \\\n      -D BOOST_ROOT=\"/path/to/boost\" \\\n      ..\n    emmake make # try emmake make -j4 for a faster build if you have a multi-core machine\n\nNote that ``USE_OPENMP`` has been turned off, OpenMP is not supported with Emscripten at the moment\n\n====================\nBuilding for Node.js\n====================\n\nTo compile the Node.js library, install the dependencies in ``src/nodejslib``:\n\n..  code-block:: shell\n\n    cd src/nodejslib\n    npm install\n\nNext, use cmake-js to compile the library:\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    ../src/nodejslib/node_modules/.bin/cmake-js \\\n      build \\\n      --directory \"..\" \\\n      --out \".\" \\\n      --parallel 4 \\\n      --CDBUILD_NODEJS_LIB=\"ON\" \\\n      --CDUSE_OPENMP=\"ON\" \\\n      --CDCMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/build/Release/$(node --print 'process.platform')-nodejs-$(node --print 'process.arch')\" \\\n      --CDBOOST_ROOT=\"/path/to/boost\" \\\n      --config \"Release\"\n\n===================\nBuilding for Python\n===================\n\nThe Python library can be compiled similarly to the C++ example above, however, this time Boost.Python has to be compiled first.\nMost systems have Boost.Python available as a download, but only for a specific Python version only (usually the latest Python version).\nThese might work if you are using Python from the same package provider, but, unfortunately, this is not a very reliable method, so compiling them yourself is usually the best option.\n\nFirst, download and extract Boost:\n\n..  code-block:: shell\n\n    curl \"https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz\" --output \"boost_1_80_0.tar.gz\" --location\n    tar -zxf boost_1_80_0.tar.gz -C /tmp/boost\n    cd /tmp/boost/boost_1_80_0\n\nNow we can compile it:\n\n..  code-block:: shell\n\n    echo \"using python ;\" > ./user-config.jam\n    ./bootstrap.sh\n    ./b2 \\\n      -a \\\n      threading=\"multi\" \\\n      -j4 \\\n      variant=\"release\" \\\n      link=\"static\" \\\n      address-model=\"64\" \\\n      architecture=\"x86\" \\\n      --layout=\"system\" \\\n      --with-python \\\n      --user-config=\"./user-config.jam\" \\\n      cxxflags=\"-fPIC\" \\\n      stage\n\nNote that you can customize the user-config.jam file to point it to your Python installation\n(see: https://www.boost.org/doc/libs/1_78_0/libs/python/doc/html/building/configuring_boost_build.html).\nYou should also specify the correct architecture and address-model.\nOn windows, make sure to use windows style paths, e.g. ``C:\\\\path\\\\to\\\\Python``\n\n*****\nUsage\n*****\n\nPlease take a look at the ``examples/`` folder on how to use OpenCAMLib.\nFor each language there is an example named ``test`` which calls all of the algorithms.\n\nThere is also some API documentation over here: https://opencamlib.readthedocs.io\n\n***************\nCommon Problems\n***************\n\nCompiling OpenCAMLib is unfortunately not very easy and there are many things that can go wrong.\nHere is a list of common problems and solutions.\n\n=================================================\nCould NOT find Boost (missing: Boost_INCLUDE_DIR)\n=================================================\n\nThis happens a lot, here are some of the reasons why this happens:\n\n**You don't have Boost installed.**\n\nIf you forgot to install boost, go ahead and download Boost from from their website: https://www.boost.org/users/download/ and extract it somewhere.\nNow, when compiling the C++ or node.js module, add the\n\n``-D BOOST_ROOT=/path/to/extracted/boost`` flag to the ``cmake ..`` command, or the.\n\n``--boost-prefix /path/to/extracted/boost`` flag to the ``./install.sh`` command\n\n**You installed Boost from Github.**\n\nThe boost that is hosted on Github does not have the headers yet! To compile those, you should run the following commands:\n\n..  code-block:: shell\n\n    ./bootstrap.sh\n    ./b2 headers\n\n**Your CMake version has a FindBoost module which is unaware of your Boost's version.**\n\nThe CMake module that looks for Boost, is usually not aware of the existence of the latest Boost versions.\nYou can help it by providing the version number of your Boost with the ``-D Boost_ADDITIONAL_VERSIONS=\"1.80.0\"`` flag.\nMake sure to change 1.80.0 with your version of Boost.\n\nIt can also be helpful to enable ``Boost_DEBUG`` in the CMake configuration.\n\n***************\nCross Compiling\n***************\n\nTo compile OpenCAMLib for other architectures, we recommend the following strategies.\nAlways make sure to compile Boost for the correct architecture as well!\n\n=====\nmacOS\n=====\n\nCross compiling on macOS is possible by setting the CMake ``CMAKE_OSX_ARCHITECTURES`` flag.\nWhen using the ``install.sh`` script, you can use the ``--macos-architecture`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=======\nWindows\n=======\n\nCross compiling on Windows is possible by using the \"Visual Studio\" generator (default) and by setting the CMake ``CMAKE_GENERATOR_PLATFORM`` flag.\nWhen using the ``install.sh`` script, you can use the ``--cmake-generator-platform`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=====\nLinux\n=====\n\nTo ensure that compiled libraries work on older linux versions, it has to be compiled with an older Glibc version.\nThe easiest way to accomplish this is by using Docker, there are images available especially for this purpose.\nWhen using the ``install.sh`` script, you can use the ``--docker-image`` flag which will make the command run in a container with the given image name.\n\nC++ docker image\n----------------\n\nWhen cross compiling the C++ library, make sure to use an old Glibc, this is included in the dockcross docker images.\nFor a list of supported architectures, take a look at:\n\nhttps://github.com/dockcross/dockcross#summary-cross-compilers\n\nNode.js docker image\n--------------------\n\nCross compilers for node.js are available here:\n\nhttps://github.com/prebuild/docker-images\n\nPython docker image\n-------------------\n\nCross compilers for python are here:\n\nhttps://github.com/pypa/manylinux#manylinux2014-centos-7-based\n\n*****\nLinks\n*****\n\n- repository https://github.com/aewallin/opencamlib\n- PPAs\n  - https://launchpad.net/~iacobs/+archive/ubuntu/cnc/\n  - https://launchpad.net/~neomilium/+archive/ubuntu/cam\n  - https://launchpad.net/~freecad-community/+archive/ubuntu/ppa\n  - (updated 2012) https://launchpad.net/~anders-e-e-wallin/+archive/ubuntu/cam\n- mailing-list http://groups.google.com/group/opencamlib\n- IRC-channel #cam on irc.freenode.net\n- coding standard (?) http://www.possibility.com/Cpp/CppCodingStandard.html\n\n*********************\nOrganization of Files\n*********************\n\n(generate this with 'tree -dL 2')::\n\n ├── docs                        documentation (not much here yet!)\n ├── examples                    c++, emscripten, nodejs and python examples\n ├── scripts                     CI scripts for installing and building ocl\n ├── src\n │   ├── algo                    algorithms under development\n │   ├── common                  common algorithms and data-structures\n │   ├── cutters                 cutter-classes\n │   ├── cxxlib                  c++ library cmake config\n │   ├── deb                     debian package cmake config\n │   ├── dropcutter              drop-cutter algorithms and operations\n │   ├── emscriptenlib           bindings for emscripten library\n │   ├── geo                     primitive geometry classes (point, triangle, stlsurf, etc.)\n │   ├── nodejslib               Node.js library bindings and cmake config\n │   ├── npmpackage              combined Node.js and emscripten wrappers, for publishing to npm\n │   ├── pythonlib               python library bindings and cmake config\n └── stl                         STL files for testing\n","readmeFilename":"README.rst","_id":"@opencamlib/opencamlib@2023.9.11-dev.316","_nodeVersion":"14.21.3","_npmVersion":"6.14.18","dist":{"integrity":"sha512-MePpk+XgqCCA1dAzlNGlyq/LuMnY/sCgFKh11CQvZz3JNrXkA3wCMXrdwbEaPJkVPP9ti726X8zbFxu+Q9zbfA==","shasum":"5d42feaf9d839f35496295050ceaeaeb398dd252","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2023.9.11-dev.316.tgz","fileCount":88,"unpackedSize":33284705,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCz1uGCIYI5fPNd37YEVwn5AX63gaI6Si7JxQeSxS55+QIgKFT/rhieLhjvv4evUHjD9Qj/niuqtSzkSHbjBbIC3Vw="}]},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2023.9.11-dev.316_1694425413712_0.31753969271219606"},"_hasShrinkwrap":false},"2023.9.11-dev.317":{"name":"@opencamlib/opencamlib","version":"2023.9.11-dev.317","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"readme":"##########\nOpenCAMLib\n##########\n\n.. image:: https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg\n    :target: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html\n\n.. image:: https://github.com/aewallin/opencamlib/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/aewallin/opencamlib/actions/workflows/test.yml\n\n.. image:: https://readthedocs.org/projects/opencamlib/badge/?version=latest\n    :target: https://opencamlib.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n************\nIntroduction\n************\n\nOpenCAMLib (ocl) is a library for creating 3D toolpaths for CNC-machines such as mills and lathes.\nIt is written in C++ and has bindings for Python, Node.js and the browser.\nAt the moment it supports the following algorithms:\n\n===========\nDrop-cutter\n===========\n\nThe drop cutter algorithm drops a cutter, positioned at a predefined (x,y) location, until it touches the 3D model.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/drop-cutter.png?raw=true\n  :width: 200\n  :alt: Drop Cutter\n\n===========\nPush-cutter\n===========\n\nThe Push-cutter is used to create a Waterline toolpath that follows the shape of the model at a constant z-height in the xy-plane.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/push-cutter.png?raw=true\n  :width: 200\n  :alt: Push Cutter\n\n=======\nCutters\n=======\n\nThe algorithms listed above can be used with following cutters:\n\n- **CylCutter** (flat end mill / cylindrical)\n- **BallCutter** (ball end mill / spherical)\n- **BullCutter** (radius end mill / toroidal)\n- **ConeCutter** (tapered end mill / conical)\n- **CompositeCutter** (combinations of the above / compound)\n\nFrom August 2018 OpenCAMLib is released under LGPL license.\n\n**********************\nPre-compiled Libraries\n**********************\n\nOpenCAMLib provides pre-compiled C++, Node.js and Python libraries for the following platforms and architectures:\n\n+-------------+------------------+\n| **Windows** | ia32 / x64       |\n+-------------+------------------+\n| **macOS**   | x86_64 / arm64   |\n+-------------+------------------+\n| **Linux**   | x86_64 / aarch64 |\n+-------------+------------------+\n\n- The Python library is called ``opencamlib`` and is hosted on PyPi (pypi.org), precompiled libraries are available for Python v3.7 up to v3.11.\n- The Node.js + emscripten library is called ``@opencamlib/opencamlib`` and is hosted on npm (npmjs.org), precompiled libraries are available for Node-API v3 and up.\n- The C++ library is called ``libocl`` and is hosted on our Github Releases page.\n\n======\nPython\n======\n\nThe Python library (hosted on PyPi) can be installed like this:\n\n..  code-block:: shell\n\n    pip install opencamlib\n\nOn some platforms, pip is called pip3, you might have to run:\n\n..  code-block:: shell\n\n    pip3 install opencamlib\n\nNote that pip / pip3 is will install packages for to the system installation of Python, if you want to install a package in a custom Python installation that is not in your $PATH\n(for example, the Python which comes with Blender), you can install packages like so:\n\n..  code-block:: shell\n\n    /path/to/your/custom/python -m pip install opencamlib\n\nIf you don't know where Python is, but you have access to it's interpreter (FreeCAD and Blender both have a Python console), you can simply enter this command in there to install OpenCAMLib:\n\n..  code-block:: python\n\n    import sys; import subprocess; subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'opencamlib'])\n\n\n==========\nJavaScript\n==========\n\nThe JavaScript library (hosted on npm) works in Node.js and the browser (by leveraging emscripten / WASM) can be installed like this:\n\n..  code-block:: shell\n\n    npm install --save @opencamlib/opencamlib\n\nOr, using yarn:\n\n..  code-block:: shell\n\n    yarn add @opencamlib/opencamlib\n\nNote that it is not 100% feature complete and lacking some functionality still.\n\n===\nC++\n===\n\nPre-compiled C++ libraries are available on the Github Releases page (https://github.com/aewallin/opencamlib/releases).\nThis project also installs a OpenCAMLibConfig.cmake, which, if your project uses CMake, allows you to use ``find_package(OpenCAMLib REQUIRED)``.\n\nYou can see an example of that in use over here: ``examples/cpp/test/CMakeLists.txt``\n\n********************\nBuilding from Source\n********************\n\nHaving trouble with a pre-compiled library? Please report it to us.\nIf there are no pre-compiled libraries for your platform or architecture, or want to customize or package opencamlib, this is for you.\n\nOpenCAMLib uses functionality from a library called Boost.\nFor the Python library it uses an extra library called Boost.Python.\n\nOnly the Python bindings need Boost to be **compiled** (with Boost.Python).\nAll other libraries **DO NOT** need Boost to be compiled, in those cases, a headers only version will suffice.\nSo, if you are not compiling the Python libraries, simply download Boost, extract it into a folder, and tell CMake where to look for it.\n\nMake sure to download Boost from the boost.org downloads page, if you download it from github, you have to make sure to install the git submodules **and** build the headers.\n\nWe provide a ``install.sh`` script that helps with installation of dependencies and building OpenCAMLib libraries, you might want to take a look at it first.\nYou can run ``./install.sh --help`` to look at the available options, or inspect it's source code to find out more.\n\n============\nDependencies\n============\n\nTo compile OpenCAMLib, you need:\n\n- **C++ compiler** (It should at least support C++ 14)\n- **Git** (This is used for cloning the repository, and the emscripten SDK)\n- **CMake** (At least version 3.15)\n- **Boost** (When compiling the Python library, you have to **compile** Boost.Python for your Python version after installation)\n\nAt this time of writing, here are the packages to install:\n\nUbuntu Dependencies\n-------------------\n\n..  code-block:: shell\n\n    sudo apt install -y git cmake curl build-essential libboost-dev\n\nmacOS Dependencies\n------------------\n\n..  code-block:: shell\n\n    brew install git cmake curl boost python@3.11 boost-python3\n\nWindows Dependencies\n--------------------\n\nInstall\n\n- Visual Studio Build Tools (https://visualstudio.microsoft.com/visual-cpp-build-tools/)\n- Git (https://git-scm.com/download/win)\n- CMake (https://git-scm.com/download/win)\n- Boost (https://www.boost.org/users/download/)\n\nBy downloading the installers from the internet, or by using your package manager.\n\n================\nBuilding for C++\n================\n\nThe C++ library is the easiest to build, it only depends on Boost's headers.\nMake sure you have a compiler, git, cmake and Boost installed (or simply download and extract it somewhere).\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    cmake .. -D CXX_LIB=\"ON\"\n    make . # try make -j4 for a faster build if you have a multi-core machine\n    make install .\n\nWhen boost is not in a standard location, you can add the ``-D BOOST_ROOT=/path/to/boost`` option to the cmake command.\n\n=======================\nBuilding for Emscripten\n=======================\n\nTo compile the emscripten library, first download, install and activate it using the following commands:\n\n..  code-block:: shell\n\n    git clone https://github.com/emscripten-core/emsdk.git\n    cd emsdk\n    ./emsdk install latest\n    ./emsdk activate latest\n\nNow you can compile OpenCAMLib like this (make sure to replace the ``path/to/`` sections):\n\n..  code-block:: shell\n\n    source path/to/emsdk/emsdk_env.sh\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    emcmake cmake \\\n      -D CMAKE_BUILD_TYPE=\"RelWithDebInfo\" \\\n      -D BUILD_EMSCRIPTEN_LIB=\"ON\" \\\n      -D USE_OPENMP=\"OFF\" \\\n      -D CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/src/npmpackage/build\" \\\n      -D BOOST_ROOT=\"/path/to/boost\" \\\n      ..\n    emmake make # try emmake make -j4 for a faster build if you have a multi-core machine\n\nNote that ``USE_OPENMP`` has been turned off, OpenMP is not supported with Emscripten at the moment\n\n====================\nBuilding for Node.js\n====================\n\nTo compile the Node.js library, install the dependencies in ``src/nodejslib``:\n\n..  code-block:: shell\n\n    cd src/nodejslib\n    npm install\n\nNext, use cmake-js to compile the library:\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    ../src/nodejslib/node_modules/.bin/cmake-js \\\n      build \\\n      --directory \"..\" \\\n      --out \".\" \\\n      --parallel 4 \\\n      --CDBUILD_NODEJS_LIB=\"ON\" \\\n      --CDUSE_OPENMP=\"ON\" \\\n      --CDCMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/build/Release/$(node --print 'process.platform')-nodejs-$(node --print 'process.arch')\" \\\n      --CDBOOST_ROOT=\"/path/to/boost\" \\\n      --config \"Release\"\n\n===================\nBuilding for Python\n===================\n\nThe Python library can be compiled similarly to the C++ example above, however, this time Boost.Python has to be compiled first.\nMost systems have Boost.Python available as a download, but only for a specific Python version only (usually the latest Python version).\nThese might work if you are using Python from the same package provider, but, unfortunately, this is not a very reliable method, so compiling them yourself is usually the best option.\n\nFirst, download and extract Boost:\n\n..  code-block:: shell\n\n    curl \"https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz\" --output \"boost_1_80_0.tar.gz\" --location\n    tar -zxf boost_1_80_0.tar.gz -C /tmp/boost\n    cd /tmp/boost/boost_1_80_0\n\nNow we can compile it:\n\n..  code-block:: shell\n\n    echo \"using python ;\" > ./user-config.jam\n    ./bootstrap.sh\n    ./b2 \\\n      -a \\\n      threading=\"multi\" \\\n      -j4 \\\n      variant=\"release\" \\\n      link=\"static\" \\\n      address-model=\"64\" \\\n      architecture=\"x86\" \\\n      --layout=\"system\" \\\n      --with-python \\\n      --user-config=\"./user-config.jam\" \\\n      cxxflags=\"-fPIC\" \\\n      stage\n\nNote that you can customize the user-config.jam file to point it to your Python installation\n(see: https://www.boost.org/doc/libs/1_78_0/libs/python/doc/html/building/configuring_boost_build.html).\nYou should also specify the correct architecture and address-model.\nOn windows, make sure to use windows style paths, e.g. ``C:\\\\path\\\\to\\\\Python``\n\n*****\nUsage\n*****\n\nPlease take a look at the ``examples/`` folder on how to use OpenCAMLib.\nFor each language there is an example named ``test`` which calls all of the algorithms.\n\nThere is also some API documentation over here: https://opencamlib.readthedocs.io\n\n***************\nCommon Problems\n***************\n\nCompiling OpenCAMLib is unfortunately not very easy and there are many things that can go wrong.\nHere is a list of common problems and solutions.\n\n=================================================\nCould NOT find Boost (missing: Boost_INCLUDE_DIR)\n=================================================\n\nThis happens a lot, here are some of the reasons why this happens:\n\n**You don't have Boost installed.**\n\nIf you forgot to install boost, go ahead and download Boost from from their website: https://www.boost.org/users/download/ and extract it somewhere.\nNow, when compiling the C++ or node.js module, add the\n\n``-D BOOST_ROOT=/path/to/extracted/boost`` flag to the ``cmake ..`` command, or the.\n\n``--boost-prefix /path/to/extracted/boost`` flag to the ``./install.sh`` command\n\n**You installed Boost from Github.**\n\nThe boost that is hosted on Github does not have the headers yet! To compile those, you should run the following commands:\n\n..  code-block:: shell\n\n    ./bootstrap.sh\n    ./b2 headers\n\n**Your CMake version has a FindBoost module which is unaware of your Boost's version.**\n\nThe CMake module that looks for Boost, is usually not aware of the existence of the latest Boost versions.\nYou can help it by providing the version number of your Boost with the ``-D Boost_ADDITIONAL_VERSIONS=\"1.80.0\"`` flag.\nMake sure to change 1.80.0 with your version of Boost.\n\nIt can also be helpful to enable ``Boost_DEBUG`` in the CMake configuration.\n\n***************\nCross Compiling\n***************\n\nTo compile OpenCAMLib for other architectures, we recommend the following strategies.\nAlways make sure to compile Boost for the correct architecture as well!\n\n=====\nmacOS\n=====\n\nCross compiling on macOS is possible by setting the CMake ``CMAKE_OSX_ARCHITECTURES`` flag.\nWhen using the ``install.sh`` script, you can use the ``--macos-architecture`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=======\nWindows\n=======\n\nCross compiling on Windows is possible by using the \"Visual Studio\" generator (default) and by setting the CMake ``CMAKE_GENERATOR_PLATFORM`` flag.\nWhen using the ``install.sh`` script, you can use the ``--cmake-generator-platform`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=====\nLinux\n=====\n\nTo ensure that compiled libraries work on older linux versions, it has to be compiled with an older Glibc version.\nThe easiest way to accomplish this is by using Docker, there are images available especially for this purpose.\nWhen using the ``install.sh`` script, you can use the ``--docker-image`` flag which will make the command run in a container with the given image name.\n\nC++ docker image\n----------------\n\nWhen cross compiling the C++ library, make sure to use an old Glibc, this is included in the dockcross docker images.\nFor a list of supported architectures, take a look at:\n\nhttps://github.com/dockcross/dockcross#summary-cross-compilers\n\nNode.js docker image\n--------------------\n\nCross compilers for node.js are available here:\n\nhttps://github.com/prebuild/docker-images\n\nPython docker image\n-------------------\n\nCross compilers for python are here:\n\nhttps://github.com/pypa/manylinux#manylinux2014-centos-7-based\n\n*****\nLinks\n*****\n\n- repository https://github.com/aewallin/opencamlib\n- PPAs\n  - https://launchpad.net/~iacobs/+archive/ubuntu/cnc/\n  - https://launchpad.net/~neomilium/+archive/ubuntu/cam\n  - https://launchpad.net/~freecad-community/+archive/ubuntu/ppa\n  - (updated 2012) https://launchpad.net/~anders-e-e-wallin/+archive/ubuntu/cam\n- mailing-list http://groups.google.com/group/opencamlib\n- IRC-channel #cam on irc.freenode.net\n- coding standard (?) http://www.possibility.com/Cpp/CppCodingStandard.html\n\n*********************\nOrganization of Files\n*********************\n\n(generate this with 'tree -dL 2')::\n\n ├── docs                        documentation (not much here yet!)\n ├── examples                    c++, emscripten, nodejs and python examples\n ├── scripts                     CI scripts for installing and building ocl\n ├── src\n │   ├── algo                    algorithms under development\n │   ├── common                  common algorithms and data-structures\n │   ├── cutters                 cutter-classes\n │   ├── cxxlib                  c++ library cmake config\n │   ├── deb                     debian package cmake config\n │   ├── dropcutter              drop-cutter algorithms and operations\n │   ├── emscriptenlib           bindings for emscripten library\n │   ├── geo                     primitive geometry classes (point, triangle, stlsurf, etc.)\n │   ├── nodejslib               Node.js library bindings and cmake config\n │   ├── npmpackage              combined Node.js and emscripten wrappers, for publishing to npm\n │   ├── pythonlib               python library bindings and cmake config\n └── stl                         STL files for testing\n","readmeFilename":"README.rst","_id":"@opencamlib/opencamlib@2023.9.11-dev.317","_nodeVersion":"14.21.3","_npmVersion":"6.14.18","dist":{"integrity":"sha512-WHNYgjf/FWnY5KZ2WXvQinVNwyB01JBFMWeeqUvuh8vhmj45bsW3Df8T6qWnbaC9ML4gmBTVBdXIizrz3zr2Tw==","shasum":"f9fe358edf252ffd766beae684dd448655023b2d","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2023.9.11-dev.317.tgz","fileCount":71,"unpackedSize":30320849,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG6WcZqvmbn61x8A3WXLldrXX/QRAEa4h9nNJx1+OyETAiA+peVLYXRlUi9ssNF9egKO6ytr8m1ouhMvJMNpCXQVbQ=="}]},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2023.9.11-dev.317_1694427449466_0.983392121682652"},"_hasShrinkwrap":false},"2023.9.11-dev.318":{"name":"@opencamlib/opencamlib","version":"2023.9.11-dev.318","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"readme":"##########\nOpenCAMLib\n##########\n\n.. image:: https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg\n    :target: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html\n\n.. image:: https://github.com/aewallin/opencamlib/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/aewallin/opencamlib/actions/workflows/test.yml\n\n.. image:: https://readthedocs.org/projects/opencamlib/badge/?version=latest\n    :target: https://opencamlib.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n************\nIntroduction\n************\n\nOpenCAMLib (ocl) is a library for creating 3D toolpaths for CNC-machines such as mills and lathes.\nIt is written in C++ and has bindings for Python, Node.js and the browser.\nAt the moment it supports the following algorithms:\n\n===========\nDrop-cutter\n===========\n\nThe drop cutter algorithm drops a cutter, positioned at a predefined (x,y) location, until it touches the 3D model.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/drop-cutter.png?raw=true\n  :width: 200\n  :alt: Drop Cutter\n\n===========\nPush-cutter\n===========\n\nThe Push-cutter is used to create a Waterline toolpath that follows the shape of the model at a constant z-height in the xy-plane.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/push-cutter.png?raw=true\n  :width: 200\n  :alt: Push Cutter\n\n=======\nCutters\n=======\n\nThe algorithms listed above can be used with following cutters:\n\n- **CylCutter** (flat end mill / cylindrical)\n- **BallCutter** (ball end mill / spherical)\n- **BullCutter** (radius end mill / toroidal)\n- **ConeCutter** (tapered end mill / conical)\n- **CompositeCutter** (combinations of the above / compound)\n\nFrom August 2018 OpenCAMLib is released under LGPL license.\n\n**********************\nPre-compiled Libraries\n**********************\n\nOpenCAMLib provides pre-compiled C++, Node.js and Python libraries for the following platforms and architectures:\n\n+-------------+------------------+\n| **Windows** | ia32 / x64       |\n+-------------+------------------+\n| **macOS**   | x86_64 / arm64   |\n+-------------+------------------+\n| **Linux**   | x86_64 / aarch64 |\n+-------------+------------------+\n\n- The Python library is called ``opencamlib`` and is hosted on PyPi (pypi.org), precompiled libraries are available for Python v3.7 up to v3.11.\n- The Node.js + emscripten library is called ``@opencamlib/opencamlib`` and is hosted on npm (npmjs.org), precompiled libraries are available for Node-API v3 and up.\n- The C++ library is called ``libocl`` and is hosted on our Github Releases page.\n\n======\nPython\n======\n\nThe Python library (hosted on PyPi) can be installed like this:\n\n..  code-block:: shell\n\n    pip install opencamlib\n\nOn some platforms, pip is called pip3, you might have to run:\n\n..  code-block:: shell\n\n    pip3 install opencamlib\n\nNote that pip / pip3 is will install packages for to the system installation of Python, if you want to install a package in a custom Python installation that is not in your $PATH\n(for example, the Python which comes with Blender), you can install packages like so:\n\n..  code-block:: shell\n\n    /path/to/your/custom/python -m pip install opencamlib\n\nIf you don't know where Python is, but you have access to it's interpreter (FreeCAD and Blender both have a Python console), you can simply enter this command in there to install OpenCAMLib:\n\n..  code-block:: python\n\n    import sys; import subprocess; subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'opencamlib'])\n\n\n==========\nJavaScript\n==========\n\nThe JavaScript library (hosted on npm) works in Node.js and the browser (by leveraging emscripten / WASM) can be installed like this:\n\n..  code-block:: shell\n\n    npm install --save @opencamlib/opencamlib\n\nOr, using yarn:\n\n..  code-block:: shell\n\n    yarn add @opencamlib/opencamlib\n\nNote that it is not 100% feature complete and lacking some functionality still.\n\n===\nC++\n===\n\nPre-compiled C++ libraries are available on the Github Releases page (https://github.com/aewallin/opencamlib/releases).\nThis project also installs a OpenCAMLibConfig.cmake, which, if your project uses CMake, allows you to use ``find_package(OpenCAMLib REQUIRED)``.\n\nYou can see an example of that in use over here: ``examples/cpp/test/CMakeLists.txt``\n\n********************\nBuilding from Source\n********************\n\nHaving trouble with a pre-compiled library? Please report it to us.\nIf there are no pre-compiled libraries for your platform or architecture, or want to customize or package opencamlib, this is for you.\n\nOpenCAMLib uses functionality from a library called Boost.\nFor the Python library it uses an extra library called Boost.Python.\n\nOnly the Python bindings need Boost to be **compiled** (with Boost.Python).\nAll other libraries **DO NOT** need Boost to be compiled, in those cases, a headers only version will suffice.\nSo, if you are not compiling the Python libraries, simply download Boost, extract it into a folder, and tell CMake where to look for it.\n\nMake sure to download Boost from the boost.org downloads page, if you download it from github, you have to make sure to install the git submodules **and** build the headers.\n\nWe provide a ``install.sh`` script that helps with installation of dependencies and building OpenCAMLib libraries, you might want to take a look at it first.\nYou can run ``./install.sh --help`` to look at the available options, or inspect it's source code to find out more.\n\n============\nDependencies\n============\n\nTo compile OpenCAMLib, you need:\n\n- **C++ compiler** (It should at least support C++ 14)\n- **Git** (This is used for cloning the repository, and the emscripten SDK)\n- **CMake** (At least version 3.15)\n- **Boost** (When compiling the Python library, you have to **compile** Boost.Python for your Python version after installation)\n\nAt this time of writing, here are the packages to install:\n\nUbuntu Dependencies\n-------------------\n\n..  code-block:: shell\n\n    sudo apt install -y git cmake curl build-essential libboost-dev\n\nmacOS Dependencies\n------------------\n\n..  code-block:: shell\n\n    brew install git cmake curl boost python@3.11 boost-python3\n\nWindows Dependencies\n--------------------\n\nInstall\n\n- Visual Studio Build Tools (https://visualstudio.microsoft.com/visual-cpp-build-tools/)\n- Git (https://git-scm.com/download/win)\n- CMake (https://git-scm.com/download/win)\n- Boost (https://www.boost.org/users/download/)\n\nBy downloading the installers from the internet, or by using your package manager.\n\n================\nBuilding for C++\n================\n\nThe C++ library is the easiest to build, it only depends on Boost's headers.\nMake sure you have a compiler, git, cmake and Boost installed (or simply download and extract it somewhere).\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    cmake .. -D CXX_LIB=\"ON\"\n    make . # try make -j4 for a faster build if you have a multi-core machine\n    make install .\n\nWhen boost is not in a standard location, you can add the ``-D BOOST_ROOT=/path/to/boost`` option to the cmake command.\n\n=======================\nBuilding for Emscripten\n=======================\n\nTo compile the emscripten library, first download, install and activate it using the following commands:\n\n..  code-block:: shell\n\n    git clone https://github.com/emscripten-core/emsdk.git\n    cd emsdk\n    ./emsdk install latest\n    ./emsdk activate latest\n\nNow you can compile OpenCAMLib like this (make sure to replace the ``path/to/`` sections):\n\n..  code-block:: shell\n\n    source path/to/emsdk/emsdk_env.sh\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    emcmake cmake \\\n      -D CMAKE_BUILD_TYPE=\"RelWithDebInfo\" \\\n      -D BUILD_EMSCRIPTEN_LIB=\"ON\" \\\n      -D USE_OPENMP=\"OFF\" \\\n      -D CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/src/npmpackage/build\" \\\n      -D BOOST_ROOT=\"/path/to/boost\" \\\n      ..\n    emmake make # try emmake make -j4 for a faster build if you have a multi-core machine\n\nNote that ``USE_OPENMP`` has been turned off, OpenMP is not supported with Emscripten at the moment\n\n====================\nBuilding for Node.js\n====================\n\nTo compile the Node.js library, install the dependencies in ``src/nodejslib``:\n\n..  code-block:: shell\n\n    cd src/nodejslib\n    npm install\n\nNext, use cmake-js to compile the library:\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    ../src/nodejslib/node_modules/.bin/cmake-js \\\n      build \\\n      --directory \"..\" \\\n      --out \".\" \\\n      --parallel 4 \\\n      --CDBUILD_NODEJS_LIB=\"ON\" \\\n      --CDUSE_OPENMP=\"ON\" \\\n      --CDCMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/build/Release/$(node --print 'process.platform')-nodejs-$(node --print 'process.arch')\" \\\n      --CDBOOST_ROOT=\"/path/to/boost\" \\\n      --config \"Release\"\n\n===================\nBuilding for Python\n===================\n\nThe Python library can be compiled similarly to the C++ example above, however, this time Boost.Python has to be compiled first.\nMost systems have Boost.Python available as a download, but only for a specific Python version only (usually the latest Python version).\nThese might work if you are using Python from the same package provider, but, unfortunately, this is not a very reliable method, so compiling them yourself is usually the best option.\n\nFirst, download and extract Boost:\n\n..  code-block:: shell\n\n    curl \"https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz\" --output \"boost_1_80_0.tar.gz\" --location\n    tar -zxf boost_1_80_0.tar.gz -C /tmp/boost\n    cd /tmp/boost/boost_1_80_0\n\nNow we can compile it:\n\n..  code-block:: shell\n\n    echo \"using python ;\" > ./user-config.jam\n    ./bootstrap.sh\n    ./b2 \\\n      -a \\\n      threading=\"multi\" \\\n      -j4 \\\n      variant=\"release\" \\\n      link=\"static\" \\\n      address-model=\"64\" \\\n      architecture=\"x86\" \\\n      --layout=\"system\" \\\n      --with-python \\\n      --user-config=\"./user-config.jam\" \\\n      cxxflags=\"-fPIC\" \\\n      stage\n\nNote that you can customize the user-config.jam file to point it to your Python installation\n(see: https://www.boost.org/doc/libs/1_78_0/libs/python/doc/html/building/configuring_boost_build.html).\nYou should also specify the correct architecture and address-model.\nOn windows, make sure to use windows style paths, e.g. ``C:\\\\path\\\\to\\\\Python``\n\n*****\nUsage\n*****\n\nPlease take a look at the ``examples/`` folder on how to use OpenCAMLib.\nFor each language there is an example named ``test`` which calls all of the algorithms.\n\nThere is also some API documentation over here: https://opencamlib.readthedocs.io\n\n***************\nCommon Problems\n***************\n\nCompiling OpenCAMLib is unfortunately not very easy and there are many things that can go wrong.\nHere is a list of common problems and solutions.\n\n=================================================\nCould NOT find Boost (missing: Boost_INCLUDE_DIR)\n=================================================\n\nThis happens a lot, here are some of the reasons why this happens:\n\n**You don't have Boost installed.**\n\nIf you forgot to install boost, go ahead and download Boost from from their website: https://www.boost.org/users/download/ and extract it somewhere.\nNow, when compiling the C++ or node.js module, add the\n\n``-D BOOST_ROOT=/path/to/extracted/boost`` flag to the ``cmake ..`` command, or the.\n\n``--boost-prefix /path/to/extracted/boost`` flag to the ``./install.sh`` command\n\n**You installed Boost from Github.**\n\nThe boost that is hosted on Github does not have the headers yet! To compile those, you should run the following commands:\n\n..  code-block:: shell\n\n    ./bootstrap.sh\n    ./b2 headers\n\n**Your CMake version has a FindBoost module which is unaware of your Boost's version.**\n\nThe CMake module that looks for Boost, is usually not aware of the existence of the latest Boost versions.\nYou can help it by providing the version number of your Boost with the ``-D Boost_ADDITIONAL_VERSIONS=\"1.80.0\"`` flag.\nMake sure to change 1.80.0 with your version of Boost.\n\nIt can also be helpful to enable ``Boost_DEBUG`` in the CMake configuration.\n\n***************\nCross Compiling\n***************\n\nTo compile OpenCAMLib for other architectures, we recommend the following strategies.\nAlways make sure to compile Boost for the correct architecture as well!\n\n=====\nmacOS\n=====\n\nCross compiling on macOS is possible by setting the CMake ``CMAKE_OSX_ARCHITECTURES`` flag.\nWhen using the ``install.sh`` script, you can use the ``--macos-architecture`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=======\nWindows\n=======\n\nCross compiling on Windows is possible by using the \"Visual Studio\" generator (default) and by setting the CMake ``CMAKE_GENERATOR_PLATFORM`` flag.\nWhen using the ``install.sh`` script, you can use the ``--cmake-generator-platform`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=====\nLinux\n=====\n\nTo ensure that compiled libraries work on older linux versions, it has to be compiled with an older Glibc version.\nThe easiest way to accomplish this is by using Docker, there are images available especially for this purpose.\nWhen using the ``install.sh`` script, you can use the ``--docker-image`` flag which will make the command run in a container with the given image name.\n\nC++ docker image\n----------------\n\nWhen cross compiling the C++ library, make sure to use an old Glibc, this is included in the dockcross docker images.\nFor a list of supported architectures, take a look at:\n\nhttps://github.com/dockcross/dockcross#summary-cross-compilers\n\nNode.js docker image\n--------------------\n\nCross compilers for node.js are available here:\n\nhttps://github.com/prebuild/docker-images\n\nPython docker image\n-------------------\n\nCross compilers for python are here:\n\nhttps://github.com/pypa/manylinux#manylinux2014-centos-7-based\n\n*****\nLinks\n*****\n\n- repository https://github.com/aewallin/opencamlib\n- PPAs\n  - https://launchpad.net/~iacobs/+archive/ubuntu/cnc/\n  - https://launchpad.net/~neomilium/+archive/ubuntu/cam\n  - https://launchpad.net/~freecad-community/+archive/ubuntu/ppa\n  - (updated 2012) https://launchpad.net/~anders-e-e-wallin/+archive/ubuntu/cam\n- mailing-list http://groups.google.com/group/opencamlib\n- IRC-channel #cam on irc.freenode.net\n- coding standard (?) http://www.possibility.com/Cpp/CppCodingStandard.html\n\n*********************\nOrganization of Files\n*********************\n\n(generate this with 'tree -dL 2')::\n\n ├── docs                        documentation (not much here yet!)\n ├── examples                    c++, emscripten, nodejs and python examples\n ├── scripts                     CI scripts for installing and building ocl\n ├── src\n │   ├── algo                    algorithms under development\n │   ├── common                  common algorithms and data-structures\n │   ├── cutters                 cutter-classes\n │   ├── cxxlib                  c++ library cmake config\n │   ├── deb                     debian package cmake config\n │   ├── dropcutter              drop-cutter algorithms and operations\n │   ├── emscriptenlib           bindings for emscripten library\n │   ├── geo                     primitive geometry classes (point, triangle, stlsurf, etc.)\n │   ├── nodejslib               Node.js library bindings and cmake config\n │   ├── npmpackage              combined Node.js and emscripten wrappers, for publishing to npm\n │   ├── pythonlib               python library bindings and cmake config\n └── stl                         STL files for testing\n","readmeFilename":"README.rst","_id":"@opencamlib/opencamlib@2023.9.11-dev.318","_nodeVersion":"14.21.3","_npmVersion":"6.14.18","dist":{"integrity":"sha512-tnAA7FyJonWwBEw2cOk6Itu2+JYkOL/wruRqVHvzqFQ3MWS9tkrs32H4FFLIRb3OKebrPdeq2dpymEeILUp88g==","shasum":"9ccc329cf881f5a29dc28c950586b63c635e38eb","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2023.9.11-dev.318.tgz","fileCount":72,"unpackedSize":39296473,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCOG1xzp8himOo0saStOOg0Nbll+z0Pmm8sL4nCwHd9bQIhAJS1GNsUoutDCRqH3VpzoetM2BvTARZW7NbUqe4DUhDD"}]},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2023.9.11-dev.318_1694429767940_0.6157254734559947"},"_hasShrinkwrap":false},"2023.9.11-dev.319":{"name":"@opencamlib/opencamlib","version":"2023.9.11-dev.319","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"readme":"##########\nOpenCAMLib\n##########\n\n.. image:: https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg\n    :target: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html\n\n.. image:: https://github.com/aewallin/opencamlib/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/aewallin/opencamlib/actions/workflows/test.yml\n\n.. image:: https://readthedocs.org/projects/opencamlib/badge/?version=latest\n    :target: https://opencamlib.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n************\nIntroduction\n************\n\nOpenCAMLib (ocl) is a library for creating 3D toolpaths for CNC-machines such as mills and lathes.\nIt is written in C++ and has bindings for Python, Node.js and the browser.\nAt the moment it supports the following algorithms:\n\n===========\nDrop-cutter\n===========\n\nThe drop cutter algorithm drops a cutter, positioned at a predefined (x,y) location, until it touches the 3D model.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/drop-cutter.png?raw=true\n  :width: 200\n  :alt: Drop Cutter\n\n===========\nPush-cutter\n===========\n\nThe Push-cutter is used to create a Waterline toolpath that follows the shape of the model at a constant z-height in the xy-plane.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/push-cutter.png?raw=true\n  :width: 200\n  :alt: Push Cutter\n\n=======\nCutters\n=======\n\nThe algorithms listed above can be used with following cutters:\n\n- **CylCutter** (flat end mill / cylindrical)\n- **BallCutter** (ball end mill / spherical)\n- **BullCutter** (radius end mill / toroidal)\n- **ConeCutter** (tapered end mill / conical)\n- **CompositeCutter** (combinations of the above / compound)\n\nFrom August 2018 OpenCAMLib is released under LGPL license.\n\n**********************\nPre-compiled Libraries\n**********************\n\nOpenCAMLib provides pre-compiled C++, Node.js and Python libraries for the following platforms and architectures:\n\n+-------------+------------------+\n| **Windows** | ia32 / x64       |\n+-------------+------------------+\n| **macOS**   | x86_64 / arm64   |\n+-------------+------------------+\n| **Linux**   | x86_64 / aarch64 |\n+-------------+------------------+\n\n- The Python library is called ``opencamlib`` and is hosted on PyPi (pypi.org), precompiled libraries are available for Python v3.7 up to v3.11.\n- The Node.js + emscripten library is called ``@opencamlib/opencamlib`` and is hosted on npm (npmjs.org), precompiled libraries are available for Node-API v3 and up.\n- The C++ library is called ``libocl`` and is hosted on our Github Releases page.\n\n======\nPython\n======\n\nThe Python library (hosted on PyPi) can be installed like this:\n\n..  code-block:: shell\n\n    pip install opencamlib\n\nOn some platforms, pip is called pip3, you might have to run:\n\n..  code-block:: shell\n\n    pip3 install opencamlib\n\nNote that pip / pip3 is will install packages for to the system installation of Python, if you want to install a package in a custom Python installation that is not in your $PATH\n(for example, the Python which comes with Blender), you can install packages like so:\n\n..  code-block:: shell\n\n    /path/to/your/custom/python -m pip install opencamlib\n\nIf you don't know where Python is, but you have access to it's interpreter (FreeCAD and Blender both have a Python console), you can simply enter this command in there to install OpenCAMLib:\n\n..  code-block:: python\n\n    import sys; import subprocess; subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'opencamlib'])\n\n\n==========\nJavaScript\n==========\n\nThe JavaScript library (hosted on npm) works in Node.js and the browser (by leveraging emscripten / WASM) can be installed like this:\n\n..  code-block:: shell\n\n    npm install --save @opencamlib/opencamlib\n\nOr, using yarn:\n\n..  code-block:: shell\n\n    yarn add @opencamlib/opencamlib\n\nNote that it is not 100% feature complete and lacking some functionality still.\n\n===\nC++\n===\n\nPre-compiled C++ libraries are available on the Github Releases page (https://github.com/aewallin/opencamlib/releases).\nThis project also installs a OpenCAMLibConfig.cmake, which, if your project uses CMake, allows you to use ``find_package(OpenCAMLib REQUIRED)``.\n\nYou can see an example of that in use over here: ``examples/cpp/test/CMakeLists.txt``\n\n********************\nBuilding from Source\n********************\n\nHaving trouble with a pre-compiled library? Please report it to us.\nIf there are no pre-compiled libraries for your platform or architecture, or want to customize or package opencamlib, this is for you.\n\nOpenCAMLib uses functionality from a library called Boost.\nFor the Python library it uses an extra library called Boost.Python.\n\nOnly the Python bindings need Boost to be **compiled** (with Boost.Python).\nAll other libraries **DO NOT** need Boost to be compiled, in those cases, a headers only version will suffice.\nSo, if you are not compiling the Python libraries, simply download Boost, extract it into a folder, and tell CMake where to look for it.\n\nMake sure to download Boost from the boost.org downloads page, if you download it from github, you have to make sure to install the git submodules **and** build the headers.\n\nWe provide a ``install.sh`` script that helps with installation of dependencies and building OpenCAMLib libraries, you might want to take a look at it first.\nYou can run ``./install.sh --help`` to look at the available options, or inspect it's source code to find out more.\n\n============\nDependencies\n============\n\nTo compile OpenCAMLib, you need:\n\n- **C++ compiler** (It should at least support C++ 14)\n- **Git** (This is used for cloning the repository, and the emscripten SDK)\n- **CMake** (At least version 3.15)\n- **Boost** (When compiling the Python library, you have to **compile** Boost.Python for your Python version after installation)\n\nAt this time of writing, here are the packages to install:\n\nUbuntu Dependencies\n-------------------\n\n..  code-block:: shell\n\n    sudo apt install -y git cmake curl build-essential libboost-dev\n\nmacOS Dependencies\n------------------\n\n..  code-block:: shell\n\n    brew install git cmake curl boost python@3.11 boost-python3\n\nWindows Dependencies\n--------------------\n\nInstall\n\n- Visual Studio Build Tools (https://visualstudio.microsoft.com/visual-cpp-build-tools/)\n- Git (https://git-scm.com/download/win)\n- CMake (https://git-scm.com/download/win)\n- Boost (https://www.boost.org/users/download/)\n\nBy downloading the installers from the internet, or by using your package manager.\n\n================\nBuilding for C++\n================\n\nThe C++ library is the easiest to build, it only depends on Boost's headers.\nMake sure you have a compiler, git, cmake and Boost installed (or simply download and extract it somewhere).\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    cmake .. -D CXX_LIB=\"ON\"\n    make . # try make -j4 for a faster build if you have a multi-core machine\n    make install .\n\nWhen boost is not in a standard location, you can add the ``-D BOOST_ROOT=/path/to/boost`` option to the cmake command.\n\n=======================\nBuilding for Emscripten\n=======================\n\nTo compile the emscripten library, first download, install and activate it using the following commands:\n\n..  code-block:: shell\n\n    git clone https://github.com/emscripten-core/emsdk.git\n    cd emsdk\n    ./emsdk install latest\n    ./emsdk activate latest\n\nNow you can compile OpenCAMLib like this (make sure to replace the ``path/to/`` sections):\n\n..  code-block:: shell\n\n    source path/to/emsdk/emsdk_env.sh\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    emcmake cmake \\\n      -D CMAKE_BUILD_TYPE=\"RelWithDebInfo\" \\\n      -D BUILD_EMSCRIPTEN_LIB=\"ON\" \\\n      -D USE_OPENMP=\"OFF\" \\\n      -D CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/src/npmpackage/build\" \\\n      -D BOOST_ROOT=\"/path/to/boost\" \\\n      ..\n    emmake make # try emmake make -j4 for a faster build if you have a multi-core machine\n\nNote that ``USE_OPENMP`` has been turned off, OpenMP is not supported with Emscripten at the moment\n\n====================\nBuilding for Node.js\n====================\n\nTo compile the Node.js library, install the dependencies in ``src/nodejslib``:\n\n..  code-block:: shell\n\n    cd src/nodejslib\n    npm install\n\nNext, use cmake-js to compile the library:\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    ../src/nodejslib/node_modules/.bin/cmake-js \\\n      build \\\n      --directory \"..\" \\\n      --out \".\" \\\n      --parallel 4 \\\n      --CDBUILD_NODEJS_LIB=\"ON\" \\\n      --CDUSE_OPENMP=\"ON\" \\\n      --CDCMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/build/Release/$(node --print 'process.platform')-nodejs-$(node --print 'process.arch')\" \\\n      --CDBOOST_ROOT=\"/path/to/boost\" \\\n      --config \"Release\"\n\n===================\nBuilding for Python\n===================\n\nThe Python library can be compiled similarly to the C++ example above, however, this time Boost.Python has to be compiled first.\nMost systems have Boost.Python available as a download, but only for a specific Python version only (usually the latest Python version).\nThese might work if you are using Python from the same package provider, but, unfortunately, this is not a very reliable method, so compiling them yourself is usually the best option.\n\nFirst, download and extract Boost:\n\n..  code-block:: shell\n\n    curl \"https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz\" --output \"boost_1_80_0.tar.gz\" --location\n    tar -zxf boost_1_80_0.tar.gz -C /tmp/boost\n    cd /tmp/boost/boost_1_80_0\n\nNow we can compile it:\n\n..  code-block:: shell\n\n    echo \"using python ;\" > ./user-config.jam\n    ./bootstrap.sh\n    ./b2 \\\n      -a \\\n      threading=\"multi\" \\\n      -j4 \\\n      variant=\"release\" \\\n      link=\"static\" \\\n      address-model=\"64\" \\\n      architecture=\"x86\" \\\n      --layout=\"system\" \\\n      --with-python \\\n      --user-config=\"./user-config.jam\" \\\n      cxxflags=\"-fPIC\" \\\n      stage\n\nNote that you can customize the user-config.jam file to point it to your Python installation\n(see: https://www.boost.org/doc/libs/1_78_0/libs/python/doc/html/building/configuring_boost_build.html).\nYou should also specify the correct architecture and address-model.\nOn windows, make sure to use windows style paths, e.g. ``C:\\\\path\\\\to\\\\Python``\n\n*****\nUsage\n*****\n\nPlease take a look at the ``examples/`` folder on how to use OpenCAMLib.\nFor each language there is an example named ``test`` which calls all of the algorithms.\n\nThere is also some API documentation over here: https://opencamlib.readthedocs.io\n\n***************\nCommon Problems\n***************\n\nCompiling OpenCAMLib is unfortunately not very easy and there are many things that can go wrong.\nHere is a list of common problems and solutions.\n\n=================================================\nCould NOT find Boost (missing: Boost_INCLUDE_DIR)\n=================================================\n\nThis happens a lot, here are some of the reasons why this happens:\n\n**You don't have Boost installed.**\n\nIf you forgot to install boost, go ahead and download Boost from from their website: https://www.boost.org/users/download/ and extract it somewhere.\nNow, when compiling the C++ or node.js module, add the\n\n``-D BOOST_ROOT=/path/to/extracted/boost`` flag to the ``cmake ..`` command, or the.\n\n``--boost-prefix /path/to/extracted/boost`` flag to the ``./install.sh`` command\n\n**You installed Boost from Github.**\n\nThe boost that is hosted on Github does not have the headers yet! To compile those, you should run the following commands:\n\n..  code-block:: shell\n\n    ./bootstrap.sh\n    ./b2 headers\n\n**Your CMake version has a FindBoost module which is unaware of your Boost's version.**\n\nThe CMake module that looks for Boost, is usually not aware of the existence of the latest Boost versions.\nYou can help it by providing the version number of your Boost with the ``-D Boost_ADDITIONAL_VERSIONS=\"1.80.0\"`` flag.\nMake sure to change 1.80.0 with your version of Boost.\n\nIt can also be helpful to enable ``Boost_DEBUG`` in the CMake configuration.\n\n***************\nCross Compiling\n***************\n\nTo compile OpenCAMLib for other architectures, we recommend the following strategies.\nAlways make sure to compile Boost for the correct architecture as well!\n\n=====\nmacOS\n=====\n\nCross compiling on macOS is possible by setting the CMake ``CMAKE_OSX_ARCHITECTURES`` flag.\nWhen using the ``install.sh`` script, you can use the ``--macos-architecture`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=======\nWindows\n=======\n\nCross compiling on Windows is possible by using the \"Visual Studio\" generator (default) and by setting the CMake ``CMAKE_GENERATOR_PLATFORM`` flag.\nWhen using the ``install.sh`` script, you can use the ``--cmake-generator-platform`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=====\nLinux\n=====\n\nTo ensure that compiled libraries work on older linux versions, it has to be compiled with an older Glibc version.\nThe easiest way to accomplish this is by using Docker, there are images available especially for this purpose.\nWhen using the ``install.sh`` script, you can use the ``--docker-image`` flag which will make the command run in a container with the given image name.\n\nC++ docker image\n----------------\n\nWhen cross compiling the C++ library, make sure to use an old Glibc, this is included in the dockcross docker images.\nFor a list of supported architectures, take a look at:\n\nhttps://github.com/dockcross/dockcross#summary-cross-compilers\n\nNode.js docker image\n--------------------\n\nCross compilers for node.js are available here:\n\nhttps://github.com/prebuild/docker-images\n\nPython docker image\n-------------------\n\nCross compilers for python are here:\n\nhttps://github.com/pypa/manylinux#manylinux2014-centos-7-based\n\n*****\nLinks\n*****\n\n- repository https://github.com/aewallin/opencamlib\n- PPAs\n  - https://launchpad.net/~iacobs/+archive/ubuntu/cnc/\n  - https://launchpad.net/~neomilium/+archive/ubuntu/cam\n  - https://launchpad.net/~freecad-community/+archive/ubuntu/ppa\n  - (updated 2012) https://launchpad.net/~anders-e-e-wallin/+archive/ubuntu/cam\n- mailing-list http://groups.google.com/group/opencamlib\n- IRC-channel #cam on irc.freenode.net\n- coding standard (?) http://www.possibility.com/Cpp/CppCodingStandard.html\n\n*********************\nOrganization of Files\n*********************\n\n(generate this with 'tree -dL 2')::\n\n ├── docs                        documentation (not much here yet!)\n ├── examples                    c++, emscripten, nodejs and python examples\n ├── scripts                     CI scripts for installing and building ocl\n ├── src\n │   ├── algo                    algorithms under development\n │   ├── common                  common algorithms and data-structures\n │   ├── cutters                 cutter-classes\n │   ├── cxxlib                  c++ library cmake config\n │   ├── deb                     debian package cmake config\n │   ├── dropcutter              drop-cutter algorithms and operations\n │   ├── emscriptenlib           bindings for emscripten library\n │   ├── geo                     primitive geometry classes (point, triangle, stlsurf, etc.)\n │   ├── nodejslib               Node.js library bindings and cmake config\n │   ├── npmpackage              combined Node.js and emscripten wrappers, for publishing to npm\n │   ├── pythonlib               python library bindings and cmake config\n └── stl                         STL files for testing\n","readmeFilename":"README.rst","_id":"@opencamlib/opencamlib@2023.9.11-dev.319","_nodeVersion":"14.21.3","_npmVersion":"6.14.18","dist":{"integrity":"sha512-0dZc4X19JbXTZfRoabVBumPP/wwiX7ETnB1JxHgsXnVSGjg6NAAi7v9cZmRh3E8L5YsUmhSP0acXSoevH+/giw==","shasum":"fe89424da70248b48fd60de7684e7a8ab0da8dd6","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2023.9.11-dev.319.tgz","fileCount":89,"unpackedSize":42260329,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD122l0uNHy9YvCAQbJzAEsRlctbOfwa2LnFtJrKkEejAIgHEQG6kiqTH4XPJZHF0KsRqQdJ8X9zztfmf5SMz8s+40="}]},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2023.9.11-dev.319_1694455545640_0.17991282993268398"},"_hasShrinkwrap":false},"2023.9.11-dev.320":{"name":"@opencamlib/opencamlib","version":"2023.9.11-dev.320","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"readme":"##########\nOpenCAMLib\n##########\n\n.. image:: https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg\n    :target: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html\n\n.. image:: https://github.com/aewallin/opencamlib/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/aewallin/opencamlib/actions/workflows/test.yml\n\n.. image:: https://readthedocs.org/projects/opencamlib/badge/?version=latest\n    :target: https://opencamlib.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n************\nIntroduction\n************\n\nOpenCAMLib (ocl) is a library for creating 3D toolpaths for CNC-machines such as mills and lathes.\nIt is written in C++ and has bindings for Python, Node.js and the browser.\nAt the moment it supports the following algorithms:\n\n===========\nDrop-cutter\n===========\n\nThe drop cutter algorithm drops a cutter, positioned at a predefined (x,y) location, until it touches the 3D model.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/drop-cutter.png?raw=true\n  :width: 200\n  :alt: Drop Cutter\n\n===========\nPush-cutter\n===========\n\nThe Push-cutter is used to create a Waterline toolpath that follows the shape of the model at a constant z-height in the xy-plane.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/push-cutter.png?raw=true\n  :width: 200\n  :alt: Push Cutter\n\n=======\nCutters\n=======\n\nThe algorithms listed above can be used with following cutters:\n\n- **CylCutter** (flat end mill / cylindrical)\n- **BallCutter** (ball end mill / spherical)\n- **BullCutter** (radius end mill / toroidal)\n- **ConeCutter** (tapered end mill / conical)\n- **CompositeCutter** (combinations of the above / compound)\n\nFrom August 2018 OpenCAMLib is released under LGPL license.\n\n**********************\nPre-compiled Libraries\n**********************\n\nOpenCAMLib provides pre-compiled C++, Node.js and Python libraries for the following platforms and architectures:\n\n+-------------+------------------+\n| **Windows** | ia32 / x64       |\n+-------------+------------------+\n| **macOS**   | x86_64 / arm64   |\n+-------------+------------------+\n| **Linux**   | x86_64 / aarch64 |\n+-------------+------------------+\n\n- The Python library is called ``opencamlib`` and is hosted on PyPi (pypi.org), precompiled libraries are available for Python v3.7 up to v3.11.\n- The Node.js + emscripten library is called ``@opencamlib/opencamlib`` and is hosted on npm (npmjs.org), precompiled libraries are available for Node-API v3 and up.\n- The C++ library is called ``libocl`` and is hosted on our Github Releases page.\n\n======\nPython\n======\n\nThe Python library (hosted on PyPi) can be installed like this:\n\n..  code-block:: shell\n\n    pip install opencamlib\n\nOn some platforms, pip is called pip3, you might have to run:\n\n..  code-block:: shell\n\n    pip3 install opencamlib\n\nNote that pip / pip3 is will install packages for to the system installation of Python, if you want to install a package in a custom Python installation that is not in your $PATH\n(for example, the Python which comes with Blender), you can install packages like so:\n\n..  code-block:: shell\n\n    /path/to/your/custom/python -m pip install opencamlib\n\nIf you don't know where Python is, but you have access to it's interpreter (FreeCAD and Blender both have a Python console), you can simply enter this command in there to install OpenCAMLib:\n\n..  code-block:: python\n\n    import sys; import subprocess; subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'opencamlib'])\n\n\n==========\nJavaScript\n==========\n\nThe JavaScript library (hosted on npm) works in Node.js and the browser (by leveraging emscripten / WASM) can be installed like this:\n\n..  code-block:: shell\n\n    npm install --save @opencamlib/opencamlib\n\nOr, using yarn:\n\n..  code-block:: shell\n\n    yarn add @opencamlib/opencamlib\n\nNote that it is not 100% feature complete and lacking some functionality still.\n\n===\nC++\n===\n\nPre-compiled C++ libraries are available on the Github Releases page (https://github.com/aewallin/opencamlib/releases).\nThis project also installs a OpenCAMLibConfig.cmake, which, if your project uses CMake, allows you to use ``find_package(OpenCAMLib REQUIRED)``.\n\nYou can see an example of that in use over here: ``examples/cpp/test/CMakeLists.txt``\n\n********************\nBuilding from Source\n********************\n\nHaving trouble with a pre-compiled library? Please report it to us.\nIf there are no pre-compiled libraries for your platform or architecture, or want to customize or package opencamlib, this is for you.\n\nOpenCAMLib uses functionality from a library called Boost.\nFor the Python library it uses an extra library called Boost.Python.\n\nOnly the Python bindings need Boost to be **compiled** (with Boost.Python).\nAll other libraries **DO NOT** need Boost to be compiled, in those cases, a headers only version will suffice.\nSo, if you are not compiling the Python libraries, simply download Boost, extract it into a folder, and tell CMake where to look for it.\n\nMake sure to download Boost from the boost.org downloads page, if you download it from github, you have to make sure to install the git submodules **and** build the headers.\n\nWe provide a ``install.sh`` script that helps with installation of dependencies and building OpenCAMLib libraries, you might want to take a look at it first.\nYou can run ``./install.sh --help`` to look at the available options, or inspect it's source code to find out more.\n\n============\nDependencies\n============\n\nTo compile OpenCAMLib, you need:\n\n- **C++ compiler** (It should at least support C++ 14)\n- **Git** (This is used for cloning the repository, and the emscripten SDK)\n- **CMake** (At least version 3.15)\n- **Boost** (When compiling the Python library, you have to **compile** Boost.Python for your Python version after installation)\n\nAt this time of writing, here are the packages to install:\n\nUbuntu Dependencies\n-------------------\n\n..  code-block:: shell\n\n    sudo apt install -y git cmake curl build-essential libboost-dev\n\nmacOS Dependencies\n------------------\n\n..  code-block:: shell\n\n    brew install git cmake curl boost python@3.11 boost-python3\n\nWindows Dependencies\n--------------------\n\nInstall\n\n- Visual Studio Build Tools (https://visualstudio.microsoft.com/visual-cpp-build-tools/)\n- Git (https://git-scm.com/download/win)\n- CMake (https://git-scm.com/download/win)\n- Boost (https://www.boost.org/users/download/)\n\nBy downloading the installers from the internet, or by using your package manager.\n\n================\nBuilding for C++\n================\n\nThe C++ library is the easiest to build, it only depends on Boost's headers.\nMake sure you have a compiler, git, cmake and Boost installed (or simply download and extract it somewhere).\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    cmake .. -D CXX_LIB=\"ON\"\n    make . # try make -j4 for a faster build if you have a multi-core machine\n    make install .\n\nWhen boost is not in a standard location, you can add the ``-D BOOST_ROOT=/path/to/boost`` option to the cmake command.\n\n=======================\nBuilding for Emscripten\n=======================\n\nTo compile the emscripten library, first download, install and activate it using the following commands:\n\n..  code-block:: shell\n\n    git clone https://github.com/emscripten-core/emsdk.git\n    cd emsdk\n    ./emsdk install latest\n    ./emsdk activate latest\n\nNow you can compile OpenCAMLib like this (make sure to replace the ``path/to/`` sections):\n\n..  code-block:: shell\n\n    source path/to/emsdk/emsdk_env.sh\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    emcmake cmake \\\n      -D CMAKE_BUILD_TYPE=\"RelWithDebInfo\" \\\n      -D BUILD_EMSCRIPTEN_LIB=\"ON\" \\\n      -D USE_OPENMP=\"OFF\" \\\n      -D CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/src/npmpackage/build\" \\\n      -D BOOST_ROOT=\"/path/to/boost\" \\\n      ..\n    emmake make # try emmake make -j4 for a faster build if you have a multi-core machine\n\nNote that ``USE_OPENMP`` has been turned off, OpenMP is not supported with Emscripten at the moment\n\n====================\nBuilding for Node.js\n====================\n\nTo compile the Node.js library, install the dependencies in ``src/nodejslib``:\n\n..  code-block:: shell\n\n    cd src/nodejslib\n    npm install\n\nNext, use cmake-js to compile the library:\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    ../src/nodejslib/node_modules/.bin/cmake-js \\\n      build \\\n      --directory \"..\" \\\n      --out \".\" \\\n      --parallel 4 \\\n      --CDBUILD_NODEJS_LIB=\"ON\" \\\n      --CDUSE_OPENMP=\"ON\" \\\n      --CDCMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/build/Release/$(node --print 'process.platform')-nodejs-$(node --print 'process.arch')\" \\\n      --CDBOOST_ROOT=\"/path/to/boost\" \\\n      --config \"Release\"\n\n===================\nBuilding for Python\n===================\n\nThe Python library can be compiled similarly to the C++ example above, however, this time Boost.Python has to be compiled first.\nMost systems have Boost.Python available as a download, but only for a specific Python version only (usually the latest Python version).\nThese might work if you are using Python from the same package provider, but, unfortunately, this is not a very reliable method, so compiling them yourself is usually the best option.\n\nFirst, download and extract Boost:\n\n..  code-block:: shell\n\n    curl \"https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz\" --output \"boost_1_80_0.tar.gz\" --location\n    tar -zxf boost_1_80_0.tar.gz -C /tmp/boost\n    cd /tmp/boost/boost_1_80_0\n\nNow we can compile it:\n\n..  code-block:: shell\n\n    echo \"using python ;\" > ./user-config.jam\n    ./bootstrap.sh\n    ./b2 \\\n      -a \\\n      threading=\"multi\" \\\n      -j4 \\\n      variant=\"release\" \\\n      link=\"static\" \\\n      address-model=\"64\" \\\n      architecture=\"x86\" \\\n      --layout=\"system\" \\\n      --with-python \\\n      --user-config=\"./user-config.jam\" \\\n      cxxflags=\"-fPIC\" \\\n      stage\n\nNote that you can customize the user-config.jam file to point it to your Python installation\n(see: https://www.boost.org/doc/libs/1_78_0/libs/python/doc/html/building/configuring_boost_build.html).\nYou should also specify the correct architecture and address-model.\nOn windows, make sure to use windows style paths, e.g. ``C:\\\\path\\\\to\\\\Python``\n\n*****\nUsage\n*****\n\nPlease take a look at the ``examples/`` folder on how to use OpenCAMLib.\nFor each language there is an example named ``test`` which calls all of the algorithms.\n\nThere is also some API documentation over here: https://opencamlib.readthedocs.io\n\n***************\nCommon Problems\n***************\n\nCompiling OpenCAMLib is unfortunately not very easy and there are many things that can go wrong.\nHere is a list of common problems and solutions.\n\n=================================================\nCould NOT find Boost (missing: Boost_INCLUDE_DIR)\n=================================================\n\nThis happens a lot, here are some of the reasons why this happens:\n\n**You don't have Boost installed.**\n\nIf you forgot to install boost, go ahead and download Boost from from their website: https://www.boost.org/users/download/ and extract it somewhere.\nNow, when compiling the C++ or node.js module, add the\n\n``-D BOOST_ROOT=/path/to/extracted/boost`` flag to the ``cmake ..`` command, or the.\n\n``--boost-prefix /path/to/extracted/boost`` flag to the ``./install.sh`` command\n\n**You installed Boost from Github.**\n\nThe boost that is hosted on Github does not have the headers yet! To compile those, you should run the following commands:\n\n..  code-block:: shell\n\n    ./bootstrap.sh\n    ./b2 headers\n\n**Your CMake version has a FindBoost module which is unaware of your Boost's version.**\n\nThe CMake module that looks for Boost, is usually not aware of the existence of the latest Boost versions.\nYou can help it by providing the version number of your Boost with the ``-D Boost_ADDITIONAL_VERSIONS=\"1.80.0\"`` flag.\nMake sure to change 1.80.0 with your version of Boost.\n\nIt can also be helpful to enable ``Boost_DEBUG`` in the CMake configuration.\n\n***************\nCross Compiling\n***************\n\nTo compile OpenCAMLib for other architectures, we recommend the following strategies.\nAlways make sure to compile Boost for the correct architecture as well!\n\n=====\nmacOS\n=====\n\nCross compiling on macOS is possible by setting the CMake ``CMAKE_OSX_ARCHITECTURES`` flag.\nWhen using the ``install.sh`` script, you can use the ``--macos-architecture`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=======\nWindows\n=======\n\nCross compiling on Windows is possible by using the \"Visual Studio\" generator (default) and by setting the CMake ``CMAKE_GENERATOR_PLATFORM`` flag.\nWhen using the ``install.sh`` script, you can use the ``--cmake-generator-platform`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=====\nLinux\n=====\n\nTo ensure that compiled libraries work on older linux versions, it has to be compiled with an older Glibc version.\nThe easiest way to accomplish this is by using Docker, there are images available especially for this purpose.\nWhen using the ``install.sh`` script, you can use the ``--docker-image`` flag which will make the command run in a container with the given image name.\n\nC++ docker image\n----------------\n\nWhen cross compiling the C++ library, make sure to use an old Glibc, this is included in the dockcross docker images.\nFor a list of supported architectures, take a look at:\n\nhttps://github.com/dockcross/dockcross#summary-cross-compilers\n\nNode.js docker image\n--------------------\n\nCross compilers for node.js are available here:\n\nhttps://github.com/prebuild/docker-images\n\nPython docker image\n-------------------\n\nCross compilers for python are here:\n\nhttps://github.com/pypa/manylinux#manylinux2014-centos-7-based\n\n*****\nLinks\n*****\n\n- repository https://github.com/aewallin/opencamlib\n- PPAs\n  - https://launchpad.net/~iacobs/+archive/ubuntu/cnc/\n  - https://launchpad.net/~neomilium/+archive/ubuntu/cam\n  - https://launchpad.net/~freecad-community/+archive/ubuntu/ppa\n  - (updated 2012) https://launchpad.net/~anders-e-e-wallin/+archive/ubuntu/cam\n- mailing-list http://groups.google.com/group/opencamlib\n- IRC-channel #cam on irc.freenode.net\n- coding standard (?) http://www.possibility.com/Cpp/CppCodingStandard.html\n\n*********************\nOrganization of Files\n*********************\n\n(generate this with 'tree -dL 2')::\n\n ├── docs                        documentation (not much here yet!)\n ├── examples                    c++, emscripten, nodejs and python examples\n ├── scripts                     CI scripts for installing and building ocl\n ├── src\n │   ├── algo                    algorithms under development\n │   ├── common                  common algorithms and data-structures\n │   ├── cutters                 cutter-classes\n │   ├── cxxlib                  c++ library cmake config\n │   ├── deb                     debian package cmake config\n │   ├── dropcutter              drop-cutter algorithms and operations\n │   ├── emscriptenlib           bindings for emscripten library\n │   ├── geo                     primitive geometry classes (point, triangle, stlsurf, etc.)\n │   ├── nodejslib               Node.js library bindings and cmake config\n │   ├── npmpackage              combined Node.js and emscripten wrappers, for publishing to npm\n │   ├── pythonlib               python library bindings and cmake config\n └── stl                         STL files for testing\n","readmeFilename":"README.rst","_id":"@opencamlib/opencamlib@2023.9.11-dev.320","_nodeVersion":"14.21.3","_npmVersion":"6.14.18","dist":{"integrity":"sha512-dbPQEIeNEUV6PJSjIAn3aG0VEIUhQiEreiei2oHhUs4zCiM0Z9xzSAQOwIfinvl4kGZzLqmkG+K8MBgo4K60nw==","shasum":"ede087554ccc8441c2b2ebd834407ddfdfc3fc84","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2023.9.11-dev.320.tgz","fileCount":89,"unpackedSize":42260329,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAy6x3erJhGwVDTMjlI/5ErG2IdEB46qvaNykggkiTz5AiBZxW/qirYG1cPAC66LETbCeTYzFyO/x1I/bHqdPs0b0A=="}]},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2023.9.11-dev.320_1694458591887_0.5890416251148289"},"_hasShrinkwrap":false},"2023.9.11-dev.324":{"name":"@opencamlib/opencamlib","version":"2023.9.11-dev.324","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"readme":"##########\nOpenCAMLib\n##########\n\n.. image:: https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg\n    :target: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html\n\n.. image:: https://github.com/aewallin/opencamlib/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/aewallin/opencamlib/actions/workflows/test.yml\n\n.. image:: https://readthedocs.org/projects/opencamlib/badge/?version=latest\n    :target: https://opencamlib.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n************\nIntroduction\n************\n\nOpenCAMLib (ocl) is a library for creating 3D toolpaths for CNC-machines such as mills and lathes.\nIt is written in C++ and has bindings for Python, Node.js and the browser.\nAt the moment it supports the following algorithms:\n\n===========\nDrop-cutter\n===========\n\nThe drop cutter algorithm drops a cutter, positioned at a predefined (x,y) location, until it touches the 3D model.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/drop-cutter.png?raw=true\n  :width: 200\n  :alt: Drop Cutter\n\n===========\nPush-cutter\n===========\n\nThe Push-cutter is used to create a Waterline toolpath that follows the shape of the model at a constant z-height in the xy-plane.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/push-cutter.png?raw=true\n  :width: 200\n  :alt: Push Cutter\n\n=======\nCutters\n=======\n\nThe algorithms listed above can be used with following cutters:\n\n- **CylCutter** (flat end mill / cylindrical)\n- **BallCutter** (ball end mill / spherical)\n- **BullCutter** (radius end mill / toroidal)\n- **ConeCutter** (tapered end mill / conical)\n- **CompositeCutter** (combinations of the above / compound)\n\nFrom August 2018 OpenCAMLib is released under LGPL license.\n\n**********************\nPre-compiled Libraries\n**********************\n\nOpenCAMLib provides pre-compiled C++, Node.js and Python libraries for the following platforms and architectures:\n\n+-------------+------------------+\n| **Windows** | ia32 / x64       |\n+-------------+------------------+\n| **macOS**   | x86_64 / arm64   |\n+-------------+------------------+\n| **Linux**   | x86_64 / aarch64 |\n+-------------+------------------+\n\n- The Python library is called ``opencamlib`` and is hosted on PyPi (pypi.org), precompiled libraries are available for Python v3.7 up to v3.11.\n- The Node.js + emscripten library is called ``@opencamlib/opencamlib`` and is hosted on npm (npmjs.org), precompiled libraries are available for Node-API v3 and up.\n- The C++ library is called ``libocl`` and is hosted on our Github Releases page.\n\n======\nPython\n======\n\nThe Python library (hosted on PyPi) can be installed like this:\n\n..  code-block:: shell\n\n    pip install opencamlib\n\nOn some platforms, pip is called pip3, you might have to run:\n\n..  code-block:: shell\n\n    pip3 install opencamlib\n\nNote that pip / pip3 is will install packages for to the system installation of Python, if you want to install a package in a custom Python installation that is not in your $PATH\n(for example, the Python which comes with Blender), you can install packages like so:\n\n..  code-block:: shell\n\n    /path/to/your/custom/python -m pip install opencamlib\n\nIf you don't know where Python is, but you have access to it's interpreter (FreeCAD and Blender both have a Python console), you can simply enter this command in there to install OpenCAMLib:\n\n..  code-block:: python\n\n    import sys; import subprocess; subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'opencamlib'])\n\n\n==========\nJavaScript\n==========\n\nThe JavaScript library (hosted on npm) works in Node.js and the browser (by leveraging emscripten / WASM) can be installed like this:\n\n..  code-block:: shell\n\n    npm install --save @opencamlib/opencamlib\n\nOr, using yarn:\n\n..  code-block:: shell\n\n    yarn add @opencamlib/opencamlib\n\nNote that it is not 100% feature complete and lacking some functionality still.\n\n===\nC++\n===\n\nPre-compiled C++ libraries are available on the Github Releases page (https://github.com/aewallin/opencamlib/releases).\nThis project also installs a OpenCAMLibConfig.cmake, which, if your project uses CMake, allows you to use ``find_package(OpenCAMLib REQUIRED)``.\n\nYou can see an example of that in use over here: ``examples/cpp/test/CMakeLists.txt``\n\n********************\nBuilding from Source\n********************\n\nHaving trouble with a pre-compiled library? Please report it to us.\nIf there are no pre-compiled libraries for your platform or architecture, or want to customize or package opencamlib, this is for you.\n\nOpenCAMLib uses functionality from a library called Boost.\nFor the Python library it uses an extra library called Boost.Python.\n\nOnly the Python bindings need Boost to be **compiled** (with Boost.Python).\nAll other libraries **DO NOT** need Boost to be compiled, in those cases, a headers only version will suffice.\nSo, if you are not compiling the Python libraries, simply download Boost, extract it into a folder, and tell CMake where to look for it.\n\nMake sure to download Boost from the boost.org downloads page, if you download it from github, you have to make sure to install the git submodules **and** build the headers.\n\nWe provide a ``install.sh`` script that helps with installation of dependencies and building OpenCAMLib libraries, you might want to take a look at it first.\nYou can run ``./install.sh --help`` to look at the available options, or inspect it's source code to find out more.\n\n============\nDependencies\n============\n\nTo compile OpenCAMLib, you need:\n\n- **C++ compiler** (It should at least support C++ 14)\n- **Git** (This is used for cloning the repository, and the emscripten SDK)\n- **CMake** (At least version 3.15)\n- **Boost** (When compiling the Python library, you have to **compile** Boost.Python for your Python version after installation)\n\nAt this time of writing, here are the packages to install:\n\nUbuntu Dependencies\n-------------------\n\n..  code-block:: shell\n\n    sudo apt install -y git cmake curl build-essential libboost-dev\n\nmacOS Dependencies\n------------------\n\n..  code-block:: shell\n\n    brew install git cmake curl boost python@3.11 boost-python3\n\nWindows Dependencies\n--------------------\n\nInstall\n\n- Visual Studio Build Tools (https://visualstudio.microsoft.com/visual-cpp-build-tools/)\n- Git (https://git-scm.com/download/win)\n- CMake (https://git-scm.com/download/win)\n- Boost (https://www.boost.org/users/download/)\n\nBy downloading the installers from the internet, or by using your package manager.\n\n================\nBuilding for C++\n================\n\nThe C++ library is the easiest to build, it only depends on Boost's headers.\nMake sure you have a compiler, git, cmake and Boost installed (or simply download and extract it somewhere).\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    cmake .. -D CXX_LIB=\"ON\"\n    make . # try make -j4 for a faster build if you have a multi-core machine\n    make install .\n\nWhen boost is not in a standard location, you can add the ``-D BOOST_ROOT=/path/to/boost`` option to the cmake command.\n\n=======================\nBuilding for Emscripten\n=======================\n\nTo compile the emscripten library, first download, install and activate it using the following commands:\n\n..  code-block:: shell\n\n    git clone https://github.com/emscripten-core/emsdk.git\n    cd emsdk\n    ./emsdk install latest\n    ./emsdk activate latest\n\nNow you can compile OpenCAMLib like this (make sure to replace the ``path/to/`` sections):\n\n..  code-block:: shell\n\n    source path/to/emsdk/emsdk_env.sh\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    emcmake cmake \\\n      -D CMAKE_BUILD_TYPE=\"RelWithDebInfo\" \\\n      -D BUILD_EMSCRIPTEN_LIB=\"ON\" \\\n      -D USE_OPENMP=\"OFF\" \\\n      -D CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/src/npmpackage/build\" \\\n      -D BOOST_ROOT=\"/path/to/boost\" \\\n      ..\n    emmake make # try emmake make -j4 for a faster build if you have a multi-core machine\n\nNote that ``USE_OPENMP`` has been turned off, OpenMP is not supported with Emscripten at the moment\n\n====================\nBuilding for Node.js\n====================\n\nTo compile the Node.js library, install the dependencies in ``src/nodejslib``:\n\n..  code-block:: shell\n\n    cd src/nodejslib\n    npm install\n\nNext, use cmake-js to compile the library:\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    ../src/nodejslib/node_modules/.bin/cmake-js \\\n      build \\\n      --directory \"..\" \\\n      --out \".\" \\\n      --parallel 4 \\\n      --CDBUILD_NODEJS_LIB=\"ON\" \\\n      --CDUSE_OPENMP=\"ON\" \\\n      --CDCMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/build/Release/$(node --print 'process.platform')-nodejs-$(node --print 'process.arch')\" \\\n      --CDBOOST_ROOT=\"/path/to/boost\" \\\n      --config \"Release\"\n\n===================\nBuilding for Python\n===================\n\nThe Python library can be compiled similarly to the C++ example above, however, this time Boost.Python has to be compiled first.\nMost systems have Boost.Python available as a download, but only for a specific Python version only (usually the latest Python version).\nThese might work if you are using Python from the same package provider, but, unfortunately, this is not a very reliable method, so compiling them yourself is usually the best option.\n\nFirst, download and extract Boost:\n\n..  code-block:: shell\n\n    curl \"https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz\" --output \"boost_1_80_0.tar.gz\" --location\n    tar -zxf boost_1_80_0.tar.gz -C /tmp/boost\n    cd /tmp/boost/boost_1_80_0\n\nNow we can compile it:\n\n..  code-block:: shell\n\n    echo \"using python ;\" > ./user-config.jam\n    ./bootstrap.sh\n    ./b2 \\\n      -a \\\n      threading=\"multi\" \\\n      -j4 \\\n      variant=\"release\" \\\n      link=\"static\" \\\n      address-model=\"64\" \\\n      architecture=\"x86\" \\\n      --layout=\"system\" \\\n      --with-python \\\n      --user-config=\"./user-config.jam\" \\\n      cxxflags=\"-fPIC\" \\\n      stage\n\nNote that you can customize the user-config.jam file to point it to your Python installation\n(see: https://www.boost.org/doc/libs/1_78_0/libs/python/doc/html/building/configuring_boost_build.html).\nYou should also specify the correct architecture and address-model.\nOn windows, make sure to use windows style paths, e.g. ``C:\\\\path\\\\to\\\\Python``\n\n*****\nUsage\n*****\n\nPlease take a look at the ``examples/`` folder on how to use OpenCAMLib.\nFor each language there is an example named ``test`` which calls all of the algorithms.\n\nThere is also some API documentation over here: https://opencamlib.readthedocs.io\n\n***************\nCommon Problems\n***************\n\nCompiling OpenCAMLib is unfortunately not very easy and there are many things that can go wrong.\nHere is a list of common problems and solutions.\n\n=================================================\nCould NOT find Boost (missing: Boost_INCLUDE_DIR)\n=================================================\n\nThis happens a lot, here are some of the reasons why this happens:\n\n**You don't have Boost installed.**\n\nIf you forgot to install boost, go ahead and download Boost from from their website: https://www.boost.org/users/download/ and extract it somewhere.\nNow, when compiling the C++ or node.js module, add the\n\n``-D BOOST_ROOT=/path/to/extracted/boost`` flag to the ``cmake ..`` command, or the.\n\n``--boost-prefix /path/to/extracted/boost`` flag to the ``./install.sh`` command\n\n**You installed Boost from Github.**\n\nThe boost that is hosted on Github does not have the headers yet! To compile those, you should run the following commands:\n\n..  code-block:: shell\n\n    ./bootstrap.sh\n    ./b2 headers\n\n**Your CMake version has a FindBoost module which is unaware of your Boost's version.**\n\nThe CMake module that looks for Boost, is usually not aware of the existence of the latest Boost versions.\nYou can help it by providing the version number of your Boost with the ``-D Boost_ADDITIONAL_VERSIONS=\"1.80.0\"`` flag.\nMake sure to change 1.80.0 with your version of Boost.\n\nIt can also be helpful to enable ``Boost_DEBUG`` in the CMake configuration.\n\n***************\nCross Compiling\n***************\n\nTo compile OpenCAMLib for other architectures, we recommend the following strategies.\nAlways make sure to compile Boost for the correct architecture as well!\n\n=====\nmacOS\n=====\n\nCross compiling on macOS is possible by setting the CMake ``CMAKE_OSX_ARCHITECTURES`` flag.\nWhen using the ``install.sh`` script, you can use the ``--macos-architecture`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=======\nWindows\n=======\n\nCross compiling on Windows is possible by using the \"Visual Studio\" generator (default) and by setting the CMake ``CMAKE_GENERATOR_PLATFORM`` flag.\nWhen using the ``install.sh`` script, you can use the ``--cmake-generator-platform`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=====\nLinux\n=====\n\nTo ensure that compiled libraries work on older linux versions, it has to be compiled with an older Glibc version.\nThe easiest way to accomplish this is by using Docker, there are images available especially for this purpose.\nWhen using the ``install.sh`` script, you can use the ``--docker-image`` flag which will make the command run in a container with the given image name.\n\nC++ docker image\n----------------\n\nWhen cross compiling the C++ library, make sure to use an old Glibc, this is included in the dockcross docker images.\nFor a list of supported architectures, take a look at:\n\nhttps://github.com/dockcross/dockcross#summary-cross-compilers\n\nNode.js docker image\n--------------------\n\nCross compilers for node.js are available here:\n\nhttps://github.com/prebuild/docker-images\n\nPython docker image\n-------------------\n\nCross compilers for python are here:\n\nhttps://github.com/pypa/manylinux#manylinux2014-centos-7-based\n\n*****\nLinks\n*****\n\n- repository https://github.com/aewallin/opencamlib\n- PPAs\n  - https://launchpad.net/~iacobs/+archive/ubuntu/cnc/\n  - https://launchpad.net/~neomilium/+archive/ubuntu/cam\n  - https://launchpad.net/~freecad-community/+archive/ubuntu/ppa\n  - (updated 2012) https://launchpad.net/~anders-e-e-wallin/+archive/ubuntu/cam\n- mailing-list http://groups.google.com/group/opencamlib\n- IRC-channel #cam on irc.freenode.net\n- coding standard (?) http://www.possibility.com/Cpp/CppCodingStandard.html\n\n*********************\nOrganization of Files\n*********************\n\n(generate this with 'tree -dL 2')::\n\n ├── docs                        documentation (not much here yet!)\n ├── examples                    c++, emscripten, nodejs and python examples\n ├── scripts                     CI scripts for installing and building ocl\n ├── src\n │   ├── algo                    algorithms under development\n │   ├── common                  common algorithms and data-structures\n │   ├── cutters                 cutter-classes\n │   ├── cxxlib                  c++ library cmake config\n │   ├── deb                     debian package cmake config\n │   ├── dropcutter              drop-cutter algorithms and operations\n │   ├── emscriptenlib           bindings for emscripten library\n │   ├── geo                     primitive geometry classes (point, triangle, stlsurf, etc.)\n │   ├── nodejslib               Node.js library bindings and cmake config\n │   ├── npmpackage              combined Node.js and emscripten wrappers, for publishing to npm\n │   ├── pythonlib               python library bindings and cmake config\n └── stl                         STL files for testing\n","readmeFilename":"README.rst","_id":"@opencamlib/opencamlib@2023.9.11-dev.324","_nodeVersion":"14.21.3","_npmVersion":"6.14.18","dist":{"integrity":"sha512-1nLXdNKQuCR3PO81FiA0KS/tqmIXZv2S12CRfLam6aNC0Re1lRXsNoSLiadyQSviZV+UsNEzlfLigpMA2srmJg==","shasum":"53334eba0446c21ac0c540cf466767519f7f193b","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2023.9.11-dev.324.tgz","fileCount":89,"unpackedSize":42260329,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIASrXknJZzocTvuW6F3gwY9Cp5cD1/LLEYobyBFmXmhiAiEAlhnKJvBqLCTShq1ZlsYkmBcPYTGLFBuS8TkeegSX6MY="}]},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2023.9.11-dev.324_1694467450196_0.28145454811246373"},"_hasShrinkwrap":false},"2023.9.11-dev.325":{"name":"@opencamlib/opencamlib","version":"2023.9.11-dev.325","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"readme":"##########\nOpenCAMLib\n##########\n\n.. image:: https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg\n    :target: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html\n\n.. image:: https://github.com/aewallin/opencamlib/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/aewallin/opencamlib/actions/workflows/test.yml\n\n.. image:: https://readthedocs.org/projects/opencamlib/badge/?version=latest\n    :target: https://opencamlib.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n************\nIntroduction\n************\n\nOpenCAMLib (ocl) is a library for creating 3D toolpaths for CNC-machines such as mills and lathes.\nIt is written in C++ and has bindings for Python, Node.js and the browser.\nAt the moment it supports the following algorithms:\n\n===========\nDrop-cutter\n===========\n\nThe drop cutter algorithm drops a cutter, positioned at a predefined (x,y) location, until it touches the 3D model.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/drop-cutter.png?raw=true\n  :width: 200\n  :alt: Drop Cutter\n\n===========\nPush-cutter\n===========\n\nThe Push-cutter is used to create a Waterline toolpath that follows the shape of the model at a constant z-height in the xy-plane.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/push-cutter.png?raw=true\n  :width: 200\n  :alt: Push Cutter\n\n=======\nCutters\n=======\n\nThe algorithms listed above can be used with following cutters:\n\n- **CylCutter** (flat end mill / cylindrical)\n- **BallCutter** (ball end mill / spherical)\n- **BullCutter** (radius end mill / toroidal)\n- **ConeCutter** (tapered end mill / conical)\n- **CompositeCutter** (combinations of the above / compound)\n\nFrom August 2018 OpenCAMLib is released under LGPL license.\n\n**********************\nPre-compiled Libraries\n**********************\n\nOpenCAMLib provides pre-compiled C++, Node.js and Python libraries for the following platforms and architectures:\n\n+-------------+------------------+\n| **Windows** | ia32 / x64       |\n+-------------+------------------+\n| **macOS**   | x86_64 / arm64   |\n+-------------+------------------+\n| **Linux**   | x86_64 / aarch64 |\n+-------------+------------------+\n\n- The Python library is called ``opencamlib`` and is hosted on PyPi (pypi.org), precompiled libraries are available for Python v3.7 up to v3.11.\n- The Node.js + emscripten library is called ``@opencamlib/opencamlib`` and is hosted on npm (npmjs.org), precompiled libraries are available for Node-API v3 and up.\n- The C++ library is called ``libocl`` and is hosted on our Github Releases page.\n\n======\nPython\n======\n\nThe Python library (hosted on PyPi) can be installed like this:\n\n..  code-block:: shell\n\n    pip install opencamlib\n\nOn some platforms, pip is called pip3, you might have to run:\n\n..  code-block:: shell\n\n    pip3 install opencamlib\n\nNote that pip / pip3 is will install packages for to the system installation of Python, if you want to install a package in a custom Python installation that is not in your $PATH\n(for example, the Python which comes with Blender), you can install packages like so:\n\n..  code-block:: shell\n\n    /path/to/your/custom/python -m pip install opencamlib\n\nIf you don't know where Python is, but you have access to it's interpreter (FreeCAD and Blender both have a Python console), you can simply enter this command in there to install OpenCAMLib:\n\n..  code-block:: python\n\n    import sys; import subprocess; subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'opencamlib'])\n\n\n==========\nJavaScript\n==========\n\nThe JavaScript library (hosted on npm) works in Node.js and the browser (by leveraging emscripten / WASM) can be installed like this:\n\n..  code-block:: shell\n\n    npm install --save @opencamlib/opencamlib\n\nOr, using yarn:\n\n..  code-block:: shell\n\n    yarn add @opencamlib/opencamlib\n\nNote that it is not 100% feature complete and lacking some functionality still.\n\n===\nC++\n===\n\nPre-compiled C++ libraries are available on the Github Releases page (https://github.com/aewallin/opencamlib/releases).\nThis project also installs a OpenCAMLibConfig.cmake, which, if your project uses CMake, allows you to use ``find_package(OpenCAMLib REQUIRED)``.\n\nYou can see an example of that in use over here: ``examples/cpp/test/CMakeLists.txt``\n\n********************\nBuilding from Source\n********************\n\nHaving trouble with a pre-compiled library? Please report it to us.\nIf there are no pre-compiled libraries for your platform or architecture, or want to customize or package opencamlib, this is for you.\n\nOpenCAMLib uses functionality from a library called Boost.\nFor the Python library it uses an extra library called Boost.Python.\n\nOnly the Python bindings need Boost to be **compiled** (with Boost.Python).\nAll other libraries **DO NOT** need Boost to be compiled, in those cases, a headers only version will suffice.\nSo, if you are not compiling the Python libraries, simply download Boost, extract it into a folder, and tell CMake where to look for it.\n\nMake sure to download Boost from the boost.org downloads page, if you download it from github, you have to make sure to install the git submodules **and** build the headers.\n\nWe provide a ``install.sh`` script that helps with installation of dependencies and building OpenCAMLib libraries, you might want to take a look at it first.\nYou can run ``./install.sh --help`` to look at the available options, or inspect it's source code to find out more.\n\n============\nDependencies\n============\n\nTo compile OpenCAMLib, you need:\n\n- **C++ compiler** (It should at least support C++ 14)\n- **Git** (This is used for cloning the repository, and the emscripten SDK)\n- **CMake** (At least version 3.15)\n- **Boost** (When compiling the Python library, you have to **compile** Boost.Python for your Python version after installation)\n\nAt this time of writing, here are the packages to install:\n\nUbuntu Dependencies\n-------------------\n\n..  code-block:: shell\n\n    sudo apt install -y git cmake curl build-essential libboost-dev\n\nmacOS Dependencies\n------------------\n\n..  code-block:: shell\n\n    brew install git cmake curl boost python@3.11 boost-python3\n\nWindows Dependencies\n--------------------\n\nInstall\n\n- Visual Studio Build Tools (https://visualstudio.microsoft.com/visual-cpp-build-tools/)\n- Git (https://git-scm.com/download/win)\n- CMake (https://git-scm.com/download/win)\n- Boost (https://www.boost.org/users/download/)\n\nBy downloading the installers from the internet, or by using your package manager.\n\n================\nBuilding for C++\n================\n\nThe C++ library is the easiest to build, it only depends on Boost's headers.\nMake sure you have a compiler, git, cmake and Boost installed (or simply download and extract it somewhere).\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    cmake .. -D CXX_LIB=\"ON\"\n    make . # try make -j4 for a faster build if you have a multi-core machine\n    make install .\n\nWhen boost is not in a standard location, you can add the ``-D BOOST_ROOT=/path/to/boost`` option to the cmake command.\n\n=======================\nBuilding for Emscripten\n=======================\n\nTo compile the emscripten library, first download, install and activate it using the following commands:\n\n..  code-block:: shell\n\n    git clone https://github.com/emscripten-core/emsdk.git\n    cd emsdk\n    ./emsdk install latest\n    ./emsdk activate latest\n\nNow you can compile OpenCAMLib like this (make sure to replace the ``path/to/`` sections):\n\n..  code-block:: shell\n\n    source path/to/emsdk/emsdk_env.sh\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    emcmake cmake \\\n      -D CMAKE_BUILD_TYPE=\"RelWithDebInfo\" \\\n      -D BUILD_EMSCRIPTEN_LIB=\"ON\" \\\n      -D USE_OPENMP=\"OFF\" \\\n      -D CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/src/npmpackage/build\" \\\n      -D BOOST_ROOT=\"/path/to/boost\" \\\n      ..\n    emmake make # try emmake make -j4 for a faster build if you have a multi-core machine\n\nNote that ``USE_OPENMP`` has been turned off, OpenMP is not supported with Emscripten at the moment\n\n====================\nBuilding for Node.js\n====================\n\nTo compile the Node.js library, install the dependencies in ``src/nodejslib``:\n\n..  code-block:: shell\n\n    cd src/nodejslib\n    npm install\n\nNext, use cmake-js to compile the library:\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    ../src/nodejslib/node_modules/.bin/cmake-js \\\n      build \\\n      --directory \"..\" \\\n      --out \".\" \\\n      --parallel 4 \\\n      --CDBUILD_NODEJS_LIB=\"ON\" \\\n      --CDUSE_OPENMP=\"ON\" \\\n      --CDCMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/build/Release/$(node --print 'process.platform')-nodejs-$(node --print 'process.arch')\" \\\n      --CDBOOST_ROOT=\"/path/to/boost\" \\\n      --config \"Release\"\n\n===================\nBuilding for Python\n===================\n\nThe Python library can be compiled similarly to the C++ example above, however, this time Boost.Python has to be compiled first.\nMost systems have Boost.Python available as a download, but only for a specific Python version only (usually the latest Python version).\nThese might work if you are using Python from the same package provider, but, unfortunately, this is not a very reliable method, so compiling them yourself is usually the best option.\n\nFirst, download and extract Boost:\n\n..  code-block:: shell\n\n    curl \"https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz\" --output \"boost_1_80_0.tar.gz\" --location\n    tar -zxf boost_1_80_0.tar.gz -C /tmp/boost\n    cd /tmp/boost/boost_1_80_0\n\nNow we can compile it:\n\n..  code-block:: shell\n\n    echo \"using python ;\" > ./user-config.jam\n    ./bootstrap.sh\n    ./b2 \\\n      -a \\\n      threading=\"multi\" \\\n      -j4 \\\n      variant=\"release\" \\\n      link=\"static\" \\\n      address-model=\"64\" \\\n      architecture=\"x86\" \\\n      --layout=\"system\" \\\n      --with-python \\\n      --user-config=\"./user-config.jam\" \\\n      cxxflags=\"-fPIC\" \\\n      stage\n\nNote that you can customize the user-config.jam file to point it to your Python installation\n(see: https://www.boost.org/doc/libs/1_78_0/libs/python/doc/html/building/configuring_boost_build.html).\nYou should also specify the correct architecture and address-model.\nOn windows, make sure to use windows style paths, e.g. ``C:\\\\path\\\\to\\\\Python``\n\n*****\nUsage\n*****\n\nPlease take a look at the ``examples/`` folder on how to use OpenCAMLib.\nFor each language there is an example named ``test`` which calls all of the algorithms.\n\nThere is also some API documentation over here: https://opencamlib.readthedocs.io\n\n***************\nCommon Problems\n***************\n\nCompiling OpenCAMLib is unfortunately not very easy and there are many things that can go wrong.\nHere is a list of common problems and solutions.\n\n=================================================\nCould NOT find Boost (missing: Boost_INCLUDE_DIR)\n=================================================\n\nThis happens a lot, here are some of the reasons why this happens:\n\n**You don't have Boost installed.**\n\nIf you forgot to install boost, go ahead and download Boost from from their website: https://www.boost.org/users/download/ and extract it somewhere.\nNow, when compiling the C++ or node.js module, add the\n\n``-D BOOST_ROOT=/path/to/extracted/boost`` flag to the ``cmake ..`` command, or the.\n\n``--boost-prefix /path/to/extracted/boost`` flag to the ``./install.sh`` command\n\n**You installed Boost from Github.**\n\nThe boost that is hosted on Github does not have the headers yet! To compile those, you should run the following commands:\n\n..  code-block:: shell\n\n    ./bootstrap.sh\n    ./b2 headers\n\n**Your CMake version has a FindBoost module which is unaware of your Boost's version.**\n\nThe CMake module that looks for Boost, is usually not aware of the existence of the latest Boost versions.\nYou can help it by providing the version number of your Boost with the ``-D Boost_ADDITIONAL_VERSIONS=\"1.80.0\"`` flag.\nMake sure to change 1.80.0 with your version of Boost.\n\nIt can also be helpful to enable ``Boost_DEBUG`` in the CMake configuration.\n\n***************\nCross Compiling\n***************\n\nTo compile OpenCAMLib for other architectures, we recommend the following strategies.\nAlways make sure to compile Boost for the correct architecture as well!\n\n=====\nmacOS\n=====\n\nCross compiling on macOS is possible by setting the CMake ``CMAKE_OSX_ARCHITECTURES`` flag.\nWhen using the ``install.sh`` script, you can use the ``--macos-architecture`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=======\nWindows\n=======\n\nCross compiling on Windows is possible by using the \"Visual Studio\" generator (default) and by setting the CMake ``CMAKE_GENERATOR_PLATFORM`` flag.\nWhen using the ``install.sh`` script, you can use the ``--cmake-generator-platform`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=====\nLinux\n=====\n\nTo ensure that compiled libraries work on older linux versions, it has to be compiled with an older Glibc version.\nThe easiest way to accomplish this is by using Docker, there are images available especially for this purpose.\nWhen using the ``install.sh`` script, you can use the ``--docker-image`` flag which will make the command run in a container with the given image name.\n\nC++ docker image\n----------------\n\nWhen cross compiling the C++ library, make sure to use an old Glibc, this is included in the dockcross docker images.\nFor a list of supported architectures, take a look at:\n\nhttps://github.com/dockcross/dockcross#summary-cross-compilers\n\nNode.js docker image\n--------------------\n\nCross compilers for node.js are available here:\n\nhttps://github.com/prebuild/docker-images\n\nPython docker image\n-------------------\n\nCross compilers for python are here:\n\nhttps://github.com/pypa/manylinux#manylinux2014-centos-7-based\n\n*****\nLinks\n*****\n\n- repository https://github.com/aewallin/opencamlib\n- PPAs\n  - https://launchpad.net/~iacobs/+archive/ubuntu/cnc/\n  - https://launchpad.net/~neomilium/+archive/ubuntu/cam\n  - https://launchpad.net/~freecad-community/+archive/ubuntu/ppa\n  - (updated 2012) https://launchpad.net/~anders-e-e-wallin/+archive/ubuntu/cam\n- mailing-list http://groups.google.com/group/opencamlib\n- IRC-channel #cam on irc.freenode.net\n- coding standard (?) http://www.possibility.com/Cpp/CppCodingStandard.html\n\n*********************\nOrganization of Files\n*********************\n\n(generate this with 'tree -dL 2')::\n\n ├── docs                        documentation (not much here yet!)\n ├── examples                    c++, emscripten, nodejs and python examples\n ├── scripts                     CI scripts for installing and building ocl\n ├── src\n │   ├── algo                    algorithms under development\n │   ├── common                  common algorithms and data-structures\n │   ├── cutters                 cutter-classes\n │   ├── cxxlib                  c++ library cmake config\n │   ├── deb                     debian package cmake config\n │   ├── dropcutter              drop-cutter algorithms and operations\n │   ├── emscriptenlib           bindings for emscripten library\n │   ├── geo                     primitive geometry classes (point, triangle, stlsurf, etc.)\n │   ├── nodejslib               Node.js library bindings and cmake config\n │   ├── npmpackage              combined Node.js and emscripten wrappers, for publishing to npm\n │   ├── pythonlib               python library bindings and cmake config\n └── stl                         STL files for testing\n","readmeFilename":"README.rst","_id":"@opencamlib/opencamlib@2023.9.11-dev.325","_nodeVersion":"14.21.3","_npmVersion":"6.14.18","dist":{"integrity":"sha512-W4wiOxesvCIlQkKS4/qnyAEImjwJFzDlaKyocVSyZAOhpKzsoug1b7tuq/TaJqU3JOMdR6M0kkyt2gJBIjN0qA==","shasum":"5e015edc6cbcb9b780fd73bd1eb03dbf32ac75a6","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2023.9.11-dev.325.tgz","fileCount":89,"unpackedSize":43897705,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC2tBV+yUVZZ4xBlFgEV4vRMzVTOcwx12r+QZksn/jgbAiEAlV9Gtwg/WVx02srEEi9Sk2aor3ULbrYm69F2LNbPMbk="}]},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2023.9.11-dev.325_1694470499028_0.9763232849934496"},"_hasShrinkwrap":false},"2023.9.12-dev.326":{"name":"@opencamlib/opencamlib","version":"2023.9.12-dev.326","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"readme":"##########\nOpenCAMLib\n##########\n\n.. image:: https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg\n    :target: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html\n\n.. image:: https://github.com/aewallin/opencamlib/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/aewallin/opencamlib/actions/workflows/test.yml\n\n.. image:: https://readthedocs.org/projects/opencamlib/badge/?version=latest\n    :target: https://opencamlib.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n************\nIntroduction\n************\n\nOpenCAMLib (ocl) is a library for creating 3D toolpaths for CNC-machines such as mills and lathes.\nIt is written in C++ and has bindings for Python, Node.js and the browser.\nAt the moment it supports the following algorithms:\n\n===========\nDrop-cutter\n===========\n\nThe drop cutter algorithm drops a cutter, positioned at a predefined (x,y) location, until it touches the 3D model.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/drop-cutter.png?raw=true\n  :width: 200\n  :alt: Drop Cutter\n\n===========\nPush-cutter\n===========\n\nThe Push-cutter is used to create a Waterline toolpath that follows the shape of the model at a constant z-height in the xy-plane.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/push-cutter.png?raw=true\n  :width: 200\n  :alt: Push Cutter\n\n=======\nCutters\n=======\n\nThe algorithms listed above can be used with following cutters:\n\n- **CylCutter** (flat end mill / cylindrical)\n- **BallCutter** (ball end mill / spherical)\n- **BullCutter** (radius end mill / toroidal)\n- **ConeCutter** (tapered end mill / conical)\n- **CompositeCutter** (combinations of the above / compound)\n\nFrom August 2018 OpenCAMLib is released under LGPL license.\n\n**********************\nPre-compiled Libraries\n**********************\n\nOpenCAMLib provides pre-compiled C++, Node.js and Python libraries for the following platforms and architectures:\n\n+-------------+------------------+\n| **Windows** | ia32 / x64       |\n+-------------+------------------+\n| **macOS**   | x86_64 / arm64   |\n+-------------+------------------+\n| **Linux**   | x86_64 / aarch64 |\n+-------------+------------------+\n\n- The Python library is called ``opencamlib`` and is hosted on PyPi (pypi.org), precompiled libraries are available for Python v3.7 up to v3.11.\n- The Node.js + emscripten library is called ``@opencamlib/opencamlib`` and is hosted on npm (npmjs.org), precompiled libraries are available for Node-API v3 and up.\n- The C++ library is called ``libocl`` and is hosted on our Github Releases page.\n\n======\nPython\n======\n\nThe Python library (hosted on PyPi) can be installed like this:\n\n..  code-block:: shell\n\n    pip install opencamlib\n\nOn some platforms, pip is called pip3, you might have to run:\n\n..  code-block:: shell\n\n    pip3 install opencamlib\n\nNote that pip / pip3 is will install packages for to the system installation of Python, if you want to install a package in a custom Python installation that is not in your $PATH\n(for example, the Python which comes with Blender), you can install packages like so:\n\n..  code-block:: shell\n\n    /path/to/your/custom/python -m pip install opencamlib\n\nIf you don't know where Python is, but you have access to it's interpreter (FreeCAD and Blender both have a Python console), you can simply enter this command in there to install OpenCAMLib:\n\n..  code-block:: python\n\n    import sys; import subprocess; subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'opencamlib'])\n\n\n==========\nJavaScript\n==========\n\nThe JavaScript library (hosted on npm) works in Node.js and the browser (by leveraging emscripten / WASM) can be installed like this:\n\n..  code-block:: shell\n\n    npm install --save @opencamlib/opencamlib\n\nOr, using yarn:\n\n..  code-block:: shell\n\n    yarn add @opencamlib/opencamlib\n\nNote that it is not 100% feature complete and lacking some functionality still.\n\n===\nC++\n===\n\nPre-compiled C++ libraries are available on the Github Releases page (https://github.com/aewallin/opencamlib/releases).\nThis project also installs a OpenCAMLibConfig.cmake, which, if your project uses CMake, allows you to use ``find_package(OpenCAMLib REQUIRED)``.\n\nYou can see an example of that in use over here: ``examples/cpp/test/CMakeLists.txt``\n\n********************\nBuilding from Source\n********************\n\nHaving trouble with a pre-compiled library? Please report it to us.\nIf there are no pre-compiled libraries for your platform or architecture, or want to customize or package opencamlib, this is for you.\n\nOpenCAMLib uses functionality from a library called Boost.\nFor the Python library it uses an extra library called Boost.Python.\n\nOnly the Python bindings need Boost to be **compiled** (with Boost.Python).\nAll other libraries **DO NOT** need Boost to be compiled, in those cases, a headers only version will suffice.\nSo, if you are not compiling the Python libraries, simply download Boost, extract it into a folder, and tell CMake where to look for it.\n\nMake sure to download Boost from the boost.org downloads page, if you download it from github, you have to make sure to install the git submodules **and** build the headers.\n\nWe provide a ``install.sh`` script that helps with installation of dependencies and building OpenCAMLib libraries, you might want to take a look at it first.\nYou can run ``./install.sh --help`` to look at the available options, or inspect it's source code to find out more.\n\n============\nDependencies\n============\n\nTo compile OpenCAMLib, you need:\n\n- **C++ compiler** (It should at least support C++ 14)\n- **Git** (This is used for cloning the repository, and the emscripten SDK)\n- **CMake** (At least version 3.15)\n- **Boost** (When compiling the Python library, you have to **compile** Boost.Python for your Python version after installation)\n\nAt this time of writing, here are the packages to install:\n\nUbuntu Dependencies\n-------------------\n\n..  code-block:: shell\n\n    sudo apt install -y git cmake curl build-essential libboost-dev\n\nmacOS Dependencies\n------------------\n\n..  code-block:: shell\n\n    brew install git cmake curl boost python@3.11 boost-python3\n\nWindows Dependencies\n--------------------\n\nInstall\n\n- Visual Studio Build Tools (https://visualstudio.microsoft.com/visual-cpp-build-tools/)\n- Git (https://git-scm.com/download/win)\n- CMake (https://git-scm.com/download/win)\n- Boost (https://www.boost.org/users/download/)\n\nBy downloading the installers from the internet, or by using your package manager.\n\n================\nBuilding for C++\n================\n\nThe C++ library is the easiest to build, it only depends on Boost's headers.\nMake sure you have a compiler, git, cmake and Boost installed (or simply download and extract it somewhere).\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    cmake .. -D CXX_LIB=\"ON\"\n    make . # try make -j4 for a faster build if you have a multi-core machine\n    make install .\n\nWhen boost is not in a standard location, you can add the ``-D BOOST_ROOT=/path/to/boost`` option to the cmake command.\n\n=======================\nBuilding for Emscripten\n=======================\n\nTo compile the emscripten library, first download, install and activate it using the following commands:\n\n..  code-block:: shell\n\n    git clone https://github.com/emscripten-core/emsdk.git\n    cd emsdk\n    ./emsdk install latest\n    ./emsdk activate latest\n\nNow you can compile OpenCAMLib like this (make sure to replace the ``path/to/`` sections):\n\n..  code-block:: shell\n\n    source path/to/emsdk/emsdk_env.sh\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    emcmake cmake \\\n      -D CMAKE_BUILD_TYPE=\"RelWithDebInfo\" \\\n      -D BUILD_EMSCRIPTEN_LIB=\"ON\" \\\n      -D USE_OPENMP=\"OFF\" \\\n      -D CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/src/npmpackage/build\" \\\n      -D BOOST_ROOT=\"/path/to/boost\" \\\n      ..\n    emmake make # try emmake make -j4 for a faster build if you have a multi-core machine\n\nNote that ``USE_OPENMP`` has been turned off, OpenMP is not supported with Emscripten at the moment\n\n====================\nBuilding for Node.js\n====================\n\nTo compile the Node.js library, install the dependencies in ``src/nodejslib``:\n\n..  code-block:: shell\n\n    cd src/nodejslib\n    npm install\n\nNext, use cmake-js to compile the library:\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    ../src/nodejslib/node_modules/.bin/cmake-js \\\n      build \\\n      --directory \"..\" \\\n      --out \".\" \\\n      --parallel 4 \\\n      --CDBUILD_NODEJS_LIB=\"ON\" \\\n      --CDUSE_OPENMP=\"ON\" \\\n      --CDCMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/build/Release/$(node --print 'process.platform')-nodejs-$(node --print 'process.arch')\" \\\n      --CDBOOST_ROOT=\"/path/to/boost\" \\\n      --config \"Release\"\n\n===================\nBuilding for Python\n===================\n\nThe Python library can be compiled similarly to the C++ example above, however, this time Boost.Python has to be compiled first.\nMost systems have Boost.Python available as a download, but only for a specific Python version only (usually the latest Python version).\nThese might work if you are using Python from the same package provider, but, unfortunately, this is not a very reliable method, so compiling them yourself is usually the best option.\n\nFirst, download and extract Boost:\n\n..  code-block:: shell\n\n    curl \"https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz\" --output \"boost_1_80_0.tar.gz\" --location\n    tar -zxf boost_1_80_0.tar.gz -C /tmp/boost\n    cd /tmp/boost/boost_1_80_0\n\nNow we can compile it:\n\n..  code-block:: shell\n\n    echo \"using python ;\" > ./user-config.jam\n    ./bootstrap.sh\n    ./b2 \\\n      -a \\\n      threading=\"multi\" \\\n      -j4 \\\n      variant=\"release\" \\\n      link=\"static\" \\\n      address-model=\"64\" \\\n      architecture=\"x86\" \\\n      --layout=\"system\" \\\n      --with-python \\\n      --user-config=\"./user-config.jam\" \\\n      cxxflags=\"-fPIC\" \\\n      stage\n\nNote that you can customize the user-config.jam file to point it to your Python installation\n(see: https://www.boost.org/doc/libs/1_78_0/libs/python/doc/html/building/configuring_boost_build.html).\nYou should also specify the correct architecture and address-model.\nOn windows, make sure to use windows style paths, e.g. ``C:\\\\path\\\\to\\\\Python``\n\n*****\nUsage\n*****\n\nPlease take a look at the ``examples/`` folder on how to use OpenCAMLib.\nFor each language there is an example named ``test`` which calls all of the algorithms.\n\nThere is also some API documentation over here: https://opencamlib.readthedocs.io\n\n***************\nCommon Problems\n***************\n\nCompiling OpenCAMLib is unfortunately not very easy and there are many things that can go wrong.\nHere is a list of common problems and solutions.\n\n=================================================\nCould NOT find Boost (missing: Boost_INCLUDE_DIR)\n=================================================\n\nThis happens a lot, here are some of the reasons why this happens:\n\n**You don't have Boost installed.**\n\nIf you forgot to install boost, go ahead and download Boost from from their website: https://www.boost.org/users/download/ and extract it somewhere.\nNow, when compiling the C++ or node.js module, add the\n\n``-D BOOST_ROOT=/path/to/extracted/boost`` flag to the ``cmake ..`` command, or the.\n\n``--boost-prefix /path/to/extracted/boost`` flag to the ``./install.sh`` command\n\n**You installed Boost from Github.**\n\nThe boost that is hosted on Github does not have the headers yet! To compile those, you should run the following commands:\n\n..  code-block:: shell\n\n    ./bootstrap.sh\n    ./b2 headers\n\n**Your CMake version has a FindBoost module which is unaware of your Boost's version.**\n\nThe CMake module that looks for Boost, is usually not aware of the existence of the latest Boost versions.\nYou can help it by providing the version number of your Boost with the ``-D Boost_ADDITIONAL_VERSIONS=\"1.80.0\"`` flag.\nMake sure to change 1.80.0 with your version of Boost.\n\nIt can also be helpful to enable ``Boost_DEBUG`` in the CMake configuration.\n\n***************\nCross Compiling\n***************\n\nTo compile OpenCAMLib for other architectures, we recommend the following strategies.\nAlways make sure to compile Boost for the correct architecture as well!\n\n=====\nmacOS\n=====\n\nCross compiling on macOS is possible by setting the CMake ``CMAKE_OSX_ARCHITECTURES`` flag.\nWhen using the ``install.sh`` script, you can use the ``--macos-architecture`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=======\nWindows\n=======\n\nCross compiling on Windows is possible by using the \"Visual Studio\" generator (default) and by setting the CMake ``CMAKE_GENERATOR_PLATFORM`` flag.\nWhen using the ``install.sh`` script, you can use the ``--cmake-generator-platform`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=====\nLinux\n=====\n\nTo ensure that compiled libraries work on older linux versions, it has to be compiled with an older Glibc version.\nThe easiest way to accomplish this is by using Docker, there are images available especially for this purpose.\nWhen using the ``install.sh`` script, you can use the ``--docker-image`` flag which will make the command run in a container with the given image name.\n\nC++ docker image\n----------------\n\nWhen cross compiling the C++ library, make sure to use an old Glibc, this is included in the dockcross docker images.\nFor a list of supported architectures, take a look at:\n\nhttps://github.com/dockcross/dockcross#summary-cross-compilers\n\nNode.js docker image\n--------------------\n\nCross compilers for node.js are available here:\n\nhttps://github.com/prebuild/docker-images\n\nPython docker image\n-------------------\n\nCross compilers for python are here:\n\nhttps://github.com/pypa/manylinux#manylinux2014-centos-7-based\n\n*****\nLinks\n*****\n\n- repository https://github.com/aewallin/opencamlib\n- PPAs\n  - https://launchpad.net/~iacobs/+archive/ubuntu/cnc/\n  - https://launchpad.net/~neomilium/+archive/ubuntu/cam\n  - https://launchpad.net/~freecad-community/+archive/ubuntu/ppa\n  - (updated 2012) https://launchpad.net/~anders-e-e-wallin/+archive/ubuntu/cam\n- mailing-list http://groups.google.com/group/opencamlib\n- IRC-channel #cam on irc.freenode.net\n- coding standard (?) http://www.possibility.com/Cpp/CppCodingStandard.html\n\n*********************\nOrganization of Files\n*********************\n\n(generate this with 'tree -dL 2')::\n\n ├── docs                        documentation (not much here yet!)\n ├── examples                    c++, emscripten, nodejs and python examples\n ├── scripts                     CI scripts for installing and building ocl\n ├── src\n │   ├── algo                    algorithms under development\n │   ├── common                  common algorithms and data-structures\n │   ├── cutters                 cutter-classes\n │   ├── cxxlib                  c++ library cmake config\n │   ├── deb                     debian package cmake config\n │   ├── dropcutter              drop-cutter algorithms and operations\n │   ├── emscriptenlib           bindings for emscripten library\n │   ├── geo                     primitive geometry classes (point, triangle, stlsurf, etc.)\n │   ├── nodejslib               Node.js library bindings and cmake config\n │   ├── npmpackage              combined Node.js and emscripten wrappers, for publishing to npm\n │   ├── pythonlib               python library bindings and cmake config\n └── stl                         STL files for testing\n","readmeFilename":"README.rst","_id":"@opencamlib/opencamlib@2023.9.12-dev.326","_nodeVersion":"14.21.3","_npmVersion":"6.14.18","dist":{"integrity":"sha512-C2tEvkJoO0LwyyaZgVNvus2lofKyJU9ptopTfXdsV6sjr00hI3sYS1vNy7aJJCvBhmEgGMeMQmSgV7CipylOvg==","shasum":"7f08957e2d0f2475f07860de833fd402eef43c98","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2023.9.12-dev.326.tgz","fileCount":89,"unpackedSize":42260329,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGYP79GhDHW9/LrIny1g6sPPF9MAfHMGOfVDsKbEzTRWAiA4NYBjOrtUP3YJSZS7suhAHr51WAqIqdt3EBOevo5X6g=="}]},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2023.9.12-dev.326_1694510176833_0.51742768638788"},"_hasShrinkwrap":false},"2023.10.28-dev.327":{"name":"@opencamlib/opencamlib","version":"2023.10.28-dev.327","description":"opencamlib for the web compiled with emscripten","main":"./lib/napi/index.js","browser":"./browser.js","scripts":{"start":"tsc -w","build-node":"tsc","build-emscripten":"tsc && browserify -p browserify-derequire --standalone ocl lib/emscripten/index.js > browser.js","build":"npm run build-emscripten"},"keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"homepage":"https://github.com/aewallin/opencamlib#readme","author":{"name":"Koen Schmeets"},"license":"LGPL-3.0","devDependencies":{"@types/node":"^18.11.11","browserify":"^17.0.0","browserify-derequire":"^1.1.1","isomorphic-fetch":"^3.0.0","typescript":"^4.9.3"},"dependencies":{"stl":"^1.1.1"},"readme":"##########\nOpenCAMLib\n##########\n\n.. image:: https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg\n    :target: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html\n\n.. image:: https://github.com/aewallin/opencamlib/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/aewallin/opencamlib/actions/workflows/test.yml\n\n.. image:: https://readthedocs.org/projects/opencamlib/badge/?version=latest\n    :target: https://opencamlib.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n************\nIntroduction\n************\n\nOpenCAMLib (ocl) is a library for creating 3D toolpaths for CNC-machines such as mills and lathes.\nIt is written in C++ and has bindings for Python, Node.js and the browser.\nAt the moment it supports the following algorithms:\n\n===========\nDrop-cutter\n===========\n\nThe drop cutter algorithm drops a cutter, positioned at a predefined (x,y) location, until it touches the 3D model.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/drop-cutter.png?raw=true\n  :width: 200\n  :alt: Drop Cutter\n\n===========\nPush-cutter\n===========\n\nThe Push-cutter is used to create a Waterline toolpath that follows the shape of the model at a constant z-height in the xy-plane.\n\n.. image:: https://github.com/aewallin/opencamlib/blob/master/docs/push-cutter.png?raw=true\n  :width: 200\n  :alt: Push Cutter\n\n=======\nCutters\n=======\n\nThe algorithms listed above can be used with following cutters:\n\n- **CylCutter** (flat end mill / cylindrical)\n- **BallCutter** (ball end mill / spherical)\n- **BullCutter** (radius end mill / toroidal)\n- **ConeCutter** (tapered end mill / conical)\n- **CompositeCutter** (combinations of the above / compound)\n\nFrom August 2018 OpenCAMLib is released under LGPL license.\n\n**********************\nPre-compiled Libraries\n**********************\n\nOpenCAMLib provides pre-compiled C++, Node.js and Python libraries for the following platforms and architectures:\n\n+-------------+------------------+\n| **Windows** | ia32 / x64       |\n+-------------+------------------+\n| **macOS**   | x86_64 / arm64   |\n+-------------+------------------+\n| **Linux**   | x86_64 / aarch64 |\n+-------------+------------------+\n\n- The Python library is called ``opencamlib`` and is hosted on PyPi (pypi.org), precompiled libraries are available for Python v3.7 up to v3.11.\n- The Node.js + emscripten library is called ``@opencamlib/opencamlib`` and is hosted on npm (npmjs.org), precompiled libraries are available for Node-API v3 and up.\n- The C++ library is called ``libocl`` and is hosted on our Github Releases page.\n\n======\nPython\n======\n\nThe Python library (hosted on PyPi) can be installed like this:\n\n..  code-block:: shell\n\n    pip install opencamlib\n\nOn some platforms, pip is called pip3, you might have to run:\n\n..  code-block:: shell\n\n    pip3 install opencamlib\n\nNote that pip / pip3 is will install packages for to the system installation of Python, if you want to install a package in a custom Python installation that is not in your $PATH\n(for example, the Python which comes with Blender), you can install packages like so:\n\n..  code-block:: shell\n\n    /path/to/your/custom/python -m pip install opencamlib\n\nIf you don't know where Python is, but you have access to it's interpreter (FreeCAD and Blender both have a Python console), you can simply enter this command in there to install OpenCAMLib:\n\n..  code-block:: python\n\n    import sys; import subprocess; subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'opencamlib'])\n\n\n==========\nJavaScript\n==========\n\nThe JavaScript library (hosted on npm) works in Node.js and the browser (by leveraging emscripten / WASM) can be installed like this:\n\n..  code-block:: shell\n\n    npm install --save @opencamlib/opencamlib\n\nOr, using yarn:\n\n..  code-block:: shell\n\n    yarn add @opencamlib/opencamlib\n\nNote that it is not 100% feature complete and lacking some functionality still.\n\n===\nC++\n===\n\nPre-compiled C++ libraries are available on the Github Releases page (https://github.com/aewallin/opencamlib/releases).\nThis project also installs a OpenCAMLibConfig.cmake, which, if your project uses CMake, allows you to use ``find_package(OpenCAMLib REQUIRED)``.\n\nYou can see an example of that in use over here: ``examples/cpp/test/CMakeLists.txt``\n\n********************\nBuilding from Source\n********************\n\nHaving trouble with a pre-compiled library? Please report it to us.\nIf there are no pre-compiled libraries for your platform or architecture, or want to customize or package opencamlib, this is for you.\n\nOpenCAMLib uses functionality from a library called Boost.\nFor the Python library it uses an extra library called Boost.Python.\n\nOnly the Python bindings need Boost to be **compiled** (with Boost.Python).\nAll other libraries **DO NOT** need Boost to be compiled, in those cases, a headers only version will suffice.\nSo, if you are not compiling the Python libraries, simply download Boost, extract it into a folder, and tell CMake where to look for it.\n\nMake sure to download Boost from the boost.org downloads page, if you download it from github, you have to make sure to install the git submodules **and** build the headers.\n\nWe provide a ``install.sh`` script that helps with installation of dependencies and building OpenCAMLib libraries, you might want to take a look at it first.\nYou can run ``./install.sh --help`` to look at the available options, or inspect it's source code to find out more.\n\n============\nDependencies\n============\n\nTo compile OpenCAMLib, you need:\n\n- **C++ compiler** (It should at least support C++ 14)\n- **Git** (This is used for cloning the repository, and the emscripten SDK)\n- **CMake** (At least version 3.15)\n- **Boost** (When compiling the Python library, you have to **compile** Boost.Python for your Python version after installation)\n\nAt this time of writing, here are the packages to install:\n\nUbuntu Dependencies\n-------------------\n\n..  code-block:: shell\n\n    sudo apt install -y git cmake curl build-essential libboost-dev\n\nmacOS Dependencies\n------------------\n\n..  code-block:: shell\n\n    brew install git cmake curl boost python@3.11 boost-python3\n\nWindows Dependencies\n--------------------\n\nInstall\n\n- Visual Studio Build Tools (https://visualstudio.microsoft.com/visual-cpp-build-tools/)\n- Git (https://git-scm.com/download/win)\n- CMake (https://git-scm.com/download/win)\n\nBy downloading the installers from the internet, or by using your package manager.\n\n================\nBuilding for C++\n================\n\nThe C++ library is the easiest to build, it only depends on Boost's headers.\nMake sure you have a compiler, git, cmake and Boost installed (or simply download and extract it somewhere).\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    cmake .. -D CXX_LIB=\"ON\"\n    make . # try make -j4 for a faster build if you have a multi-core machine\n    make install .\n\nWhen boost is not in a standard location, you can add the ``-D BOOST_ROOT=/path/to/boost`` option to the cmake command.\n\n=======================\nBuilding for Emscripten\n=======================\n\nTo compile the emscripten library, first download, install and activate it using the following commands:\n\n..  code-block:: shell\n\n    git clone https://github.com/emscripten-core/emsdk.git\n    cd emsdk\n    ./emsdk install latest\n    ./emsdk activate latest\n\nNow you can compile OpenCAMLib like this (make sure to replace the ``path/to/`` sections):\n\n..  code-block:: shell\n\n    source path/to/emsdk/emsdk_env.sh\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    emcmake cmake \\\n      -D CMAKE_BUILD_TYPE=\"Release\" \\\n      -D BUILD_EMSCRIPTEN_LIB=\"ON\" \\\n      -D USE_OPENMP=\"OFF\" \\\n      -D CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/src/npmpackage/build\" \\\n      -D BOOST_ROOT=\"/path/to/boost\" \\\n      ..\n    emmake make # try emmake make -j4 for a faster build if you have a multi-core machine\n\nNote that ``USE_OPENMP`` has been turned off, OpenMP is not supported with Emscripten at the moment\n\n====================\nBuilding for Node.js\n====================\n\nTo compile the Node.js library, install the dependencies in ``src/nodejslib``:\n\n..  code-block:: shell\n\n    cd src/nodejslib\n    npm install\n\nNext, use cmake-js to compile the library:\n\n..  code-block:: shell\n\n    git clone https://github.com/aewallin/opencamlib\n    cd opencamlib\n    mkdir build\n    cd build\n    ../src/nodejslib/node_modules/.bin/cmake-js \\\n      build \\\n      --directory \"..\" \\\n      --out \".\" \\\n      --parallel 4 \\\n      --CD BUILD_NODEJS_LIB=\"ON\" \\\n      --CD USE_OPENMP=\"ON\" \\\n      --CD CMAKE_INSTALL_PREFIX=\"/path/to/opencamlib/build/Release/$(node --print 'process.platform')-nodejs-$(node --print 'process.arch')\" \\\n      --CD BOOST_ROOT=\"/path/to/boost\" \\\n      --config \"Release\"\n\n===================\nBuilding for Python\n===================\n\nThe Python library can be compiled similarly to the C++ example above, however, this time Boost.Python has to be compiled first.\nMost systems have Boost.Python available as a download, but only for a specific Python version only (usually the latest Python version).\nThese might work if you are using Python from the same package provider, but, unfortunately, this is not a very reliable method, so compiling them yourself is usually the best option.\n\nFirst, download and extract Boost:\n\n..  code-block:: shell\n\n    curl \"https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz\" --output \"boost_1_80_0.tar.gz\" --location\n    tar -zxf boost_1_80_0.tar.gz -C /tmp/boost\n    cd /tmp/boost/boost_1_80_0\n\nNow we can compile it:\n\n..  code-block:: shell\n\n    echo \"using python ;\" > ./user-config.jam\n    ./bootstrap.sh\n    ./b2 \\\n      -a \\\n      threading=\"multi\" \\\n      -j4 \\\n      variant=\"release\" \\\n      link=\"static\" \\\n      address-model=\"64\" \\\n      architecture=\"x86\" \\\n      --layout=\"system\" \\\n      --with-python \\\n      --user-config=\"./user-config.jam\" \\\n      cxxflags=\"-fPIC\" \\\n      stage\n\nNote that you can customize the user-config.jam file to point it to your Python installation\n(see: https://www.boost.org/doc/libs/1_78_0/libs/python/doc/html/building/configuring_boost_build.html).\nYou should also specify the correct architecture and address-model.\nOn windows, make sure to use windows style paths, e.g. ``C:\\\\path\\\\to\\\\Python``\n\n*****\nUsage\n*****\n\nPlease take a look at the ``examples/`` folder on how to use OpenCAMLib.\nFor each language there is an example named ``test`` which calls all of the algorithms.\n\nThere is also some API documentation over here: https://opencamlib.readthedocs.io\n\n***************\nCommon Problems\n***************\n\nCompiling OpenCAMLib is unfortunately not very easy and there are many things that can go wrong.\nHere is a list of common problems and solutions.\n\n=================================================\nCould NOT find Boost (missing: Boost_INCLUDE_DIR)\n=================================================\n\nThis happens a lot, here are some of the reasons why this happens:\n\n**You don't have Boost installed.**\n\nIf you forgot to install boost, go ahead and download Boost from from their website: https://www.boost.org/users/download/ and extract it somewhere.\nNow, when compiling the C++ or node.js module, add the\n\n``-D BOOST_ROOT=/path/to/extracted/boost`` flag to the ``cmake ..`` command, or the.\n\n``--boost-prefix /path/to/extracted/boost`` flag to the ``./install.sh`` command\n\n**You installed Boost from Github.**\n\nThe boost that is hosted on Github does not have the headers yet! To compile those, you should run the following commands:\n\n..  code-block:: shell\n\n    ./bootstrap.sh\n    ./b2 headers\n\n**Your CMake version has a FindBoost module which is unaware of your Boost's version.**\n\nThe CMake module that looks for Boost, is usually not aware of the existence of the latest Boost versions.\nYou can help it by providing the version number of your Boost with the ``-D Boost_ADDITIONAL_VERSIONS=\"1.80.0\"`` flag.\nMake sure to change 1.80.0 with your version of Boost.\n\nIt can also be helpful to enable ``Boost_DEBUG`` in the CMake configuration.\n\n***************\nCross Compiling\n***************\n\nTo compile OpenCAMLib for other architectures, we recommend the following strategies.\nAlways make sure to compile Boost for the correct architecture as well!\n\n=====\nmacOS\n=====\n\nCross compiling on macOS is possible by setting the CMake ``CMAKE_OSX_ARCHITECTURES`` flag.\nWhen using the ``install.sh`` script, you can use the ``--macos-architecture`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=======\nWindows\n=======\n\nCross compiling on Windows is possible by using the \"Visual Studio\" generator (default) and by setting the CMake ``CMAKE_GENERATOR_PLATFORM`` flag.\nWhen using the ``install.sh`` script, you can use the ``--cmake-generator-platform`` flag to accomplish the same thing.\nMake sure to take a look at the other ``--*-architecture`` flags when cross compiling.\n\n=====\nLinux\n=====\n\nTo ensure that compiled libraries work on older linux versions, it has to be compiled with an older Glibc version.\nThe easiest way to accomplish this is by using Docker, there are images available especially for this purpose.\nWhen using the ``install.sh`` script, you can use the ``--docker-image`` flag which will make the command run in a container with the given image name.\n\nC++ docker image\n----------------\n\nWhen cross compiling the C++ library, make sure to use an old Glibc, this is included in the dockcross docker images.\nFor a list of supported architectures, take a look at:\n\nhttps://github.com/dockcross/dockcross#summary-cross-compilers\n\nNode.js docker image\n--------------------\n\nCross compilers for node.js are available here:\n\nhttps://github.com/prebuild/docker-images\n\nPython docker image\n-------------------\n\nCross compilers for python are here:\n\nhttps://github.com/pypa/manylinux#manylinux2014-centos-7-based\n\n*****\nLinks\n*****\n\n- repository https://github.com/aewallin/opencamlib\n- PPAs\n  - https://launchpad.net/~iacobs/+archive/ubuntu/cnc/\n  - https://launchpad.net/~neomilium/+archive/ubuntu/cam\n  - https://launchpad.net/~freecad-community/+archive/ubuntu/ppa\n  - (updated 2012) https://launchpad.net/~anders-e-e-wallin/+archive/ubuntu/cam\n- mailing-list http://groups.google.com/group/opencamlib\n- IRC-channel #cam on irc.freenode.net\n- coding standard (?) http://www.possibility.com/Cpp/CppCodingStandard.html\n\n*********************\nOrganization of Files\n*********************\n\n(generate this with 'tree -dL 2')::\n\n ├── docs                        documentation (not much here yet!)\n ├── examples                    c++, emscripten, nodejs and python examples\n ├── scripts                     CI scripts for installing and building ocl\n ├── src\n │   ├── algo                    algorithms under development\n │   ├── common                  common algorithms and data-structures\n │   ├── cutters                 cutter-classes\n │   ├── cxxlib                  c++ library cmake config\n │   ├── deb                     debian package cmake config\n │   ├── dropcutter              drop-cutter algorithms and operations\n │   ├── emscriptenlib           bindings for emscripten library\n │   ├── geo                     primitive geometry classes (point, triangle, stlsurf, etc.)\n │   ├── nodejslib               Node.js library bindings and cmake config\n │   ├── npmpackage              combined Node.js and emscripten wrappers, for publishing to npm\n │   ├── pythonlib               python library bindings and cmake config\n └── stl                         STL files for testing\n","readmeFilename":"README.rst","_id":"@opencamlib/opencamlib@2023.10.28-dev.327","_nodeVersion":"14.21.3","_npmVersion":"6.14.18","dist":{"integrity":"sha512-oSc+J7JZf8eUJwJMzRLDy5OLoqvPYYxCRt1jyk9U2uZEvamw/YQyIJZOaJ6u0lW324Nh5HjII0EfmRX0z12bGw==","shasum":"150723092d3e23adaf9fd0ed0490999bfa0e7885","tarball":"https://registry.npmjs.org/@opencamlib/opencamlib/-/opencamlib-2023.10.28-dev.327.tgz","fileCount":72,"unpackedSize":39379557,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCgQlbu9ww3oyxQ0VmI+QM6P0MuTY3zd7HAJP7F/zTl2AIgMOGz/3gAxtOZplcx+LvsdOH0TcAVtLZ/KTVACQNRNg0="}]},"_npmUser":{"name":"vespakoen","email":"koen@schmeets.de"},"directories":{},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opencamlib_2023.10.28-dev.327_1698464586135_0.5863161336631286"},"_hasShrinkwrap":false}},"time":{"created":"2022-12-06T15:16:36.251Z","0.0.10":"2022-12-06T15:16:36.633Z","modified":"2023-10-28T03:43:07.075Z","0.0.11":"2022-12-06T15:19:54.183Z","0.0.12":"2022-12-07T20:22:58.989Z","0.0.13":"2022-12-08T01:56:58.556Z","2022.12.13":"2022-12-13T01:11:43.375Z","2022.12.13-dev.285":"2022-12-13T15:16:38.156Z","2022.12.13-dev.286":"2022-12-13T17:37:09.107Z","2022.12.13-dev.287":"2022-12-13T19:07:20.874Z","2022.12.14-dev.288":"2022-12-14T10:56:37.306Z","2022.12.17-dev.289":"2022-12-17T14:19:14.383Z","2022.12.17-dev.290":"2022-12-17T14:35:14.879Z","2022.12.17":"2022-12-17T15:21:32.022Z","2022.12.18":"2022-12-18T12:27:43.340Z","2023.1.9-dev.296":"2023-01-09T11:02:55.474Z","2023.1.9-dev.297":"2023-01-09T12:00:45.641Z","2023.1.10-dev.299":"2023-01-10T12:01:24.034Z","2023.1.11-dev.300":"2023-01-11T11:55:54.801Z","2023.1.11-dev.301":"2023-01-11T12:40:35.851Z","2023.1.11":"2023-01-11T12:59:05.473Z","2023.1.28-dev.303":"2023-01-28T08:36:30.528Z","2023.1.28-dev.304":"2023-01-28T08:47:27.359Z","2023.3.15-dev.305":"2023-03-15T18:08:06.574Z","2023.9.11-dev.316":"2023-09-11T09:43:34.097Z","2023.9.11-dev.317":"2023-09-11T10:17:30.132Z","2023.9.11-dev.318":"2023-09-11T10:56:08.445Z","2023.9.11-dev.319":"2023-09-11T18:05:46.180Z","2023.9.11-dev.320":"2023-09-11T18:56:32.382Z","2023.9.11-dev.324":"2023-09-11T21:24:10.627Z","2023.9.11-dev.325":"2023-09-11T22:14:59.464Z","2023.9.12-dev.326":"2023-09-12T09:16:17.371Z","2023.10.28-dev.327":"2023-10-28T03:43:06.825Z"},"maintainers":[{"name":"aewallin","email":"anders.e.e.wallin@gmail.com"},{"name":"vespakoen","email":"koen@schmeets.de"}],"description":"opencamlib for the web compiled with emscripten","homepage":"https://github.com/aewallin/opencamlib#readme","keywords":["opencamlib","cam","cnc","waterline","push cutter","drop cutter"],"repository":{"type":"git","url":"git+https://github.com/aewallin/opencamlib.git"},"author":{"name":"Koen Schmeets"},"bugs":{"url":"https://github.com/aewallin/opencamlib/issues"},"license":"LGPL-3.0","readme":"","readmeFilename":""}