diff --git a/modules/brep/brep-builder.js b/modules/brep/brep-builder.ts similarity index 80% rename from modules/brep/brep-builder.js rename to modules/brep/brep-builder.ts index f4e86221..b82fee53 100644 --- a/modules/brep/brep-builder.js +++ b/modules/brep/brep-builder.ts @@ -9,32 +9,38 @@ import BBox from 'math/bbox'; import NurbsSurface from 'geom/surfaces/nurbsSurface'; import {BrepSurface} from 'geom/surfaces/brepSurface'; import EdgeIndex from './edgeIndex'; +import {HalfEdge} from "brep/topo/edge"; +import Vector from "math/vector"; export default class BrepBuilder { + _shell: Shell; + _face: Face; + _loop: Loop; + edgeIndex: EdgeIndex; - constructor(edgeStra) { + constructor() { this._shell = new Shell(); this._face = null; this._loop = null; this.edgeIndex = new EdgeIndex(); } - get lastHalfEdge() { + get lastHalfEdge(): HalfEdge { return this._loop.halfEdges[this._loop.halfEdges.length - 1]; } - face(surface) { + face(surface: BrepSurface): BrepBuilder { this._face = new Face(surface ? surface : null); this._shell.faces.push(this._face); this._loop = null; return this; } - loop(vertices) { + loop(vertices: Vertex[]): BrepBuilder { if (this._loop === null) { this._loop = this._face.outerLoop; } else { - this._loop = new Loop(); + this._loop = new Loop(null); this._face.innerLoops.push(this._loop); } this._loop.face = this._face; @@ -57,17 +63,17 @@ export default class BrepBuilder { return this; } - edge(a, b, curveCreate, invertedToCurve, tag) { + edge(a, b, curveCreate?, invertedToCurve?, tag?): BrepBuilder { let he = this.edgeIndex.getHalfEdgeOrCreate(a, b, curveCreate, invertedToCurve, tag); this._loop.halfEdges.push(he); return this; } - vertex(x, y, z) { + vertex(x: number, y: number, z: number): Vertex { return new Vertex(new Point(x, y, z)); } - build() { + build(): Shell { for (let face of this._shell.faces) { for (let loop of face.loops) { loop.link(); @@ -90,7 +96,7 @@ export default class BrepBuilder { } } -export function createBoundingSurface(points, plane) { +export function createBoundingSurface(points: Vector[], plane?: Plane): BrepSurface { if (!plane) { const normal = normalOfCCWSeq(points); const w = points[0].dot(normal); @@ -102,7 +108,7 @@ export function createBoundingSurface(points, plane) { return createBoundingSurfaceFrom2DPoints(points2d, plane); } -export function createBoundingSurfaceFrom2DPoints(points2d, plane, minWidth, minHeight, offset = 0) { +export function createBoundingSurfaceFrom2DPoints(points2d: Vector[], plane: Plane, minWidth?: number, minHeight?: number, offset = 0): BrepSurface { let bBox = new BBox(); points2d.forEach(p => bBox.checkPoint(p)); @@ -125,9 +131,9 @@ export function createBoundingSurfaceFrom2DPoints(points2d, plane, minWidth, min return createBoundingSurfaceFromBBox(bBox, plane); } -export function createBoundingSurfaceFromBBox(bBox, plane) { +export function createBoundingSurfaceFromBBox(bBox: BBox, plane: Plane): BrepSurface { let to3D = plane.get3DTransformation(); - let polygon = bBox.toPolygon(); + let polygon = bBox.toPolygon() as Vector[]; polygon = polygon.map(p => to3D._apply(p).data()); let planeNurbs = verb.geom.NurbsSurface.byKnotsControlPointsWeights( 1, 1, [0,0,1,1], [0,0,1,1], diff --git a/modules/brep/edgeIndex.js b/modules/brep/edgeIndex.ts similarity index 70% rename from modules/brep/edgeIndex.js rename to modules/brep/edgeIndex.ts index af8e23a2..24bbfbc0 100644 --- a/modules/brep/edgeIndex.js +++ b/modules/brep/edgeIndex.ts @@ -1,13 +1,18 @@ -import {Edge} from './topo/edge'; +import {Edge, HalfEdge} from './topo/edge'; import BrepCurve from 'geom/curves/brepCurve'; +import {Vertex} from "brep/topo/vertex"; + +export type Tag = string | number; export default class EdgeIndex { + + index: Map>; constructor() { this.index = new Map(); } - addEdge(edge, tag) { + addEdge(edge: Edge, tag: Tag) { if (edge.halfEdge1) { this.addHalfEdge(edge.halfEdge1, tag); } @@ -16,11 +21,11 @@ export default class EdgeIndex { } } - addHalfEdge(he, tag) { + addHalfEdge(he: HalfEdge, tag: Tag) { this._edgesForVertex(he.vertexA).add([he, tag]); } - _edgesForVertex(v) { + _edgesForVertex(v: Vertex): Set<[HalfEdge, Tag]> { let edges = this.index.get(v); if (!edges) { edges = new Set(); @@ -29,7 +34,7 @@ export default class EdgeIndex { return edges; } - getHalfEdge(a, b, tag) { + getHalfEdge(a: Vertex, b: Vertex, tag?: Tag): HalfEdge { let edges = this.index.get(a); if (edges) { for (let [he, _tag] of edges) { @@ -41,7 +46,7 @@ export default class EdgeIndex { return null; } - getHalfEdgeOrCreate(a, b, curveCreate, invertedToCurve, tag) { + getHalfEdgeOrCreate(a: Vertex, b: Vertex, curveCreate?: () => BrepCurve, invertedToCurve?: boolean, tag?: Tag): HalfEdge { let he = this.getHalfEdge(a, b, tag); if (he === null) { let curve; diff --git a/modules/geom/impl/nurbs-ext.ts b/modules/geom/impl/nurbs-ext.ts index e59e8aba..c1d94978 100644 --- a/modules/geom/impl/nurbs-ext.ts +++ b/modules/geom/impl/nurbs-ext.ts @@ -241,7 +241,7 @@ function curveExactIntersection(curve1, curve2, u1, u2) { let d2 = verb.eval.Eval.rationalCurveDerivatives(curve2, u2, 1); let r = vec.sub(d1[0], d2[0]); let drdu = d1[1]; - let drdt = vec.mul(-1, d2[1]); + let drdt = vec.mul(d2[1], -1); return [2 * vec.dot(drdu, r), 2 * vec.dot(drdt,r)]; } let params = [u1, u2]; diff --git a/modules/brep/nurbs-tiling.js b/modules/geom/surfaces/nurbsTiling.js similarity index 100% rename from modules/brep/nurbs-tiling.js rename to modules/geom/surfaces/nurbsTiling.js diff --git a/modules/math/bbox.ts b/modules/math/bbox.ts index d0d17d28..658b105a 100644 --- a/modules/math/bbox.ts +++ b/modules/math/bbox.ts @@ -20,8 +20,7 @@ export default class BBox { this.maxZ = -Number.MAX_VALUE; } - checkBounds(x: number, y: number, z: number): void { - z = z || 0; + checkBounds(x: number, y: number, z: number = 0): void { this.minX = Math.min(this.minX, x); this.minY = Math.min(this.minY, y); this.minZ = Math.min(this.minZ, z);