implementing operations for basic primitives

This commit is contained in:
Val Erastov 2018-10-27 00:52:11 -07:00
parent c230f24490
commit 6a9b0ebeca
11 changed files with 86 additions and 31 deletions

View file

@ -132,6 +132,12 @@ export default class Vector {
toArray() {
return [this.x, this.y, this.z];
}
copyToData(data) {
data[0] = this.x;
data[1] = this.y;
data[2] = this.z;
}
static fromData(arr) {
return new Vector().set3(arr);

View file

@ -0,0 +1,6 @@
import defaultCraftEngine from './defaultCraftEngine';
export function activate(ctx) {
ctx.services.craftEngine = defaultCraftEngine
}

View file

@ -0,0 +1,14 @@
export default {
createBox: params => notImplemented,
createSphere: params => notImplemented,
createCone: params => notImplemented,
createCylinder: params => notImplemented,
createTorus: params => notImplemented,
}
function notImplemented() {
throw "engine doesn't support this operation"
}

View file

@ -2,14 +2,16 @@ import BoxWizard from './BoxWizard';
import {BoxGeometry} from 'three';
import schema from './boxOpSchema';
import primitivePreviewer from '../primitivePreviewer';
import CSys from '../../../../math/csys';
import datumConsumingOperation from '../datumConsumingOperation';
function run(params, services) {
let mDatum = params.datum && services.cadRegistry.findDatum(params.datum);
return {
outdated: mDatum ? [mDatum] : [],
created: []
}
return datumConsumingOperation(params, services, csys => services.craftEngine.createBox({
csys,
width: params.width,
height: params.height,
depth: params.depth
}));
}
export default {

View file

@ -4,14 +4,15 @@ import ConeWizard from './ConeWizard';
import {IMAGINARY_SURFACE_MATERIAL} from '../../../preview/scenePreviewer';
import CSys from '../../../../math/csys';
import * as SceneGraph from '../../../../../../modules/scene/sceneGraph';
import datumConsumingOperation from '../datumConsumingOperation';
function run(params, services) {
let mDatum = params.datum && services.cadRegistry.findDatum(params.datum);
return {
outdated: mDatum ? [mDatum] : [],
created: []
}
return datumConsumingOperation(params, services, csys => services.craftEngine.createCone({
csys,
radius: params.radius,
frustum: params.frustum,
height: params.height
}));
}
function previewer(ctx, initialParams) {

View file

@ -2,14 +2,14 @@ import {CylinderGeometry} from 'three';
import schema from './cylinderOpSchema';
import primitivePreviewer from '../primitivePreviewer';
import CylinderWizard from './CylinderWizard';
import datumConsumingOperation from '../datumConsumingOperation';
function run(params, services) {
let mDatum = params.datum && services.cadRegistry.findDatum(params.datum);
return {
outdated: mDatum ? [mDatum] : [],
created: []
}
return datumConsumingOperation(params, services, csys => services.craftEngine.createCylinder({
csys,
radius: params.radius,
height: params.height
}));
}
export default {

View file

@ -0,0 +1,8 @@
export default function datumConsumingOperation(params, services, run) {
let mDatum = params.datum && services.cadRegistry.findDatum(params.datum);
let res = run(mDatum.csys);
if (mDatum) {
res.outdated.push(mDatum);
}
return res;
}

View file

@ -2,14 +2,13 @@ import {SphereGeometry} from 'three';
import schema from './sphereOpSchema';
import primitivePreviewer from '../primitivePreviewer';
import SphereWizard from './SphereWizard';
import datumConsumingOperation from '../datumConsumingOperation';
function run(params, services) {
let mDatum = params.datum && services.cadRegistry.findDatum(params.datum);
return {
outdated: mDatum ? [mDatum] : [],
created: []
}
return datumConsumingOperation(params, services, csys => services.craftEngine.createSphere({
csys,
radius: params.radius,
}));
}
export default {

View file

@ -4,14 +4,14 @@ import TorusWizard from './TorusWizard';
import {IMAGINARY_SURFACE_MATERIAL} from '../../../preview/scenePreviewer';
import CSys from '../../../../math/csys';
import * as SceneGraph from '../../../../../../modules/scene/sceneGraph';
import datumConsumingOperation from '../datumConsumingOperation';
function run(params, services) {
let mDatum = params.datum && services.cadRegistry.findDatum(params.datum);
return {
outdated: mDatum ? [mDatum] : [],
created: []
}
return datumConsumingOperation(params, services, csys => services.craftEngine.createTorus({
csys,
radius: params.radius,
tube: params.tube
}));
}
function previewer(ctx, initialParams) {

View file

@ -41,9 +41,9 @@ export default function startApplication(callback) {
UiEntryPointsPlugin,
MenuPlugin,
KeyboardPlugin,
ExtensionsPlugin,
OperationPlugin,
CraftPlugin,
ExtensionsPlugin,
WizardPlugin,
PreviewPlugin,
CraftUiPlugin,

View file

@ -120,6 +120,25 @@ export function length(v) {
return Math.sqrt(lengthSq(v));
}
export function copy(to, from) {
for (let i = 0; i < v.length; i++) {
to[i] = from(v[i]);
}
return to;
}
export function clone(v) {
return copy(create(v.length), v);
}
export function create(dim) {
let out = [];
for (let i = 0; i < dim; i++) {
out[i] = 0;
}
return out;
}
const sq = v => v * v;
export function distanceSq(v1, v2) {