mirror of
https://github.com/xibyte/jsketcher
synced 2026-01-19 14:42:10 +01:00
implementing operations for basic primitives
This commit is contained in:
parent
c230f24490
commit
6a9b0ebeca
11 changed files with 86 additions and 31 deletions
|
|
@ -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);
|
||||
|
|
|
|||
6
web/app/cad/craft/craftEnginePlugin.js
Normal file
6
web/app/cad/craft/craftEnginePlugin.js
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
import defaultCraftEngine from './defaultCraftEngine';
|
||||
|
||||
|
||||
export function activate(ctx) {
|
||||
ctx.services.craftEngine = defaultCraftEngine
|
||||
}
|
||||
14
web/app/cad/craft/defaultCraftEngine.js
Normal file
14
web/app/cad/craft/defaultCraftEngine.js
Normal 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"
|
||||
}
|
||||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
8
web/app/cad/craft/primitives/datumConsumingOperation.js
Normal file
8
web/app/cad/craft/primitives/datumConsumingOperation.js
Normal 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;
|
||||
}
|
||||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -41,9 +41,9 @@ export default function startApplication(callback) {
|
|||
UiEntryPointsPlugin,
|
||||
MenuPlugin,
|
||||
KeyboardPlugin,
|
||||
ExtensionsPlugin,
|
||||
OperationPlugin,
|
||||
CraftPlugin,
|
||||
ExtensionsPlugin,
|
||||
WizardPlugin,
|
||||
PreviewPlugin,
|
||||
CraftUiPlugin,
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue