jsketcher/web/app/cad/craft/datum/move/moveDatumOperation.js
2019-02-21 22:34:24 -08:00

79 lines
1.9 KiB
JavaScript

import schema from './moveDatumOpSchema';
import {MDatum} from '../../../model/mdatum';
import MoveDatumWizard from './MoveDatumWizard';
import {roundInteractiveInput} from '../../wizard/roundUtils';
import {EMPTY_ARRAY} from '../../../../../../modules/gems/iterables';
import {pointAsText} from '../../../../../../modules/renders';
import {DatumParamsRenderer} from '../DatumParamsRenderer';
function move(params, {cadRegistry}) {
let mDatum = cadRegistry.findDatum(params.datum);
let csys = mDatum.csys.clone();
csys.origin.x += params.x;
csys.origin.y += params.y;
csys.origin.z += params.z;
return {
consumed: params.copy ? EMPTY_ARRAY : [mDatum],
created: [new MDatum(csys)]
}
}
function previewer(ctx, initialParams, updateParams) {
let mDatum = ctx.services.cadRegistry.findDatum(initialParams.datum);
if (!mDatum) {
return null;
}
let view = mDatum.ext.view;
if (!view) {
return null;
}
let datum3D = view.rootGroup;
datum3D.beginOperation();
datum3D.onMove = (begin, end, delta) => {
updateParams(params => {
params.x = roundInteractiveInput(end.x - mDatum.csys.origin.x);
params.y = roundInteractiveInput(end.y - mDatum.csys.origin.y);
params.z = roundInteractiveInput(end.z - mDatum.csys.origin.z);
})
};
function update(params) {
datum3D.csys.origin.setV(mDatum.csys.origin);
datum3D.csys.origin.x += params.x;
datum3D.csys.origin.y += params.y;
datum3D.csys.origin.z += params.z;
}
function dispose() {
datum3D.csys.copy(mDatum.csys);
datum3D.finishOperation();
}
update(initialParams);
return {
update, dispose
}
}
export default {
id: 'DATUM_MOVE',
label: 'Move Datum',
icon: 'img/cad/datum-move',
info: 'moves a datum',
paramsInfoComponent: DatumParamsRenderer,
paramsInfo: pointAsText,
previewer,
run: move,
form: MoveDatumWizard,
schema
};