mirror of
https://github.com/xibyte/jsketcher
synced 2025-12-07 17:04:58 +01:00
organizing math module - extracting out basis
This commit is contained in:
parent
9dbd59a35d
commit
37c8037e65
11 changed files with 38 additions and 37 deletions
23
modules/math/basis.ts
Normal file
23
modules/math/basis.ts
Normal 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];
|
||||
}
|
||||
|
||||
|
|
@ -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};
|
||||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Reference in a new issue