Add customizer support for OpenSCAD

This also includes sending metadata and part of the concatenated gzip,
not in the s3 metadata as that has a 2kb limit.

Resolves #320
This commit is contained in:
Kurt Hutten
2021-08-25 18:57:28 +10:00
parent 5d79efbf15
commit 87f132a684
18 changed files with 388 additions and 227 deletions

View File

@@ -130,7 +130,6 @@ const workerHelper = new WorkerHelper()
export const render: DefaultKernelExport['render'] = async ({
code,
parameters,
settings,
}: RenderArgs) => {
if (!scriptWorker) {
@@ -169,11 +168,11 @@ export const render: DefaultKernelExport['render'] = async ({
}
})
workerHelper.resolver()
workerHelper.resolver(null)
scriptWorker.postMessage({ action: 'init', baseURI, alias: [] })
}
return workerHelper.render(code, parameters)
return workerHelper.render(code, settings.parameters)
}
const jsCadController: DefaultKernelExport = {

View File

@@ -1,4 +1,10 @@
import { CadhubNumberChoiceParam, CadhubNumberOption, CadhubParams, CadhubStringChoiceParam, CadhubStringOption } from 'src/components/Customizer/customizerConverter'
import {
CadhubNumberChoiceParam,
CadhubNumberOption,
CadhubParams,
CadhubStringChoiceParam,
CadhubStringOption,
} from 'src/components/Customizer/customizerConverter'
type JscadTypeNames =
| 'group'
@@ -19,6 +25,7 @@ interface JscadParamBase {
type: JscadTypeNames
caption: string
name: string
initial?: number | string | boolean
}
interface JscadGroupParam extends JscadParamBase {
type: 'group'
@@ -81,6 +88,10 @@ type JsCadParams =
export function jsCadToCadhubParams(input: JsCadParams[]): CadhubParams[] {
return input
.map((param): CadhubParams => {
const common: { caption: string; name: string } = {
caption: param.caption,
name: param.name,
}
switch (param.type) {
case 'slider':
case 'number':
@@ -88,8 +99,7 @@ export function jsCadToCadhubParams(input: JsCadParams[]): CadhubParams[] {
return {
type: 'number',
input: 'default-number',
caption: param.caption,
name: param.name,
...common,
initial: param.initial,
min: param.min,
max: param.max,
@@ -105,8 +115,7 @@ export function jsCadToCadhubParams(input: JsCadParams[]): CadhubParams[] {
return {
type: 'string',
input: 'default-string',
caption: param.caption,
name: param.name,
...common,
initial: param.initial,
placeholder:
param.type === 'text' ||
@@ -123,43 +132,38 @@ export function jsCadToCadhubParams(input: JsCadParams[]): CadhubParams[] {
return {
type: 'boolean',
input: 'default-boolean',
caption: param.caption,
name: param.name,
...common,
initial: !!param.initial,
}
case 'choice':
case 'radio':
if(typeof param.values[0] === 'number'){
let options:Array<CadhubNumberOption> = []
let captions = param.captions || param.values
param.values.forEach((value,i)=>{
options[i] = {name:String(captions[i]), value:Number(value)}
})
return {
type: 'number',
input: 'choice-number',
caption: param.caption,
name: param.name,
initial: Number(param.initial),
options
}
}else{
let options:Array<CadhubStringOption> = []
let captions = param.captions || param.values
param.values.forEach((value,i)=>{
options[i] = {name:String(captions[i]), value:String(value)}
})
return {
type: 'string',
input: 'choice-string',
caption: param.caption,
name: param.name,
initial: String(param.initial),
options
}
case 'choice':
case 'radio':
if (typeof param.values[0] === 'number') {
const options: Array<CadhubNumberOption> = []
const captions = param.captions || param.values
param.values.forEach((value, i) => {
options[i] = { name: String(captions[i]), value: Number(value) }
})
return {
type: 'number',
input: 'choice-number',
...common,
initial: Number(param.initial),
options,
}
} else {
const options: Array<CadhubStringOption> = []
const captions = param.captions || param.values
param.values.forEach((value, i) => {
options[i] = { name: String(captions[i]), value: String(value) }
})
return {
type: 'string',
input: 'choice-string',
...common,
initial: String(param.initial),
options,
}
}
}
})
.filter((a) => a)