From 17709551dd8e4429019fa6418c824954b944843d Mon Sep 17 00:00:00 2001 From: Kurt Hutten Date: Sun, 10 Oct 2021 11:49:36 +1100 Subject: [PATCH] Update CadHub after anaconda Related to #547 --- app/api/src/docker/cadquery/runCQ.ts | 31 +++++++----- .../{ => cadQuery}/cadQueryController.ts | 13 ++--- .../cadPackages/cadQuery/cadQueryParams.ts | 49 +++++++++++++++++++ app/web/src/helpers/cadPackages/index.ts | 2 +- 4 files changed, 76 insertions(+), 19 deletions(-) rename app/web/src/helpers/cadPackages/{ => cadQuery}/cadQueryController.ts (79%) create mode 100644 app/web/src/helpers/cadPackages/cadQuery/cadQueryParams.ts diff --git a/app/api/src/docker/cadquery/runCQ.ts b/app/api/src/docker/cadquery/runCQ.ts index 99e9af2..01e761a 100644 --- a/app/api/src/docker/cadquery/runCQ.ts +++ b/app/api/src/docker/cadquery/runCQ.ts @@ -4,38 +4,45 @@ import { readFile } from 'fs/promises' export const runCQ = async ({ file, - settings: { deflection = 0.3 } = {}, + settings: { deflection = 0.3, parameters } = {}, } = {}) => { const tempFile = await writeFiles( - [{ file, fileName: 'main.py' }], + [ + { file, fileName: 'main.py' }, + { + file: JSON.stringify(parameters), + fileName: 'params.json', + } + ], 'a' + nanoid() // 'a' ensure nothing funny happens if it start with a bad character like "-", maybe I should pick a safer id generator :shrug: ) const fullPath = `/tmp/${tempFile}/output.gz` const stlPath = `/tmp/${tempFile}/output.stl` - const customizerPath = `/tmp/${tempFile}/customizer.param` - const command = [ + const customizerPath = `/tmp/${tempFile}/customizer.json` + const mainCommand = [ `./cq-cli/cq-cli.py`, `--codec stl`, `--infile /tmp/${tempFile}/main.py`, `--outfile ${stlPath}`, `--outputopts "deflection:${deflection};angularDeflection:${deflection};"`, - `--params ${customizerPath}`, + `--params /tmp/${tempFile}/params.json`, ].join(' ') - const command2 = [ - `cq-cli/cq-cli`, + const customizerCommand = [ + `./cq-cli/cq-cli.py`, `--getparams true`, `--infile /tmp/${tempFile}/main.py`, `--outfile ${customizerPath}`, - ] - console.log('command', command) + ].join(' ') + console.log('command', mainCommand) let consoleMessage = '' try { - consoleMessage = await runCommand(command, 30000) - const consoleMessage2 = await runCommand(command2, 30000) + ;([consoleMessage] = await Promise.all([ + runCommand(mainCommand, 30000), + runCommand(customizerCommand, 30000) + ])) const params = JSON.parse( await readFile(customizerPath, { encoding: 'ascii'}) ) - console.log('params', params) await writeFiles( [ { diff --git a/app/web/src/helpers/cadPackages/cadQueryController.ts b/app/web/src/helpers/cadPackages/cadQuery/cadQueryController.ts similarity index 79% rename from app/web/src/helpers/cadPackages/cadQueryController.ts rename to app/web/src/helpers/cadPackages/cadQuery/cadQueryController.ts index d9f30e2..44ddc5d 100644 --- a/app/web/src/helpers/cadPackages/cadQueryController.ts +++ b/app/web/src/helpers/cadPackages/cadQuery/cadQueryController.ts @@ -7,15 +7,17 @@ import { RenderArgs, DefaultKernelExport, splitGziped, -} from './common' +} from '../common' +import { CadQueryToCadhubParams } from './cadQueryParams' export const render: DefaultKernelExport['render'] = async ({ code, - settings: { quality = 'low' }, + settings: { quality = 'low', parameters }, }: RenderArgs) => { const body = JSON.stringify({ settings: { deflection: quality === 'low' ? 0.35 : 0.11, + parameters, }, file: code, }) @@ -49,16 +51,15 @@ export const render: DefaultKernelExport['render'] = async ({ data: await stlToGeometry(window.URL.createObjectURL(blob)), consoleMessage, date: new Date(), - customizerParams: customizerParams, + customizerParams: CadQueryToCadhubParams([customizerParams]), // TODO, should already be an array and not need to be wrapped in one. }) } catch (e) { return createUnhealthyResponse(new Date()) } } -const openscad: DefaultKernelExport = { +const cadQuery: DefaultKernelExport = { render, - // more functions to come } -export default openscad +export default cadQuery diff --git a/app/web/src/helpers/cadPackages/cadQuery/cadQueryParams.ts b/app/web/src/helpers/cadPackages/cadQuery/cadQueryParams.ts new file mode 100644 index 0000000..90e94da --- /dev/null +++ b/app/web/src/helpers/cadPackages/cadQuery/cadQueryParams.ts @@ -0,0 +1,49 @@ +import { CadhubParams } from 'src/components/Customizer/customizerConverter' + +interface CadQueryParamsBase { + name: string + initial: number | string + type?: 'number' +} + +interface CadQueryNumberParam extends CadQueryParamsBase { + type: 'number' + initial: number +} + +interface CadQueryStringParam extends CadQueryParamsBase { + initial: string +} + +export type CadQueryStringParams = + | CadQueryNumberParam + | CadQueryStringParam + + +export function CadQueryToCadhubParams( + input: CadQueryStringParams[] +): CadhubParams[] { + return input + .map((param): CadhubParams => { + const common: { caption: string; name: string } = { + caption: '', + name: param.name, + } + if(param.type === 'number') { + return { + type: 'number', + input: 'default-number', + ...common, + initial: Number(param.initial), + } + } + return { + type: 'string', + input: 'default-string', + ...common, + initial: String(param.initial), + } + }) + .filter((a) => a) +} + diff --git a/app/web/src/helpers/cadPackages/index.ts b/app/web/src/helpers/cadPackages/index.ts index f1d3053..ea420c6 100644 --- a/app/web/src/helpers/cadPackages/index.ts +++ b/app/web/src/helpers/cadPackages/index.ts @@ -5,7 +5,7 @@ import openscad from './openScad/openScadController' import openScadGuide from 'src/helpers/cadPackages/openScad/userGuide.md' import openScadInitialCode from 'src/helpers/cadPackages/openScad/initialCode.scad' -import cadquery from './cadQueryController' +import cadquery from './cadQuery/cadQueryController' import cadQueryGuide from 'src/helpers/cadPackages/cadQuery/userGuide.md' import cadQueryInitialCode from 'src/helpers/cadPackages/cadQuery/initialCode.py'