organizing math module - extracting out basis

This commit is contained in:
Val Erastov (xibyte) 2020-07-18 23:11:02 -07:00
parent 9dbd59a35d
commit 37c8037e65
11 changed files with 38 additions and 37 deletions

23
modules/math/basis.ts Normal file
View file

@ -0,0 +1,23 @@
import {AXIS} from "math/l3space";
import Vector from "math/vector";
export type Basis = [Vector, Vector, Vector];
export const IDENTITY_BASIS: Basis = Object.freeze([AXIS.X, AXIS.Y, AXIS.Z]) as Basis;
export const STANDARD_BASES = Object.freeze({
'XY': IDENTITY_BASIS,
'XZ': [AXIS.X, AXIS.Z, AXIS.Y],
'ZY': [AXIS.Z, AXIS.Y, AXIS.X]
});
export function BasisForPlane(normal: Vector, alignY: Vector = AXIS.Y, alignZ: Vector = AXIS.Z): [Vector, Vector, Vector] {
let alignPlane, x, y;
if (Math.abs(normal.dot(alignY)) < 0.5) {
alignPlane = normal.cross(alignY);
} else {
alignPlane = normal.cross(alignZ);
}
y = alignPlane.cross(normal);
x = y.cross(normal);
return [x, y, normal];
}

View file

@ -1,7 +1,5 @@
import Vector from 'math/vector';
export type Basis = [Vector, Vector, Vector];
export type Vec3 = [number, number, number];
const freeze = Object.freeze;
@ -14,26 +12,5 @@ const AXIS = freeze({
Z: freeze(new Vector(0, 0, 1))
});
// @ts-ignore
const IDENTITY_BASIS: Basis = Object.freeze([AXIS.X, AXIS.Y, AXIS.Z]);
export const STANDARD_BASES = freeze({
'XY': IDENTITY_BASIS,
'XZ': [AXIS.X, AXIS.Z, AXIS.Y],
'ZY': [AXIS.Z, AXIS.Y, AXIS.X]
});
function BasisForPlane(normal: Vector, alignY: Vector = AXIS.Y, alignZ: Vector = AXIS.Z): [Vector, Vector, Vector] {
let alignPlane, x, y;
if (Math.abs(normal.dot(alignY)) < 0.5) {
alignPlane = normal.cross(alignY);
} else {
alignPlane = normal.cross(alignZ);
}
y = alignPlane.cross(normal);
x = y.cross(normal);
return [x, y, normal];
}
export {ORIGIN, IDENTITY_BASIS, AXIS, BasisForPlane};
export {ORIGIN, AXIS};

View file

@ -3,13 +3,13 @@ import {Face} from './topo/face';
import {Edge} from './topo/edge';
import BrepCurve from './geom/curves/brepCurve';
import {Plane} from './geom/impl/plane';
import {BasisForPlane} from 'math/l3space';
import * as cad_utils from '../cad/cad-utils';
import * as math from '../../../modules/math/commons';
import {createBoundingSurface} from './brep-builder';
import NurbsSurface from './geom/surfaces/nurbsSurface';
import {BrepSurface} from './geom/surfaces/brepSurface';
import {Matrix3} from 'math/matrix';
import {BasisForPlane} from "math/basis";
function isCCW(points, normal) {
const tr2d = new Matrix3().setBasis(BasisForPlane(normal)).invert();

View file

@ -1,8 +1,9 @@
import {Point} from '../point';
import {Line} from './line';
import {AXIS, BasisForPlane} from '../../../../../modules/math/l3space';
import {AXIS} from 'math/l3space';
import {eqTol, veq} from '../tolerance';
import {Matrix3} from "math/matrix";
import {Matrix3} from 'math/matrix';
import {BasisForPlane} from 'math/basis';
export class Plane {

View file

@ -1,11 +1,11 @@
import {createMeshGeometry} from 'scene/geoms';
import {STANDARD_BASES} from '../../../../../../modules/math/l3space';
import {Plane} from '../../../../brep/geom/impl/plane';
import Vector from 'math/vector';
import PlaneWizard from './SimplePlaneWizard';
import {MOpenFaceShell} from '../../../model/mopenFace';
import schema from './simplePlaneOpSchema';
import {PlaneSurfacePrototype} from '../../../model/surfacePrototype';
import {STANDARD_BASES} from 'math/basis';
function paramsToPlane({orientation, parallelTo, depth}, cadRegistry) {
let face = null;

View file

@ -1,7 +1,8 @@
import {AXIS, IDENTITY_BASIS} from '../../../../../../modules/math/l3space'
import {AXIS} from '../../../../../../modules/math/l3space'
import * as tk from '../../../../ui/toolkit.js'
import {FACE_COLOR} from '../../../cad-utils'
import {Wizard} from './wizard-commons'
import {IDENTITY_BASIS} from "../../../../../../modules/math/basis";
export function BoxWizard(viewer, initParams) {
Wizard.call(this, viewer, initParams);

View file

@ -1,7 +1,8 @@
import {AXIS, IDENTITY_BASIS} from 'math/l3space'
import {AXIS} from 'math/l3space'
import * as tk from '../../../../ui/toolkit.js'
import {FACE_COLOR} from '../../../cad-utils'
import {Wizard} from './wizard-commons'
import {IDENTITY_BASIS} from 'math/basis';
export function PlaneWizard(app, initParams) {
Wizard.call(this, app.viewer, initParams);

View file

@ -1,4 +1,3 @@
import {AXIS, IDENTITY_BASIS} from '../../../../../../modules/math/l3space'
import * as tk from '../../../../ui/toolkit.js'
import {FACE_COLOR} from '../../../cad-utils'
import {Wizard} from './wizard-commons'

View file

@ -1,7 +1,8 @@
import {AXIS, IDENTITY_BASIS} from '../../../../../../modules/math/l3space'
import {AXIS} from '../../../../../../modules/math/l3space'
import * as tk from '../../../../ui/toolkit.js'
import {FACE_COLOR} from '../../../cad-utils'
import {Wizard} from './wizard-commons'
import {IDENTITY_BASIS} from "../../../../../../modules/math/basis";
export function TransformWizard(viewer, solid, initParams) {
Wizard.call(this, viewer, initParams);

View file

@ -1,6 +1,5 @@
import {MObject} from './mobject';
import Vector from 'math/vector';
import {Basis, BasisForPlane} from 'math/l3space';
import {MSketchObject} from './msketchObject';
import {EMPTY_ARRAY} from 'gems/iterables';
import CSys from 'math/csys';
@ -8,6 +7,7 @@ import {MSketchLoop} from './mloop';
import {ProductionInfo} from './productionInfo';
import {MBrepShell, MShell} from "./mshell";
import BBox from "../../math/bbox";
import {Basis, BasisForPlane} from "math/basis";
export class MFace extends MObject {

View file

@ -1,9 +1,7 @@
import Vector from 'math/vector';
import {BasisForPlane} from '../../../../../modules/math/l3space'
import DPR from 'dpr'
import {setAttribute} from "scene/objectData";
import {genSolidId} from "../../craft/cadRegistryPlugin";
import {getAttribute} from '../../../../../modules/scene/objectData';
import {getAttribute, setAttribute} from "scene/objectData";
import {BasisForPlane} from 'math/basis';
//todo: rename to shell
export class SceneSolid {