diff --git a/web/test/cases/craftDatum.js b/web/test/cases/craftDatum.js new file mode 100644 index 00000000..cc2ddbaa --- /dev/null +++ b/web/test/cases/craftDatum.js @@ -0,0 +1,120 @@ +import {assertEquals, assertTrue} from '../utils/asserts'; +import {DATUM} from '../../app/cad/scene/entites'; + +export const TEST_MODE = 'modellerUI'; + +export function testCreateDatumOrigin(env, ui) { + ui.openWizard('DATUM_CREATE'); + ui.wizardOK(); + + let datum = ui.context.services.cadRegistry.models[0]; + ui.context.services.pickControl.pick(datum); + + ui.openWizard('PLANE_FROM_DATUM'); + assertEquals(datum.id, ui.wizardContext.workingRequest$.value.params.datum); + ui.wizardOK(); + + let [placeFace] = ui.rayCastFaces([10, 10, -10], [10, 10, 10]); + assertTrue(placeFace !== undefined); + + env.done(); +} + +export function testCreateMovedDatum(env, ui) { + ui.openWizard('DATUM_CREATE'); + ui.wizardContext.updateParam("x", 100); + ui.wizardContext.updateParam("y", 100); + ui.wizardContext.updateParam("z", 100); + ui.wizardOK(); + + let datum = ui.context.services.cadRegistry.models[0]; + ui.context.services.pickControl.pick(datum); + + ui.openWizard('PLANE_FROM_DATUM'); + assertEquals(datum.id, ui.wizardContext.workingRequest$.value.params.datum); + ui.wizardOK(); + + ui.select([10, 10, -10], [10, 10, 10]); + assertTrue(ui.context.services.selection.face.single === undefined); + + ui.select([110, 110, 90], [110, 110, 110]); + assertTrue(ui.context.services.selection.face.single !== undefined); + + env.done(); +} + +export function testCreateDatumOffFace(env, ui) { + ui.openWizard('DATUM_CREATE'); + ui.wizardContext.updateParam("x", 100); + ui.wizardContext.updateParam("y", 100); + ui.wizardContext.updateParam("z", 100); + ui.wizardOK(); + + let datum = ui.context.services.cadRegistry.models[0]; + ui.context.services.pickControl.pick(datum); + + ui.openWizard('PLANE_FROM_DATUM'); + ui.wizardOK(); + + ui.select([110, 110, 90], [110, 110, 110]); + + ui.openWizard('DATUM_CREATE'); + ui.wizardContext.updateParam("x", 100); + ui.wizardContext.updateParam("y", 100); + ui.wizardContext.updateParam("z", 100); + ui.wizardOK(); + + ui.selectFirst(DATUM); + ui.openWizard('PLANE_FROM_DATUM'); + ui.wizardOK(); + + ui.select([210, 210, 190], [210, 210, 210]); + assertTrue(ui.context.services.selection.face.single !== undefined); + + env.done(); +} + + +export function testRotateDatum(env, ui) { + ui.openWizard('DATUM_CREATE'); + ui.wizardContext.updateParam("x", 100); + ui.wizardContext.updateParam("y", 100); + ui.wizardContext.updateParam("z", 100); + ui.wizardOK(); + + ui.selectFirst(DATUM); + ui.openWizard('DATUM_ROTATE'); + ui.wizardContext.updateParam('axis', 'Z'); + ui.wizardContext.updateParam('angle', 180); + ui.wizardOK(); + + ui.selectFirst(DATUM); + ui.openWizard('PLANE_FROM_DATUM'); + ui.wizardOK(); + + ui.select([90, 90, 90], [90, 90, 110]); + assertTrue(ui.context.services.selection.face.single !== undefined); + + env.done(); +} + +export function testMoveDatum(env, ui) { + ui.openWizard('DATUM_CREATE'); + ui.wizardOK(); + + ui.selectFirst(DATUM); + ui.openWizard('DATUM_MOVE'); + ui.wizardContext.updateParam("x", 100); + ui.wizardContext.updateParam("y", 100); + ui.wizardContext.updateParam("z", 100); + ui.wizardOK(); + + ui.selectFirst(DATUM); + ui.openWizard('PLANE_FROM_DATUM'); + ui.wizardOK(); + + ui.select([110, 110, 90], [110, 110, 110]); + assertTrue(ui.context.services.selection.face.single !== undefined); + + env.done(); +} \ No newline at end of file diff --git a/web/test/cases/craftLoft.js b/web/test/cases/craftLoft.js index da77ae1e..046bd0ff 100644 --- a/web/test/cases/craftLoft.js +++ b/web/test/cases/craftLoft.js @@ -16,8 +16,8 @@ export function testLoftOver2Sections(env, ui) { ui.commitSketch(); ui.openWizard('LOFT'); - ui.select([-3, -3, 310], [-3, -3, 290]); - ui.select([-3, -3, -10], [-3, -3, 10]); + ui.select([0, 0, 310], [0, 0, 290]); + ui.select([0, 0, -10], [0, 0, 10]); ui.wizardOK(); env.done(); } @@ -46,9 +46,9 @@ export function testLoftOver3Sections(env, ui) { ui.openWizard('LOFT'); - ui.select([-3, -3, 610], [-3, -3, 590]); - ui.select([-3, -3, 310], [-3, -3, 290]); - ui.select([-3, -3, -10], [-3, -3, 10]); + ui.select([0, 0, 610], [0, 0, 590]); + ui.select([0, 0, 310], [0, 0, 290]); + ui.select([0, 0, -10], [0, 0, 10]); ui.wizardOK(); env.done(); } @@ -68,8 +68,8 @@ export function testLoftCircleSections(env, ui) { ui.commitSketch(); ui.openWizard('LOFT'); - ui.select([-3, -3, 310], [-3, -3, 290]); - ui.select([-3, -3, -10], [-3, -3, 10]); + ui.select([0, 0, 310], [0, 0, 290]); + ui.select([0, 0, -10], [0, 0, 10]); ui.wizardOK(); env.done(); } diff --git a/web/test/suites.js b/web/test/suites.js index 892f4e30..98b754f6 100644 --- a/web/test/suites.js +++ b/web/test/suites.js @@ -12,6 +12,7 @@ export default { TestCase('craftRevolve'), TestCase('craftFillet'), TestCase('craftLoft'), + TestCase('craftDatum'), ], SketcherObjects: [ diff --git a/web/test/utils/subjects/modeller/modellerUISubject.js b/web/test/utils/subjects/modeller/modellerUISubject.js index 5b9802d1..457e9822 100644 --- a/web/test/utils/subjects/modeller/modellerUISubject.js +++ b/web/test/utils/subjects/modeller/modellerUISubject.js @@ -4,6 +4,7 @@ import { PICK_KIND, traversePickResults } from '../../../../app/cad/scene/controls/pickControlPlugin'; +import {DATUM} from '../../../../app/cad/scene/entites'; export default ctx => { @@ -27,12 +28,12 @@ export default ctx => { sceneMouseEvent('mouseup', x, y); } - function rayCastFaces(from, to) { + function rayCastByType(from, to, kind) { let rawObjects = ctx.services.viewer.customRaycast(from, to, ctx.services.cadScene.workGroup.children); - let faces = []; - traversePickResults(null, rawObjects, PICK_KIND.FACE, face => faces.push(face)); + let models = []; + traversePickResults(null, rawObjects, kind, face => models.push(face)); let out = []; - faces.forEach(face => { + models.forEach(face => { if (!out.includes(face)) { out.push(face); } @@ -40,6 +41,14 @@ export default ctx => { return out; } + function rayCastFaces(from, to) { + return rayCastByType(from, to, PICK_KIND.FACE); + } + + function rayCast(from, to) { + return rayCastByType(from, to, ALL_EXCLUDING_SOLID_KINDS); + } + function selectFaces(from, to) { ctx.services.pickControl.pickFromRay(from, to, PICK_KIND.FACE); } @@ -48,6 +57,10 @@ export default ctx => { ctx.services.pickControl.pickFromRay(from, to, ALL_EXCLUDING_SOLID_KINDS); } + function selectFirst(type) { + ctx.services.pickControl.pick(ctx.services.cadRegistry.models.find(m => m.TYPE === type)); + } + function getWizardContext() { return ctx.streams.wizard.wizardContext.value } @@ -63,8 +76,8 @@ export default ctx => { return { context: ctx, - openWizard, wizardOK, sceneMouseEvent, clickOnScene, - rayCastFaces, select, selectFaces, openSketcher, commitSketch, + openWizard, wizardOK, sceneMouseEvent, clickOnScene, + rayCast, rayCastFaces, select, selectFaces, selectFirst, openSketcher, commitSketch, get wizardContext() { return getWizardContext()}, __DEBUG__: ctx.services.debug.utils };