diff --git a/modules/math/basis.ts b/modules/math/basis.ts new file mode 100644 index 00000000..e3a8e6ac --- /dev/null +++ b/modules/math/basis.ts @@ -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]; +} + diff --git a/modules/math/l3space.ts b/modules/math/l3space.ts index bd7bee48..a22e6e7a 100644 --- a/modules/math/l3space.ts +++ b/modules/math/l3space.ts @@ -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}; \ No newline at end of file +export {ORIGIN, AXIS}; \ No newline at end of file diff --git a/web/app/brep/brep-enclose.js b/web/app/brep/brep-enclose.js index 09ee2702..65dac9b5 100644 --- a/web/app/brep/brep-enclose.js +++ b/web/app/brep/brep-enclose.js @@ -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(); diff --git a/web/app/brep/geom/impl/plane.ts b/web/app/brep/geom/impl/plane.ts index b3b48679..43b9ba72 100644 --- a/web/app/brep/geom/impl/plane.ts +++ b/web/app/brep/geom/impl/plane.ts @@ -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 { diff --git a/web/app/cad/craft/primitives/simplePlane/simplePlaneOperation.js b/web/app/cad/craft/primitives/simplePlane/simplePlaneOperation.js index dc132e3a..a5e0bce8 100644 --- a/web/app/cad/craft/primitives/simplePlane/simplePlaneOperation.js +++ b/web/app/cad/craft/primitives/simplePlane/simplePlaneOperation.js @@ -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; diff --git a/web/app/cad/legacy/mesh/wizards/box.js b/web/app/cad/legacy/mesh/wizards/box.js index 1dec1a03..352e6f59 100644 --- a/web/app/cad/legacy/mesh/wizards/box.js +++ b/web/app/cad/legacy/mesh/wizards/box.js @@ -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); diff --git a/web/app/cad/legacy/mesh/wizards/plane.js b/web/app/cad/legacy/mesh/wizards/plane.js index bd9ae452..234a404f 100644 --- a/web/app/cad/legacy/mesh/wizards/plane.js +++ b/web/app/cad/legacy/mesh/wizards/plane.js @@ -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); diff --git a/web/app/cad/legacy/mesh/wizards/sphere.js b/web/app/cad/legacy/mesh/wizards/sphere.js index 2e263a67..528f6a18 100644 --- a/web/app/cad/legacy/mesh/wizards/sphere.js +++ b/web/app/cad/legacy/mesh/wizards/sphere.js @@ -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' diff --git a/web/app/cad/legacy/mesh/wizards/transform.js b/web/app/cad/legacy/mesh/wizards/transform.js index c7404197..3c7062f3 100644 --- a/web/app/cad/legacy/mesh/wizards/transform.js +++ b/web/app/cad/legacy/mesh/wizards/transform.js @@ -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); diff --git a/web/app/cad/model/mface.ts b/web/app/cad/model/mface.ts index 56ea06e8..3566c9bc 100644 --- a/web/app/cad/model/mface.ts +++ b/web/app/cad/model/mface.ts @@ -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 { diff --git a/web/app/cad/scene/wrappers/sceneObject.js b/web/app/cad/scene/wrappers/sceneObject.js index d74d8303..6af25f5f 100644 --- a/web/app/cad/scene/wrappers/sceneObject.js +++ b/web/app/cad/scene/wrappers/sceneObject.js @@ -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 {