From d55cd93192f5ee245e3c25419988a239ffe6cd26 Mon Sep 17 00:00:00 2001 From: Scott Vorthmann Date: Fri, 24 Jan 2025 22:34:23 -0800 Subject: [PATCH] Fixing symmetry change orientations in online vZome --- online/src/viewer/context/viewer.jsx | 2 +- .../src/worker/legacy/controllers/editor.js | 9 +++++++- online/src/worker/legacy/controllers/index.js | 23 ++++++++++--------- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/online/src/viewer/context/viewer.jsx b/online/src/viewer/context/viewer.jsx index b76f5cddb..e3e0c8cc8 100644 --- a/online/src/viewer/context/viewer.jsx +++ b/online/src/viewer/context/viewer.jsx @@ -56,7 +56,7 @@ const ViewerProvider = ( props ) => } subscribeFor( 'SYMMETRY_CHANGED', ( { orientations } ) => { - setScene( 'orientations', reconcile( orientations ) ); + setScene( 'orientations', orientations ); }); subscribeFor( 'SCENES_DISCOVERED', ( payload ) => { diff --git a/online/src/worker/legacy/controllers/editor.js b/online/src/worker/legacy/controllers/editor.js index 152bfa652..00f341d97 100644 --- a/online/src/worker/legacy/controllers/editor.js +++ b/online/src/worker/legacy/controllers/editor.js @@ -6,6 +6,7 @@ import { PickingController } from './picking.js'; import { BuildPlaneController } from './buildplane.js'; import { modelToJS } from "../json.js"; import { export2d, export3d, export3dDocument } from "../exporters.js"; +import { resolveBuildPlanes } from '../scenes.js'; export class EditorController extends com.vzome.desktop.controller.DefaultController @@ -29,7 +30,7 @@ export class EditorController extends com.vzome.desktop.controller.DefaultContro this.clientEvents .errorReported(message); } - initialize( renderingChanges ) + initialize() { const { renderedModel, toolsModel, bookmarkFactory, history, fieldApp, legacyField, editor, editContext } = this.legacyDesign; @@ -159,6 +160,12 @@ export class EditorController extends com.vzome.desktop.controller.DefaultContro let symmetrySystem = this.symmController .getOrbitSource(); this.legacyDesign .setSymmetrySystem( symmetrySystem.getName() ); + const planes = resolveBuildPlanes( symmetrySystem .buildPlanes ); + const { orientations, symmetry, permutations } = symmetrySystem; + const scalars = [ symmetry .getField() .getAffineScalar() .evaluate() ]; //TODO get them all! + const resourcePath = symmetrySystem .getModelResourcePath(); + this.clientEvents .symmetryChanged( { orientations, permutations, scalars, planes, resourcePath } ); + // TODO: test this change with buildPlane this.getSubController( 'buildPlane' ) .setOrbitSource( symmetrySystem ); diff --git a/online/src/worker/legacy/controllers/index.js b/online/src/worker/legacy/controllers/index.js index c5b53bff4..14b0a21f3 100644 --- a/online/src/worker/legacy/controllers/index.js +++ b/online/src/worker/legacy/controllers/index.js @@ -3,20 +3,13 @@ import { com } from '../core-java.js'; import { documentFactory, parse } from '../core.js' import { Interpreter, RenderHistory, Step } from '../interpreter.js'; import { ControllerWrapper } from './wrapper.js'; -import { renderedModelTransducer, resolveBuildPlanes } from '../scenes.js'; +import { renderedModelTransducer } from '../scenes.js'; import { EditorController } from './editor.js'; import { serializeVZomeXml } from '../serializer.js'; const createControllers = ( design, renderingChanges, clientEvents ) => { - const { getOrbitSource, renderedModel } = design; - - const orbitSource = getOrbitSource(); - const planes = resolveBuildPlanes( orbitSource .buildPlanes ); - const { orientations, symmetry, permutations } = orbitSource; - const scalars = [ symmetry .getField() .getAffineScalar() .evaluate() ]; //TODO get them all! - const resourcePath = orbitSource .getModelResourcePath(); - clientEvents .symmetryChanged( { orientations, permutations, scalars, planes, resourcePath } ); + const { renderedModel } = design; const controller = new EditorController( design, clientEvents ); // this is the equivalent of DocumentController const symmLabel = controller .initialize(); @@ -113,7 +106,16 @@ const initializeDesign = ( loading, polygons, legacyDesign, clientEvents ) => snapshots = []; } - const wrapper = createControllers( legacyDesign, renderingChanges, clientEvents ); + const rendered = { lighting, camera, embedding, orientations, polygons, shapes, instances, snapshots, scenes }; + const renderedClientEvents = { + ...clientEvents, + symmetryChanged: details => { + rendered.orientations = details.orientations; // this enables future rendering to be with the right orientations + clientEvents .symmetryChanged( details ); + } + } + + const wrapper = createControllers( legacyDesign, renderingChanges, renderedClientEvents ); wrapper.snapCamera = snapCamera; @@ -132,7 +134,6 @@ const initializeDesign = ( loading, polygons, legacyDesign, clientEvents ) => wrapper.serializeVZomeXml = ( camera, lighting ) => serializeVZomeXml( legacyDesign, camera, lighting, scenes ); - const rendered = { lighting, camera, embedding, orientations, polygons, shapes, instances, snapshots, scenes }; return { wrapper, rendered }; }