diff --git a/modules/workbenches/modeler/features/extrude/extrude.operation.ts b/modules/workbenches/modeler/features/extrude/extrude.operation.ts index f6be014d..758eef1f 100644 --- a/modules/workbenches/modeler/features/extrude/extrude.operation.ts +++ b/modules/workbenches/modeler/features/extrude/extrude.operation.ts @@ -150,7 +150,7 @@ export const ExtrudeOperation: OperationDescriptor = { masking: [ { - id: 'CUT2', + id: 'CUT', label: 'Cut', icon: 'img/cad/cut', info: 'makes a cut based on 2D sketch', diff --git a/modules/workbenches/modeler/index.ts b/modules/workbenches/modeler/index.ts index 81af92dd..5980f283 100644 --- a/modules/workbenches/modeler/index.ts +++ b/modules/workbenches/modeler/index.ts @@ -48,7 +48,7 @@ export const ModelerWorkspace: WorkbenchConfig = { ui: { toolbar: [ 'DATUM_CREATE', 'PLANE', 'EditFace', '-', - "EXTRUDE", "CUT2", "REVOLVE", "LOFT", "SWEEP", "-", + "EXTRUDE", "CUT", "REVOLVE", "LOFT", "SWEEP", "-", "BOOLEAN", "-", "SHELL_TOOL", "FILLET_TOOL", "SCALE_BODY","-", "MIRROR_BODY", "PATTERN_LINEAR", "PATTERN_RADIAL", "-", diff --git a/test/coreTests/subjects/sketcherTPI.js b/test/coreTests/subjects/sketcherTPI.js index 2babc135..3095e2ea 100644 --- a/test/coreTests/subjects/sketcherTPI.js +++ b/test/coreTests/subjects/sketcherTPI.js @@ -3,7 +3,11 @@ import {genSerpinskiImpl} from '../../../web/app/utils/genSerpinski'; import {distance} from 'math/commons'; export function createSubjectFromInPlaceSketcher(ctx) { - return createSketcherTPI(ctx.services.sketcher.inPlaceEditor.sketcherAppContext); + const sketcherCtx = ctx.services.sketcher.inPlaceEditor.sketcherAppContext; + if (!sketcherCtx) { + throw 'not in sketching mode'; + } + return createSketcherTPI(sketcherCtx); } export function createSketcherTPI(context) { diff --git a/test/coreTests/testCases/craftCut.js b/test/coreTests/testCases/craftCut.js index e76fafc4..51d77757 100644 --- a/test/coreTests/testCases/craftCut.js +++ b/test/coreTests/testCases/craftCut.js @@ -1,6 +1,7 @@ import {extrudeCube} from '../utils/scripts'; export const TEST_MODE = 'modellerUI'; +export const only = true; export async function testCutMid(env, ui) { await extrudeCube(ui); @@ -9,9 +10,10 @@ export async function testCutMid(env, ui) { let sui = ui.openSketcher(); sui.addRectangle(-50, -50, 50, 50); ui.commitSketch(); + ui.selectFaces([0, 0, 210], [0, 0, 190]); ui.openWizard('CUT'); - ui.wizardContext.updateParam('value', 50); + ui.wizardContext.updateParam('height', 50); await ui.wizardOK(); @@ -24,9 +26,10 @@ export async function testCutCOI1Faces(env, ui) { let sui = ui.openSketcher(); sui.addRectangle(0, 0, 80, 100); ui.commitSketch(); + ui.selectFaces([0, 0, 210], [0, 0, 190]); ui.openWizard('CUT'); - ui.wizardContext.updateParam('value', 50); + ui.wizardContext.updateParam('height', 50); await ui.wizardOK(); @@ -39,9 +42,10 @@ export async function testCutCOI2Faces(env, ui) { let sui = ui.openSketcher(); sui.addRectangle(0, 0, 100, 100); ui.commitSketch(); + ui.selectFaces([0, 0, 210], [0, 0, 190]); ui.openWizard('CUT'); - ui.wizardContext.updateParam('value', 50); + ui.wizardContext.updateParam('length', 50); await ui.wizardOK(); @@ -54,9 +58,10 @@ export async function testCutCOI3Faces(env, ui) { let sui = ui.openSketcher(); sui.addRectangle(0, -100, 100, 100); ui.commitSketch(); + ui.selectFaces([0, 0, 210], [0, 0, 190]); ui.openWizard('CUT'); - ui.wizardContext.updateParam('value', 50); + ui.wizardContext.updateParam('length', 50); await ui.wizardOK(); @@ -69,9 +74,10 @@ export async function testCutCOI4Faces(env, ui) { let sui = ui.openSketcher(); sui.addRectangle(-100, -100, 100, 100); ui.commitSketch(); + ui.selectFaces([0, 0, 210], [0, 0, 190]); ui.openWizard('CUT'); - ui.wizardContext.updateParam('value', 50); + ui.wizardContext.updateParam('length', 50); await ui.wizardOK(); @@ -86,9 +92,10 @@ export async function testCutMidAllWay(env, ui) { let sui = ui.openSketcher(); sui.addRectangle(-50, -50, 50, 50); ui.commitSketch(); + ui.selectFaces([0, 0, 210], [0, 0, 190]); ui.openWizard('CUT'); - ui.wizardContext.updateParam('value', 200); + ui.wizardContext.updateParam('length', 200); await ui.wizardOK(); @@ -101,9 +108,10 @@ export async function testCutCOI1FacesAllWay(env, ui) { let sui = ui.openSketcher(); sui.addRectangle(0, 0, 80, 100); ui.commitSketch(); + ui.selectFaces([0, 0, 210], [0, 0, 190]); ui.openWizard('CUT'); - ui.wizardContext.updateParam('value', 200); + ui.wizardContext.updateParam('length', 200); await ui.wizardOK(); @@ -116,9 +124,10 @@ export async function testCutCOI2FacesAllWay(env, ui) { let sui = ui.openSketcher(); sui.addRectangle(0, 0, 100, 100); ui.commitSketch(); + ui.selectFaces([0, 0, 210], [0, 0, 190]); ui.openWizard('CUT'); - ui.wizardContext.updateParam('value', 200); + ui.wizardContext.updateParam('length', 200); await ui.wizardOK(); @@ -131,13 +140,15 @@ export async function testCutCOI3FacesAllWay(env, ui) { let sui = ui.openSketcher(); sui.addRectangle(0, -100, 100, 100); ui.commitSketch(); + ui.selectFaces([0, 0, 210], [0, 0, 190]); ui.openWizard('CUT'); - ui.wizardContext.updateParam('value', 200); + ui.wizardContext.updateParam('length', 200); await ui.wizardOK(); } +testCutCOI3FacesAllWay.only = true export async function testCutCOI4FacesAllWay(env, ui) { await extrudeCube(ui); @@ -146,9 +157,10 @@ export async function testCutCOI4FacesAllWay(env, ui) { let sui = ui.openSketcher(); sui.addRectangle(-100, -100, 100, 100); ui.commitSketch(); + ui.selectFaces([0, 0, 210], [0, 0, 190]); ui.openWizard('CUT'); - ui.wizardContext.updateParam('value', 200); + ui.wizardContext.updateParam('length', 200); await ui.wizardOK(); diff --git a/test/coreTests/testCases/craftExtrude.js b/test/coreTests/testCases/craftExtrude.js index 4871d5b4..765f73ff 100644 --- a/test/coreTests/testCases/craftExtrude.js +++ b/test/coreTests/testCases/craftExtrude.js @@ -12,10 +12,8 @@ export async function testExtrudeMid(env, ui) { ui.commitSketch(); ui.openWizard('EXTRUDE'); - ui.wizardContext.updateParam('value', 50); + ui.wizardContext.updateParam('length', 50); await ui.wizardOK(); - - } export async function testExtrudeCOI1Faces(env, ui) { @@ -27,7 +25,7 @@ export async function testExtrudeCOI1Faces(env, ui) { ui.commitSketch(); ui.openWizard('EXTRUDE'); - ui.wizardContext.updateParam('value', 50); + ui.wizardContext.updateParam('length', 50); await ui.wizardOK(); @@ -42,7 +40,7 @@ export async function testExtrudeCOI2Faces(env, ui) { ui.commitSketch(); ui.openWizard('EXTRUDE'); - ui.wizardContext.updateParam('value', 50); + ui.wizardContext.updateParam('length', 50); await ui.wizardOK(); @@ -57,7 +55,7 @@ export async function testExtrudeCOI3Faces(env, ui) { ui.commitSketch(); ui.openWizard('EXTRUDE'); - ui.wizardContext.updateParam('value', 50); + ui.wizardContext.updateParam('length', 50); await ui.wizardOK(); @@ -72,7 +70,7 @@ export async function testExtrudeCOI4Faces(env, ui) { ui.commitSketch(); ui.openWizard('EXTRUDE'); - ui.wizardContext.updateParam('value', 50); + ui.wizardContext.updateParam('length', 50); await ui.wizardOK(); diff --git a/test/coreTests/testCases/craftExtrudeBasicShapes.js b/test/coreTests/testCases/craftExtrudeBasicShapes.js index b97185ab..a12cb889 100644 --- a/test/coreTests/testCases/craftExtrudeBasicShapes.js +++ b/test/coreTests/testCases/craftExtrudeBasicShapes.js @@ -47,11 +47,8 @@ export async function testExtrudeFromSketch(env, ui) { } -testExtrudeFromSketch.only = true - export async function testExtrudeArc(env, ui) { - let sketcherUI = await createPlaneAndOpenSketcher(ui); - let sketchedFace = ui.context.services.selection.face.single; + let [sketcherUI, sketchedFace] = await createPlaneAndOpenSketcher(ui); let arc = sketcherUI.addArc(0, 0, 100, 0, -100, 0); let segment = sketcherUI.addSegment(100, 0, -100, 0); @@ -64,7 +61,7 @@ export async function testExtrudeArc(env, ui) { ui.selectFaces([0, 0, -10], [0, 0, 10]); ui.openWizard('EXTRUDE'); - ui.wizardContext.updateParam('value', 200); + ui.wizardContext.updateParam('length', 200); await ui.wizardOK(); @@ -88,8 +85,7 @@ export async function testExtrudeArc(env, ui) { } export async function testExtrudeCircle(env, ui) { - let sketcherUI = await createPlaneAndOpenSketcher(ui); - let sketchedFace = ui.context.services.selection.face.single; + let [sketcherUI, sketchedFace] = await createPlaneAndOpenSketcher(ui); let circle = sketcherUI.addCircle(100, 100, 100); ui.commitSketch(); @@ -97,7 +93,7 @@ export async function testExtrudeCircle(env, ui) { ui.selectFaces([0, 0, -10], [0, 0, 10]); ui.openWizard('EXTRUDE'); - ui.wizardContext.updateParam('value', 200); + ui.wizardContext.updateParam('length', 200); await ui.wizardOK(); @@ -118,8 +114,7 @@ export async function testExtrudeCircle(env, ui) { } export async function testExtrudeEllipse(env, ui) { - let sketcherUI = await createPlaneAndOpenSketcher(ui); - let sketchedFace = ui.context.services.selection.face.single; + let [sketcherUI, sketchedFace] = await createPlaneAndOpenSketcher(ui); let ellipse = sketcherUI.addEllipse(-100, 100, 100, 100, 0, 150); ui.commitSketch(); @@ -127,7 +122,7 @@ export async function testExtrudeEllipse(env, ui) { ui.selectFaces([0, 0, -10], [0, 0, 10]); ui.openWizard('EXTRUDE'); - ui.wizardContext.updateParam('value', 200); + ui.wizardContext.updateParam('length', 200); await ui.wizardOK(); @@ -158,7 +153,7 @@ export async function testExtrudeEllipticalArc(env, ui) { ui.selectFaces([0, 0, -10], [0, 0, 10]); ui.openWizard('EXTRUDE'); - ui.wizardContext.updateParam('value', 200); + ui.wizardContext.updateParam('length', 200); await ui.wizardOK(); @@ -179,8 +174,7 @@ export async function testExtrudeEllipticalArc(env, ui) { } export async function testExtrudeBezier(env, ui) { - let sketcherUI = await createPlaneAndOpenSketcher(ui); - let sketchedFace = ui.context.services.selection.face.single; + let [sketcherUI, sketchedFace] = await createPlaneAndOpenSketcher(ui); let bezier = sketcherUI.addBezier(-100, 100, 100, 100, 0, 150); sketcherUI.move(bezier.cp2.x, bezier.cp2.y, bezier.cp2.x, bezier.cp1.y); @@ -192,7 +186,7 @@ export async function testExtrudeBezier(env, ui) { ui.selectFaces([0, 0, -10], [0, 0, 10]); ui.openWizard('EXTRUDE'); - ui.wizardContext.updateParam('value', 200); + ui.wizardContext.updateParam('length', 200); await ui.wizardOK(); diff --git a/test/coreTests/testCases/craftExtrudeOptions.js b/test/coreTests/testCases/craftExtrudeOptions.js index 0924bd41..0536789b 100644 --- a/test/coreTests/testCases/craftExtrudeOptions.js +++ b/test/coreTests/testCases/craftExtrudeOptions.js @@ -4,8 +4,7 @@ import {createPlaneAndOpenSketcher} from '../utils/scripts'; export const TEST_MODE = 'modellerUI'; export async function testExtrudePrism(env, ui) { - let sketcherUI = await createPlaneAndOpenSketcher(ui); - let sketchedFace = ui.context.services.selection.face.single; + let [sketcherUI, sketchedFace] = await createPlaneAndOpenSketcher(ui); let [S1, S2, S3, S4] = sketcherUI.addRectangle(-100, -100, 100, 100); // let gauge = ui.prismSurfaceGauge([-100, -100, 0], [100, -100, 0], [50, 50, 0], [-50, 50, 0] ); @@ -17,7 +16,7 @@ export async function testExtrudePrism(env, ui) { ui.selectFaces([0, 0, -10], [0, 0, 10]); ui.openWizard('EXTRUDE'); - ui.wizardContext.updateParam('value', 2000); + ui.wizardContext.updateParam('height', 2000); ui.wizardContext.updateParam('prism', 0.1); await ui.wizardOK(); env.fail(); diff --git a/test/coreTests/testCases/craftLoft.js b/test/coreTests/testCases/craftLoft.js index 07338c02..b5a25120 100644 --- a/test/coreTests/testCases/craftLoft.js +++ b/test/coreTests/testCases/craftLoft.js @@ -3,7 +3,7 @@ import {createPlaneAndOpenSketcher, extrudeCube} from '../utils/scripts'; export const TEST_MODE = 'modellerUI'; export async function testLoftOver2Sections(env, ui) { - let sui = await createPlaneAndOpenSketcher(ui); + let [sui, sketchedFace] = await createPlaneAndOpenSketcher(ui); sui.addRectangle(-100, -100, 100, 100); ui.commitSketch(); @@ -23,7 +23,7 @@ export async function testLoftOver2Sections(env, ui) { } export async function testLoftOver3Sections(env, ui) { - let sui = await createPlaneAndOpenSketcher(ui); + let [sui, sketchedFace] = await createPlaneAndOpenSketcher(ui); sui.addRectangle(-100, -100, 100, 100); ui.commitSketch(); @@ -55,7 +55,7 @@ export async function testLoftOver3Sections(env, ui) { export async function testLoftCircleSections(env, ui) { - let sui = await createPlaneAndOpenSketcher(ui); + let [sui, sketchedFace] = await createPlaneAndOpenSketcher(ui); sui.addRectangle(-100, -100, 100, 100); ui.commitSketch(); diff --git a/test/coreTests/utils/scripts.js b/test/coreTests/utils/scripts.js index fb6fa388..19ce5ace 100644 --- a/test/coreTests/utils/scripts.js +++ b/test/coreTests/utils/scripts.js @@ -9,12 +9,12 @@ export async function createPlaneAndOpenSketcher(ui) { } export async function extrudeCube(ui) { - let sketcherUI = await createPlaneAndOpenSketcher(ui); + let [sketcherUI, sketchedFace] = await createPlaneAndOpenSketcher(ui); sketcherUI.addRectangle(-100, -100, 100, 100); ui.commitSketch(); ui.selectFaces([0, 0, -10], [0, 0, 10]); ui.openWizard('EXTRUDE'); - ui.wizardContext.updateParam('value', 200); + ui.wizardContext.updateParam('length', 200); await ui.wizardOK(); } diff --git a/web/app/cad/actions/actionSystemPlugin.ts b/web/app/cad/actions/actionSystemPlugin.ts index d4d5de19..29edb4c8 100644 --- a/web/app/cad/actions/actionSystemPlugin.ts +++ b/web/app/cad/actions/actionSystemPlugin.ts @@ -79,8 +79,8 @@ export function activate(context: ApplicationContext) { function showHintFor(request: HintRequest) { if (request) { let {actionId, x, y, requester} = request; - let actionState = streams.action.state[actionId].value; - let actionAppearance = streams.action.appearance[actionId].value; + let actionState = streams.action.state[actionId]?.value; + let actionAppearance = streams.action.appearance[actionId]?.value; if (actionState && actionAppearance) { streams.action.hint.value = { actionId, x, y, requester, diff --git a/web/app/cad/actions/anonHint.js b/web/app/cad/actions/anonHint.js index 4f8fa9ab..fe5c2c15 100644 --- a/web/app/cad/actions/anonHint.js +++ b/web/app/cad/actions/anonHint.js @@ -1,7 +1,7 @@ export function enableAnonymousActionHint(ctx) { - const {services, actionService} = ctx; return function(actionId) { + const {services, actionService} = ctx; let {left, top} = services.dom.viewerContainer.getBoundingClientRect(); actionService.showHintFor({ actionId, diff --git a/web/app/cad/craft/wizard/wizardPlugin.ts b/web/app/cad/craft/wizard/wizardPlugin.ts index 696753f5..5c96fb76 100644 --- a/web/app/cad/craft/wizard/wizardPlugin.ts +++ b/web/app/cad/craft/wizard/wizardPlugin.ts @@ -93,8 +93,12 @@ export function activate(ctx: ApplicationContext) { } }) - const updateParams = mutator => workingRequest$.update((req: WorkingRequest) => produce(req, draft => mutator(draft.params))); - const updateState = mutator => state$.update((state: WizardState) => produce(state, mutator)); + const updateParams = mutator => workingRequest$.update((req: WorkingRequest) => produce(req, draft => { + mutator(draft.params) + })); + const updateState = mutator => state$.update((state: WizardState) => produce(state, draft => { + mutator(draft); + })); const updateParam = (path: ParamsPath, value: OperationParamValue) => { updateParams(params => { // if (operation.onParamsUpdate) { @@ -137,7 +141,7 @@ export function activate(ctx: ApplicationContext) { applyWorkingRequest: () => { let {type, params} = getWorkingRequest(); let request = clone({type, params}); - const setError = error => state$.mutate(state => state.error = error); + const setError = error => updateState(state => state.error = error); if (insertOperation$.value) { ctx.craftService.modify(request, cancel, setError); } else { diff --git a/web/app/cad/workbench/workbenchesLoaderPlugin.ts b/web/app/cad/workbench/workbenchesLoaderPlugin.ts index 37bfac9a..70f5460f 100644 --- a/web/app/cad/workbench/workbenchesLoaderPlugin.ts +++ b/web/app/cad/workbench/workbenchesLoaderPlugin.ts @@ -47,7 +47,7 @@ function registerCoreOperations(ctx: WorkbenchesLoaderInputContext) { planeOperation, // boxOperation, // extrudeOperation, - cutOperation, + // cutOperation, revolveOperation, filletOperation, createDatumOperation,