UNPKG

gs-modelling

Version:

A set of 3D modelling functions for gs-JSON.

153 lines (140 loc) 7.08 kB
import * as gs from "gs-json"; import * as gsm from "../_export_dev"; import {} from "jasmine"; describe("Tests for Intersect Module", () => { it("test_intersect_circlePlane3D", () => { expect( test_intersect_circlePlane3D() ).toBe(true); }); it("test_intersect_polylinePolyline2D", () => { expect( test_intersect_polylinePolyline2D() ).toBe(true); }); it("test_intersect_polylinePolyline2D_v2", () => { expect( test_intersect_polylinePolyline2D_v2() ).toBe(true); }); it("test_intersect_polylinePolyline2D_v3", () => { expect( test_intersect_polylinePolyline2D_v3() ).toBe(true); }); it("test_intersect_polylinePlane3D", () => { expect( test_intersect_polylinePlane3D() ).toBe(true); }); it("test_intersect_polylinePlane3D_v2", () => { expect( test_intersect_polylinePlane3D_v2() ).toBe(true); }); it("test_intersect_circlePlane3D_v2", () => { expect( test_intersect_circlePlane3D_v2() ).toBe(true); }); it("test_intersect_polylinePlane3D_v3", () => { expect( test_intersect_polylinePlane3D_v3() ).toBe(true); }); it("test_intersect_polylinePlane3D_v4", () => { expect( test_intersect_polylinePlane3D_v4() ).toBe(true); }); }); export function test_intersect_circlePlane3D(): boolean { const m: gs.IModel = gsm.model.New(); const point1: gs.IPoint = gsm.point.FromXYZ(m, [0,0,0]); const point2: gs.IPoint = gsm.point.FromXYZ(m, [4,0,0]); const circle: gs.ICircle = gsm.circle.FromOriginYZ(point1, 10, [270, 90]); const plane: gs.IPlane = gsm.plane.FromOriginXY(point2); const isect_points: gs.IPoint[] = gsm.intersect.circlePlane3D(circle, plane); if(isect_points.length !== 1) {return false;} return true; } export function test_intersect_polylinePolyline2D(): boolean { const m: gs.IModel = gsm.model.New(); const points1: gs.IPoint[] = gsm.point.FromXYZs(m, [[0,0,0],[3,4,0]]); const points2: gs.IPoint[] = gsm.point.FromXYZs(m, [[4,0,0],[0,5,0]]); const pline1: gs.IPolyline = gsm.pline.FromPoints(points1, false); const pline2: gs.IPolyline = gsm.pline.FromPoints(points2, false); const isect_points: gs.IPoint[] = gsm.intersect.polylinePolyline2D(pline1, pline2); //console.log(isect_points[0].getPosition()); if(isect_points.length !== 1) {return false;} return true; } export function test_intersect_polylinePolyline2D_v2(): boolean { const m: gs.IModel = gsm.model.New(); const p1: gs.IPoint = gsm.point.FromXYZ(m, [0,0,0]); const c1: gs.ICircle = gsm.circle.FromOriginXY(p1, 5, null); const pl1: gs.IPolyline = gsm.pline.FromCircle(c1, 6); const p2: gs.IPoint = gsm.point.FromXYZ(m, [4.1,0.1,0]); const c2: gs.ICircle = gsm.circle.FromOriginXY(p2, 5, null); const pl2: gs.IPolyline = gsm.pline.FromCircle(c2, 6); const res: gs.IPoint[] = gsm.intersect.polylinePolyline2D(pl1, pl2); if (res.length !== 2) {return false;} return true; } export function test_intersect_polylinePolyline2D_v3(): boolean { const m: gs.IModel = gsm.model.New(); const p1: gs.IPoint = gsm.point.FromXYZ(m, [0,0,0]); const c1: gs.ICircle = gsm.circle.FromOriginXY(p1, 5, null); const pl1: gs.IPolyline = gsm.pline.FromCircle(c1, 6); const pnts: gs.IPoint[] = gsm.point.FromXYZs(m, [[-10,-1,0], [10,1,0]]); const pl2: gs.IPolyline = gsm.pline.FromPoints(pnts); const res: gs.IPoint[] = gsm.intersect.polylinePolyline2D(pl1, pl2); if (res.length !== 2) {return false;} return true; } export function test_intersect_polylinePlane3D(): boolean { //console.log("START v1==============="); const m: gs.IModel = gsm.model.New(); const points: gs.IPoint[] = gsm.point.FromXYZs(m, [[0,0,0],[2,2,5],[-1,-2,10],[1.1,2.2,15]]); const pline1: gs.IPolyline = gsm.pline.FromPoints(points, false); const o: gs.IPoint = gsm.point.FromXYZ(m, [0,0,9]); const plane: gs.IPlane = gsm.plane.FromOriginXY(o); const isect_points: gs.IPoint[] = gsm.intersect.polylinePlane3D(pline1, plane); //console.log("num isect = ", isect_points.length); if(isect_points.length !== 1) {return false;} return true; } export function test_intersect_polylinePlane3D_v2(): boolean { //console.log("START v2==============="); const m: gs.IModel = gsm.model.New(); const points: gs.IPoint[] = gsm.point.FromXYZs(m, [[1,2,3],[2,2,2],[-1,-2,-33],[1.1,2.2,3.3]]); const pline: gs.IPolyline = gsm.pline.FromPoints(points, false); const origin: gs.IPoint = gsm.point.FromXYZ(m, [0.5,0.5,0.5]); const plane: gs.IPlane = gsm.plane.FromOriginVectors(origin, [1,0,0], [0,1,0]); const isect_points: gs.IPoint[] = gsm.intersect.polylinePlane3D(pline, plane); //console.log("num isect = ", isect_points.length); if(isect_points.length !== 2) {return false;} return true; } export function test_intersect_circlePlane3D_v2(): boolean { const m: gs.IModel = gsm.model.New(); const point1: gs.IPoint = gsm.point.FromXYZ(m, [0,0,0]); const circle: gs.ICircle = gsm.circle.FromOriginXY(point1, 10, null); const plane: gs.IPlane = gsm.plane.FromOriginZX(point1); const isect_points: gs.IPoint[] = gsm.intersect.circlePlane3D(circle, plane); if(isect_points.length !== 2) {return false;} return true; } export function test_intersect_polylinePlane3D_v3(): boolean { const m: gs.IModel = gsm.model.New(); const point1: gs.IPoint = gsm.point.FromXYZ(m, [0,0,0]); const circle: gs.ICircle = gsm.circle.FromOriginXY(point1, 20, null); const pline: gs.IPolyline = gsm.pline.FromCircle(circle, 100); for (let i = 0; i < 22; i++) { const point2: gs.IPoint = gsm.point.FromXYZ(m, [0,i,0]); const plane: gs.IPlane = gsm.plane.FromOriginZX(point2); const isect_points: gs.IPoint[] = gsm.intersect.polylinePlane3D(pline, plane); //console.log("Num points = ", isect_points.length); //console.log(isect_points.map((p) => p.getPosition())); //if(isect_points.length !== 2) {return false;} } return true; } export function test_intersect_polylinePlane3D_v4(): boolean { const m: gs.IModel = gsm.model.New(); const point1a: gs.IPoint = gsm.point.FromXYZ(m, [0,0,0]); const point1b: gs.IPoint = gsm.point.FromXYZ(m, [0,0,10]); const pline: gs.IPolyline = gsm.pline.From2Points(point1a, point1b); const pline2: gs.IPolyline = gsm.pline.divide(pline, 9); for (let i = 0; i <= 10; i++) { const point2: gs.IPoint = gsm.point.FromXYZ(m, [0,0,i]); const plane: gs.IPlane = gsm.plane.FromOriginXY(point2); const isect_points: gs.IPoint[] = gsm.intersect.polylinePlane3D(pline2, plane); //console.log("Num points v4 = ", isect_points.length); //console.log(isect_points.map((p) => p.getPosition())); //if(isect_points.length !== 2) {return false;} } return true; }