jsketcher/web/app/cad/sketch/sketcherPlugin.js
2018-01-30 17:14:58 -08:00

71 lines
2.2 KiB
JavaScript

import {createToken} from 'bus';
import {ReadSketch} from './sketchReader';
import {getSketchBoundaries} from './sketchBoundaries';
import {TOKENS as CRAFT_TOKENS} from '../craft/craftPlugin';
export function activate({bus, services}) {
services.storage.addListener(evt => {
let prefix = services.project.sketchStorageNamespace;
if (evt.key.indexOf(prefix) < 0) return;
let sketchFaceId = evt.key.substring(prefix.length);
let sketchFace = services.cadRegistry.findFace(sketchFaceId);
if (sketchFace !== null) {
updateSketchForFace(sketchFace);
services.viewer.requestRender();
}
});
function readSketch(sketchId) {
let sketchStorageKey = services.project.sketchStorageKey(sketchId);
let savedSketch = services.storage.get(sketchStorageKey);
if (savedSketch === null) {
return null;
}
return ReadSketch(JSON.parse(savedSketch), sketchId, true);
}
function updateSketchForFace(sketchFace) {
let sketch = readSketch(sketchFace.id);
if (sketch !== null) {
sketchFace.updateSketch(sketch);
bus.dispatch(TOKENS.SKETCH_UPDATE, sketchFace.id);
}
}
function updateAllSketches() {
let allShells = services.cadRegistry.getAllShells();
allShells.forEach(sceneShell => sceneShell.sceneFaces.forEach(sceneFace => updateSketchForFace(sceneFace)));
services.viewer.requestRender();
}
function updateSketchBoundaries(sceneFace) {
let sketchStorageKey = services.project.sketchStorageKey(sceneFace.id);
let sketch = services.storage.get(sketchStorageKey);
let data = sketch === null ? {} : JSON.parse(sketch);
data.boundary = getSketchBoundaries(sceneFace);
services.storage.set(sketchStorageKey, JSON.stringify(data));
}
function sketchFace(sceneFace) {
updateSketchBoundaries(sceneFace);
let sketchURL = services.project.getSketchURL(sceneFace.id);
services.appTabs.show(sceneFace.id, 'Sketch ' + sceneFace.id, 'sketcher.html#' + sketchURL);
}
bus.subscribe(CRAFT_TOKENS.DID_MODIFY, updateAllSketches);
services.sketcher = {
sketchFace, updateAllSketches
}
}
export const TOKENS = {
SKETCH_UPDATE: createToken('sketcher', 'sketchUpdate')
};