mirror of
https://github.com/TECHNOFAB11/ergogen.git
synced 2025-12-13 00:20:06 +01:00
Generalize part objects/arrays, add combination shorthands, update docs
This commit is contained in:
parent
5b1da540ac
commit
d60c9dbc94
5 changed files with 104 additions and 134 deletions
47
src/cases.js
47
src/cases.js
|
|
@ -36,30 +36,40 @@ exports.parse = (config, outlines) => {
|
|||
return result.join('')
|
||||
}
|
||||
|
||||
for (const [case_name, case_config] of Object.entries(cases_config)) {
|
||||
for (let [case_name, case_config] of Object.entries(cases_config)) {
|
||||
|
||||
// config sanitization
|
||||
const parts = a.sane(case_config, `cases.${case_name}`, 'array')
|
||||
case_config = a.inherit('cases', case_name, cases_config)
|
||||
if (a.type(case_config) == 'array') {
|
||||
case_config = {...case_config}
|
||||
}
|
||||
const parts = a.sane(case_config, `cases.${case_name}`, 'object')
|
||||
|
||||
const body = []
|
||||
const case_dependencies = []
|
||||
const outline_dependencies = []
|
||||
let part_index = 0
|
||||
for (const part of parts) {
|
||||
const part_name = `cases.${case_name}[${++part_index}]`
|
||||
const part_var = `${case_name}__part_${part_index}`
|
||||
a.detect_unexpected(part, part_name, ['type', 'name', 'extrude', 'shift', 'rotate', 'operation'])
|
||||
const type = a.in(part.type, `${part_name}.type`, ['outline', 'case'])
|
||||
const name = a.sane(part.name, `${part_name}.name`, 'string')
|
||||
const shift = a.numarr(part.shift || [0, 0, 0], `${part_name}.shift`, 3)
|
||||
const rotate = a.numarr(part.rotate || [0, 0, 0], `${part_name}.rotate`, 3)
|
||||
const operation = a.in(part.operation || 'add', `${part_name}.operation`, ['add', 'subtract', 'intersect'])
|
||||
let first = true
|
||||
for (let [part_name, part] of Object.entries(parts)) {
|
||||
if (a.type(part) == 'string') {
|
||||
part = a.op_str(part, {
|
||||
outline: Object.keys(outlines),
|
||||
case: Object.keys(cases)
|
||||
}, ['case', 'outline'])
|
||||
}
|
||||
const part_qname = `cases.${case_name}.${part_name}`
|
||||
const part_var = `${case_name}__part_${part_name}`
|
||||
a.detect_unexpected(part, part_qname, ['type', 'name', 'extrude', 'shift', 'rotate', 'operation'])
|
||||
const type = a.in(part.type || 'outline', `${part_qname}.type`, ['outline', 'case'])
|
||||
const name = a.sane(part.name, `${part_qname}.name`, 'string')
|
||||
const shift = a.numarr(part.shift || [0, 0, 0], `${part_qname}.shift`, 3)
|
||||
const rotate = a.numarr(part.rotate || [0, 0, 0], `${part_qname}.rotate`, 3)
|
||||
const operation = a.in(part.operation || 'add', `${part_qname}.operation`, ['add', 'subtract', 'intersect'])
|
||||
|
||||
let base
|
||||
if (type == 'outline') {
|
||||
const extrude = a.sane(part.extrude || 1, `${part_name}.extrude`, 'number')
|
||||
const extrude = a.sane(part.extrude || 1, `${part_qname}.extrude`, 'number')
|
||||
const outline = outlines[name]
|
||||
a.assert(outline, `Field "${part_name}.name" does not name a valid outline!`)
|
||||
a.assert(outline, `Field "${part_qname}.name" does not name a valid outline!`)
|
||||
if (!scripts[name]) {
|
||||
scripts[name] = m.exporter.toJscadScript(outline, {
|
||||
functionName: `${name}_outline_fn`,
|
||||
|
|
@ -70,8 +80,8 @@ exports.parse = (config, outlines) => {
|
|||
outline_dependencies.push(name)
|
||||
base = `${name}_outline_fn()`
|
||||
} else {
|
||||
a.assert(part.extrude === undefined, `Field "${part_name}.extrude" should not be used when type=case!`)
|
||||
a.in(name, `${part_name}.name`, Object.keys(cases))
|
||||
a.assert(part.extrude === undefined, `Field "${part_qname}.extrude" should not be used when type=case!`)
|
||||
a.in(name, `${part_qname}.name`, Object.keys(cases))
|
||||
case_dependencies.push(name)
|
||||
base = `${name}_case_fn()`
|
||||
}
|
||||
|
|
@ -81,13 +91,14 @@ exports.parse = (config, outlines) => {
|
|||
else if (operation == 'intersect') op = 'intersect'
|
||||
|
||||
let op_statement = `let result = ${part_var};`
|
||||
if (part_index > 1) {
|
||||
if (!first) {
|
||||
op_statement = `result = result.${op}(${part_var});`
|
||||
}
|
||||
first = false
|
||||
|
||||
body.push(`
|
||||
|
||||
// creating part ${part_index} of case ${case_name}
|
||||
// creating part ${part_name} of case ${case_name}
|
||||
let ${part_var} = ${base};
|
||||
|
||||
// make sure that rotations are relative
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue