diff --git a/modules/workbenches/examples/features/occ_bottle/index.ts b/modules/workbenches/examples/features/occ_bottle/index.ts index 2f72c8a7..70faa487 100644 --- a/modules/workbenches/examples/features/occ_bottle/index.ts +++ b/modules/workbenches/examples/features/occ_bottle/index.ts @@ -33,6 +33,19 @@ export default { defaultValue: 150 } }, + color: { + type: 'enum', + options: [ + { + label: 'Red', + value: 'red' + }, + { + label: 'Green', + value: 'green' + } + ] + }, run: ({ width, height, thickness }, ctx: ApplicationContext) => { const occObj = createOCCBottle(width, height, thickness, ctx.occService.occContext); const mobject = new MBrepShell(occ2brep(occObj, ctx.occService.occContext)); @@ -40,5 +53,5 @@ export default { consumed: [], created: [mobject] }; - }, + } } diff --git a/modules/workbenches/modeler/features/primitive_cone/index.ts b/modules/workbenches/modeler/features/primitive_cone/index.ts index 7a926f7e..e4d0d1a6 100644 --- a/modules/workbenches/modeler/features/primitive_cone/index.ts +++ b/modules/workbenches/modeler/features/primitive_cone/index.ts @@ -2,12 +2,24 @@ import { ApplicationContext } from 'context'; import { MBrepShell } from 'cad/model/mshell'; import { roundValueForPresentation as r } from 'cad/craft/operationHelper'; import { occ2brep } from 'cad/occ/occ2models'; -import icon from './icon.svg'; +import icon32 from './icon32.png'; +import icon96 from './icon96.png'; export default { id: 'primitive_cone', label: 'primitive_cone', - icon, + icon: { + iconSet: { + medium: { + iconType: 'image', + iconContent: icon32 + }, + large: { + iconType: 'image', + iconContent: icon96 + } + }, + }, info: 'primitive_cone', mutualExclusiveFields: [], paramsInfo: ({ diameter_A, diameter_B, height }) => `(${r(diameter_A)} ${r(diameter_A)} ${r(height)})`, diff --git a/web/app/cad/dom/components/PlugableToolbar.jsx b/web/app/cad/dom/components/PlugableToolbar.jsx index 37ac31ea..47233abc 100644 --- a/web/app/cad/dom/components/PlugableToolbar.jsx +++ b/web/app/cad/dom/components/PlugableToolbar.jsx @@ -32,7 +32,7 @@ export function ToolbarActionButtons({actions, showTitles, size}) { }); } -function ActionButton({label, icon, icon96, icon32, cssIcons, symbol, size, noLabel, enabled, visible, actionId, ...props}) { +function ActionButton({label, icon, icon96, icon32, cssIcons, symbol, size = 'large', noLabel, enabled, visible, actionId, ...props}) { if (!visible) { return null; } diff --git a/web/app/cad/icons/DeclarativeIcon.tsx b/web/app/cad/icons/DeclarativeIcon.tsx index 3e6cceb0..be66bf91 100644 --- a/web/app/cad/icons/DeclarativeIcon.tsx +++ b/web/app/cad/icons/DeclarativeIcon.tsx @@ -21,7 +21,7 @@ function IconSet(props: IconRenderProps & IconSetDef & React.HTMLAttributes; } diff --git a/web/app/cad/mdf/generateForm.tsx b/web/app/cad/mdf/generateForm.tsx index 1f7de8a2..8a46c0c7 100644 --- a/web/app/cad/mdf/generateForm.tsx +++ b/web/app/cad/mdf/generateForm.tsx @@ -1,4 +1,5 @@ import React from 'react'; +import { ComboBoxOption } from 'ui/components/controls/ComboBoxControl'; import Entity from '../craft/wizard/components/form/Entity'; import { CheckboxField, NumberField, ComboBoxField, TextField} from '../craft/wizard/components/form/Fields'; import { Group } from '../craft/wizard/components/form/Form'; @@ -19,6 +20,12 @@ export function generateForm(schema: OperationSchema) { return ; } else if (['face', 'edge', 'sketchObject', 'datumAxis'].includes(fieldDef.type)) { return ; + } else if (fieldDef.type === 'enum') { + return + {fieldDef.options.map(opt => + {opt.label} + )} + } else if (fieldDef.type === 'boolean') { return ; } else { diff --git a/web/app/cad/mdf/mdf.ts b/web/app/cad/mdf/mdf.ts index c95cbd0a..6ff8ad7f 100644 --- a/web/app/cad/mdf/mdf.ts +++ b/web/app/cad/mdf/mdf.ts @@ -25,7 +25,8 @@ export type OperationSchema = { }; export interface SchemaField { - type: 'number' | 'face' | 'datumAxis' | 'edge' | 'sketchObject' | 'boolean' + type: 'number' | 'face' | 'datumAxis' | 'edge' | 'sketchObject' | 'boolean' | 'enum' + options: string[] | number[], defaultValue: Coercable, optional: boolean, label?: string diff --git a/web/app/cad/mdf/mdfIconResolver.tsx b/web/app/cad/mdf/mdfIconResolver.tsx index 17c0e780..dbb7a94f 100644 --- a/web/app/cad/mdf/mdfIconResolver.tsx +++ b/web/app/cad/mdf/mdfIconResolver.tsx @@ -5,7 +5,7 @@ import { AiOutlineQuestion } from 'react-icons/ai'; import { IconType } from 'react-icons/lib'; export function resolveMDFIcon(iconDef: IconDeclaration | IconType) { - if (iconDef.iconType) { + if (iconDef.iconType || iconDef.iconSet) { return (props) => } else { if (!iconDef || typeof(iconDef) !== 'object') {