diff --git a/app/api/src/docker/cadquery/runCQ.js b/app/api/src/docker/cadquery/runCQ.js index 98b6b1b..8bf1867 100644 --- a/app/api/src/docker/cadquery/runCQ.js +++ b/app/api/src/docker/cadquery/runCQ.js @@ -7,7 +7,14 @@ module.exports.runCQ = async ({ } = {}) => { const tempFile = await makeFile(file, '.py', nanoid) const fullPath = `/tmp/${tempFile}/output.stl` - const command = `cq-cli/cq-cli --codec stl --infile /tmp/${tempFile}/main.py --outfile ${fullPath} --outputopts "deflection:${deflection};angularDeflection:${deflection};"` + const command = [ + `cq-cli/cq-cli`, + `--codec stl`, + `--infile /tmp/${tempFile}/main.py`, + `--outfile ${fullPath}`, + `--outputopts "deflection:${deflection};angularDeflection:${deflection};"`, + `&& gzip ${fullPath}`, + ].join(' ') console.log('command', command) try { diff --git a/app/api/src/docker/common/utils.js b/app/api/src/docker/common/utils.js index d2be437..0fab7ea 100644 --- a/app/api/src/docker/common/utils.js +++ b/app/api/src/docker/common/utils.js @@ -117,7 +117,7 @@ async function storeAssetAndReturnUrl({ let buffer try { - buffer = await readFile(fullPath) + buffer = await readFile(`${fullPath}.gz`) } catch (e) { console.log('read file error', e) const response = { @@ -134,6 +134,8 @@ async function storeAssetAndReturnUrl({ Key: key, Body: buffer, CacheControl: `max-age=${FiveDays}`, // browser caching to stop downloads of the same part + ContentType: 'text/stl', + ContentEncoding: 'gzip', Metadata: putConsoleMessageInMetadata(consoleMessage), }) .promise() diff --git a/app/api/src/docker/openscad/runScad.js b/app/api/src/docker/openscad/runScad.js index 4a4db3c..6e69122 100644 --- a/app/api/src/docker/openscad/runScad.js +++ b/app/api/src/docker/openscad/runScad.js @@ -1,6 +1,8 @@ const { makeFile, runCommand } = require('../common/utils') const { nanoid } = require('nanoid') +const OPENSCAD_COMMON = `xvfb-run --auto-servernum --server-args "-screen 0 1024x768x24" openscad` + /** Removes our generated/hash filename with just "main.scad", so that it's a nice message in the IDE */ const cleanOpenScadError = (error) => error.replace(/["|']\/tmp\/.+\/main.scad["|']/g, "'main.scad'") @@ -21,7 +23,15 @@ module.exports.runScad = async ({ const { x: px, y: py, z: pz } = position const cameraArg = `--camera=${px},${py},${pz},${rx},${ry},${rz},${dist}` const fullPath = `/tmp/${tempFile}/output.png` - const command = `xvfb-run --auto-servernum --server-args "-screen 0 1024x768x24" openscad -o ${fullPath} ${cameraArg} --imgsize=${x},${y} --colorscheme CadHub /tmp/${tempFile}/main.scad` + const command = [ + OPENSCAD_COMMON, + `-o ${fullPath}`, + cameraArg, + `--imgsize=${x},${y}`, + `--colorscheme CadHub`, + `/tmp/${tempFile}/main.scad`, + `&& gzip ${fullPath}`, + ].join(' ') console.log('command', command) try { @@ -36,12 +46,17 @@ module.exports.runScad = async ({ module.exports.stlExport = async ({ file } = {}) => { const tempFile = await makeFile(file, '.scad', nanoid) const fullPath = `/tmp/${tempFile}/output.stl` + const command = [ + OPENSCAD_COMMON, + `--export-format=binstl`, + `-o ${fullPath}`, + `/tmp/${tempFile}/main.scad`, + `&& gzip ${fullPath}`, + ].join(' ') try { - const consoleMessage = await runCommand( - `xvfb-run --auto-servernum --server-args "-screen 0 1024x768x24" openscad -o ${fullPath} /tmp/${tempFile}/main.scad`, - 60000 // lambda will time out before this, we might need to look at background jobs if we do git integration stl generation - ) + // lambda will time out before this, we might need to look at background jobs if we do git integration stl generation + const consoleMessage = await runCommand(command, 60000) return { consoleMessage, fullPath } } catch (error) { return { error, fullPath } diff --git a/app/web/src/helpers/cadPackages/cadQueryController.js b/app/web/src/helpers/cadPackages/cadQueryController.js index 17fd868..0097483 100644 --- a/app/web/src/helpers/cadPackages/cadQueryController.js +++ b/app/web/src/helpers/cadPackages/cadQueryController.js @@ -9,7 +9,7 @@ import { export const render = async ({ code }) => { const body = JSON.stringify({ settings: { - deflection: 0.2, + deflection: 0.15, }, file: code, })