Skip to content

Commit 943ba1d

Browse files
committed
fix(modeling): added transforms for path3 and slice
1 parent 77c02a3 commit 943ba1d

6 files changed

Lines changed: 46 additions & 15 deletions

File tree

packages/modeling/src/operations/transforms/mirror.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import * as plane from '../../maths/plane/index.js'
44
import * as geom2 from '../../geometries/geom2/index.js'
55
import * as geom3 from '../../geometries/geom3/index.js'
66
import * as path2 from '../../geometries/path2/index.js'
7+
import * as path3 from '../../geometries/path3/index.js'
8+
import * as slice from '../../geometries/slice/index.js'
79

810
/**
911
* Mirror the given objects using the given options.
@@ -33,9 +35,11 @@ export const mirror = (options, ...objects) => {
3335
const matrix = mat4.mirrorByPlane(mat4.create(), planeOfMirror)
3436

3537
const results = objects.map((object) => {
36-
if (path2.isA(object)) return path2.transform(matrix, object)
37-
if (geom2.isA(object)) return geom2.transform(matrix, object)
3838
if (geom3.isA(object)) return geom3.transform(matrix, object)
39+
if (geom2.isA(object)) return geom2.transform(matrix, object)
40+
if (path2.isA(object)) return path2.transform(matrix, object)
41+
if (path3.isA(object)) return path3.transform(matrix, object)
42+
if (slice.isA(object)) return slice.transform(matrix, object)
3943
// handle recursive arrays
4044
if (Array.isArray(object)) return mirror(options, ...object)
4145
return object

packages/modeling/src/operations/transforms/rotate.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import * as mat4 from '../../maths/mat4/index.js'
33
import * as geom2 from '../../geometries/geom2/index.js'
44
import * as geom3 from '../../geometries/geom3/index.js'
55
import * as path2 from '../../geometries/path2/index.js'
6+
import * as path3 from '../../geometries/path3/index.js'
7+
import * as slice from '../../geometries/slice/index.js'
68

79
/**
810
* Rotate the given objects using the given options.
@@ -28,9 +30,11 @@ export const rotate = (angles, ...objects) => {
2830
const matrix = mat4.fromTaitBryanRotation(mat4.create(), yaw, pitch, roll)
2931

3032
const results = objects.map((object) => {
31-
if (path2.isA(object)) return path2.transform(matrix, object)
32-
if (geom2.isA(object)) return geom2.transform(matrix, object)
3333
if (geom3.isA(object)) return geom3.transform(matrix, object)
34+
if (geom2.isA(object)) return geom2.transform(matrix, object)
35+
if (path2.isA(object)) return path2.transform(matrix, object)
36+
if (path3.isA(object)) return path3.transform(matrix, object)
37+
if (slice.isA(object)) return slice.transform(matrix, object)
3438
// handle recursive arrays
3539
if (Array.isArray(object)) return rotate(angles, ...object)
3640
return object

packages/modeling/src/operations/transforms/scale.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import * as mat4 from '../../maths/mat4/index.js'
33
import * as geom2 from '../../geometries/geom2/index.js'
44
import * as geom3 from '../../geometries/geom3/index.js'
55
import * as path2 from '../../geometries/path2/index.js'
6+
import * as path3 from '../../geometries/path3/index.js'
7+
import * as slice from '../../geometries/slice/index.js'
68

79
/**
810
* Scale the given objects using the given options.
@@ -26,9 +28,11 @@ export const scale = (factors, ...objects) => {
2628
const matrix = mat4.fromScaling(mat4.create(), factors)
2729

2830
const results = objects.map((object) => {
29-
if (path2.isA(object)) return path2.transform(matrix, object)
30-
if (geom2.isA(object)) return geom2.transform(matrix, object)
3131
if (geom3.isA(object)) return geom3.transform(matrix, object)
32+
if (geom2.isA(object)) return geom2.transform(matrix, object)
33+
if (path2.isA(object)) return path2.transform(matrix, object)
34+
if (path3.isA(object)) return path3.transform(matrix, object)
35+
if (slice.isA(object)) return slice.transform(matrix, object)
3236
// handle recursive arrays
3337
if (Array.isArray(object)) return scale(factors, ...object)
3438
return object

packages/modeling/src/operations/transforms/transform.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import * as geom2 from '../../geometries/geom2/index.js'
22
import * as geom3 from '../../geometries/geom3/index.js'
33
import * as path2 from '../../geometries/path2/index.js'
4+
import * as path3 from '../../geometries/path3/index.js'
5+
import * as slice from '../../geometries/slice/index.js'
46

57
/**
68
* Transform the given objects using the given matrix.
@@ -16,9 +18,11 @@ export const transform = (matrix, ...objects) => {
1618
// TODO how to check that the matrix is REAL?
1719

1820
const results = objects.map((object) => {
19-
if (path2.isA(object)) return path2.transform(matrix, object)
20-
if (geom2.isA(object)) return geom2.transform(matrix, object)
2121
if (geom3.isA(object)) return geom3.transform(matrix, object)
22+
if (geom2.isA(object)) return geom2.transform(matrix, object)
23+
if (path2.isA(object)) return path2.transform(matrix, object)
24+
if (path3.isA(object)) return path3.transform(matrix, object)
25+
if (slice.isA(object)) return slice.transform(matrix, object)
2226
// handle recursive arrays
2327
if (Array.isArray(object)) return transform(matrix, ...object)
2428
return object

packages/modeling/src/operations/transforms/transform.test.js

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ import { comparePoints, comparePolygonsAsPoints } from '../../../test/helpers/in
44

55
import { mat4 } from '../../maths/index.js'
66

7-
import { geom2, geom3, path2 } from '../../geometries/index.js'
7+
import { geom2, geom3, path2, path3 } from '../../geometries/index.js'
88

99
import { transform } from './index.js'
1010

11-
test('transform: transforming of a path2 produces expected changes to points', (t) => {
11+
test('transform: (path2)', (t) => {
1212
const matrix = mat4.fromTranslation(mat4.create(), [2, 2, 0])
1313
let geometry = path2.fromPoints({}, [[0, 0], [1, 0]])
1414

@@ -19,7 +19,18 @@ test('transform: transforming of a path2 produces expected changes to points', (
1919
t.true(comparePoints(obs, exp))
2020
})
2121

22-
test('transform: transforming of a geom2 produces expected changes to sides', (t) => {
22+
test('transform: (path3)', (t) => {
23+
const matrix = mat4.fromTranslation(mat4.create(), [2, 2, 2])
24+
let geometry = path3.fromVertices({ closed: true }, [[0, 0, 0], [1, 0, 1], [3, 2, 1]])
25+
26+
geometry = transform(matrix, geometry)
27+
const obs = path3.toVertices(geometry)
28+
const exp = [[2, 2, 2], [3, 2, 3], [5, 4, 3]]
29+
t.notThrows(() => path3.validate(geometry))
30+
t.true(comparePoints(obs, exp))
31+
})
32+
33+
test('transform: (geom2)', (t) => {
2334
const matrix = mat4.fromScaling(mat4.create(), [5, 5, 5])
2435
let geometry = geom2.create([[[0, 0], [1, 0], [0, 1]]])
2536

@@ -30,7 +41,7 @@ test('transform: transforming of a geom2 produces expected changes to sides', (t
3041
t.true(comparePoints(obs, exp))
3142
})
3243

33-
test('transform: transforming of a geom3 produces expected changes to polygons', (t) => {
44+
test('transform: (geom3)', (t) => {
3445
const matrix = mat4.fromTranslation(mat4.create(), [-3, -3, -3])
3546
const points = [
3647
[[-2, -7, -12], [-2, -7, 18], [-2, 13, 18], [-2, 13, -12]],
@@ -55,7 +66,7 @@ test('transform: transforming of a geom3 produces expected changes to polygons',
5566
t.true(comparePolygonsAsPoints(obs, exp))
5667
})
5768

58-
test('transform: transforming of multiple objects produces expected changes', (t) => {
69+
test('transform: (multiple objects)', (t) => {
5970
const junk = 'hello'
6071
const geometry1 = path2.fromPoints({}, [[-5, 5], [5, 5], [-5, -5], [10, -5]])
6172
const geometry2 = geom2.create([[[-5, -5], [0, 5], [10, -5]]])

packages/modeling/src/operations/transforms/translate.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import * as mat4 from '../../maths/mat4/index.js'
33
import * as geom2 from '../../geometries/geom2/index.js'
44
import * as geom3 from '../../geometries/geom3/index.js'
55
import * as path2 from '../../geometries/path2/index.js'
6+
import * as path3 from '../../geometries/path3/index.js'
7+
import * as slice from '../../geometries/slice/index.js'
68

79
/**
810
* Translate the given objects using the given options.
@@ -24,9 +26,11 @@ export const translate = (offset, ...objects) => {
2426
const matrix = mat4.fromTranslation(mat4.create(), offset)
2527

2628
const results = objects.map((object) => {
27-
if (path2.isA(object)) return path2.transform(matrix, object)
28-
if (geom2.isA(object)) return geom2.transform(matrix, object)
2929
if (geom3.isA(object)) return geom3.transform(matrix, object)
30+
if (geom2.isA(object)) return geom2.transform(matrix, object)
31+
if (path2.isA(object)) return path2.transform(matrix, object)
32+
if (path3.isA(object)) return path3.transform(matrix, object)
33+
if (slice.isA(object)) return slice.transform(matrix, object)
3034
// handle recursive arrays
3135
if (Array.isArray(object)) return translate(offset, ...object)
3236
return object

0 commit comments

Comments
 (0)