@jscad/modeling 2.7.2 → 2.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +48 -0
- package/dist/jscad-modeling.min.js +443 -398
- package/package.json +2 -2
- package/src/curves/bezier/tangentAt.test.js +1 -1
- package/src/curves/bezier/valueAt.test.js +1 -1
- package/src/geometries/geom2/index.d.ts +1 -0
- package/src/geometries/geom2/index.js +12 -1
- package/src/geometries/geom2/isA.js +2 -2
- package/src/geometries/geom2/toCompactBinary.js +4 -4
- package/src/geometries/geom2/toString.js +1 -1
- package/src/geometries/geom2/transform.test.js +1 -1
- package/src/geometries/geom2/validate.d.ts +3 -0
- package/src/geometries/geom2/validate.js +36 -0
- package/src/geometries/geom3/fromCompactBinary.js +1 -1
- package/src/geometries/geom3/index.d.ts +1 -0
- package/src/geometries/geom3/index.js +19 -1
- package/src/geometries/geom3/isA.js +2 -2
- package/src/geometries/geom3/toCompactBinary.js +4 -4
- package/src/geometries/geom3/toString.js +1 -1
- package/src/geometries/geom3/transform.test.js +1 -1
- package/src/geometries/geom3/validate.d.ts +3 -0
- package/src/geometries/geom3/validate.js +62 -0
- package/src/geometries/index.js +8 -1
- package/src/geometries/path2/eachPoint.js +3 -3
- package/src/geometries/path2/index.d.ts +1 -0
- package/src/geometries/path2/index.js +13 -1
- package/src/geometries/path2/isA.js +2 -2
- package/src/geometries/path2/reverse.js +4 -4
- package/src/geometries/path2/toCompactBinary.js +6 -6
- package/src/geometries/path2/toString.js +1 -1
- package/src/geometries/path2/transform.test.js +1 -1
- package/src/geometries/path2/validate.d.ts +3 -0
- package/src/geometries/path2/validate.js +41 -0
- package/src/geometries/poly2/arePointsInside.js +0 -35
- package/src/geometries/poly2/arePointsInside.test.js +1 -1
- package/src/geometries/poly2/index.js +6 -0
- package/src/geometries/poly3/index.d.ts +1 -0
- package/src/geometries/poly3/index.js +9 -2
- package/src/geometries/poly3/invert.js +7 -1
- package/src/geometries/poly3/isA.js +2 -2
- package/src/geometries/poly3/isConvex.js +2 -2
- package/src/geometries/poly3/measureArea.js +4 -4
- package/src/geometries/poly3/measureArea.test.js +16 -16
- package/src/geometries/poly3/measureBoundingBox.js +2 -2
- package/src/geometries/poly3/measureBoundingSphere.js +2 -2
- package/src/geometries/poly3/measureBoundingSphere.test.js +8 -8
- package/src/geometries/poly3/measureSignedVolume.js +4 -4
- package/src/geometries/poly3/toPoints.js +2 -2
- package/src/geometries/poly3/toString.js +2 -2
- package/src/geometries/poly3/transform.js +2 -2
- package/src/geometries/poly3/validate.d.ts +4 -0
- package/src/geometries/poly3/validate.js +50 -0
- package/src/maths/index.js +1 -1
- package/src/maths/line2/equals.js +2 -2
- package/src/maths/line2/fromValues.js +2 -2
- package/src/maths/line2/intersectPointOfLines.js +1 -1
- package/src/maths/line2/intersectPointOfLines.test.js +1 -1
- package/src/maths/line2/reverse.test.js +1 -1
- package/src/maths/line2/transform.test.js +1 -1
- package/src/maths/line3/equals.js +2 -2
- package/src/maths/line3/reverse.test.js +1 -1
- package/src/maths/line3/transform.test.js +1 -1
- package/src/maths/mat4/fromVectorRotation.js +1 -1
- package/src/maths/mat4/fromVectorRotation.test.js +1 -1
- package/src/maths/mat4/identity.test.js +1 -1
- package/src/maths/mat4/invert.js +18 -18
- package/src/maths/mat4/isIdentity.js +1 -1
- package/src/maths/mat4/isMirroring.js +4 -4
- package/src/maths/mat4/isMirroring.test.js +1 -1
- package/src/maths/mat4/leftMultiplyVec3.js +2 -2
- package/src/maths/mat4/toString.js +2 -2
- package/src/maths/mat4/translate.test.js +1 -1
- package/src/maths/plane/flip.test.js +1 -1
- package/src/maths/plane/fromPoints.d.ts +1 -1
- package/src/maths/plane/fromPoints.js +1 -3
- package/src/maths/plane/signedDistanceToPoint.js +1 -1
- package/src/maths/plane/transform.test.js +1 -1
- package/src/maths/utils/aboutEqualNormals.js +2 -2
- package/src/maths/vec2/abs.d.ts +1 -1
- package/src/maths/vec2/add.test.js +1 -1
- package/src/maths/vec2/angleDegrees.d.ts +1 -1
- package/src/maths/vec2/angleRadians.d.ts +1 -1
- package/src/maths/vec2/create.js +1 -1
- package/src/maths/vec2/cross.test.js +1 -1
- package/src/maths/vec2/divide.test.js +1 -1
- package/src/maths/vec2/fromAngleDegrees.js +1 -1
- package/src/maths/vec2/fromScalar.js +1 -1
- package/src/maths/vec2/length.d.ts +1 -1
- package/src/maths/vec2/length.js +1 -1
- package/src/maths/vec2/lerp.test.js +1 -1
- package/src/maths/vec2/multiply.test.js +1 -1
- package/src/maths/vec2/negate.test.js +1 -1
- package/src/maths/vec2/normal.js +1 -1
- package/src/maths/vec2/normalize.d.ts +1 -1
- package/src/maths/vec2/normalize.test.js +1 -1
- package/src/maths/vec2/rotate.test.js +1 -1
- package/src/maths/vec2/squaredLength.d.ts +1 -1
- package/src/maths/vec2/squaredLength.js +3 -3
- package/src/maths/vec2/subtract.test.js +1 -1
- package/src/maths/vec2/toString.js +1 -1
- package/src/maths/vec2/transform.test.js +1 -1
- package/src/maths/vec3/abs.d.ts +1 -1
- package/src/maths/vec3/add.test.js +1 -1
- package/src/maths/vec3/cross.test.js +1 -1
- package/src/maths/vec3/divide.test.js +1 -1
- package/src/maths/vec3/fromScalar.js +1 -1
- package/src/maths/vec3/fromVec2.d.ts +1 -1
- package/src/maths/vec3/fromVec2.js +3 -3
- package/src/maths/vec3/length.d.ts +1 -1
- package/src/maths/vec3/length.js +4 -4
- package/src/maths/vec3/lerp.test.js +1 -1
- package/src/maths/vec3/multiply.test.js +1 -1
- package/src/maths/vec3/negate.d.ts +1 -1
- package/src/maths/vec3/negate.test.js +1 -1
- package/src/maths/vec3/normalize.d.ts +1 -1
- package/src/maths/vec3/normalize.test.js +1 -1
- package/src/maths/vec3/rotateX.test.js +1 -1
- package/src/maths/vec3/rotateY.test.js +1 -1
- package/src/maths/vec3/rotateZ.test.js +1 -1
- package/src/maths/vec3/scale.test.js +1 -1
- package/src/maths/vec3/squaredLength.d.ts +1 -1
- package/src/maths/vec3/squaredLength.js +4 -4
- package/src/maths/vec3/subtract.test.js +1 -1
- package/src/maths/vec3/toString.js +1 -1
- package/src/maths/vec3/transform.test.js +1 -1
- package/src/maths/vec4/toString.js +1 -1
- package/src/maths/vec4/transform.test.js +1 -1
- package/src/measurements/measureBoundingSphere.js +4 -4
- package/src/measurements/measureCenterOfMass.js +1 -1
- package/src/measurements/measureCenterOfMass.test.js +2 -2
- package/src/operations/booleans/intersect.test.js +8 -0
- package/src/operations/booleans/mayOverlap.js +3 -3
- package/src/operations/booleans/retessellate.js +2 -2
- package/src/operations/booleans/scission.js +1 -1
- package/src/operations/booleans/scission.test.js +4 -4
- package/src/operations/booleans/subtract.js +1 -1
- package/src/operations/booleans/subtract.test.js +8 -0
- package/src/operations/booleans/trees/Node.js +10 -16
- package/src/operations/booleans/trees/PolygonTreeNode.js +13 -14
- package/src/operations/booleans/trees/Tree.js +1 -2
- package/src/operations/booleans/trees/splitPolygonByPlane.js +2 -3
- package/src/operations/booleans/union.test.js +28 -1
- package/src/operations/booleans/unionGeom3Sub.js +1 -1
- package/src/operations/expansions/expand.js +2 -2
- package/src/operations/expansions/expand.test.js +32 -55
- package/src/operations/expansions/expandShell.js +24 -18
- package/src/operations/expansions/offset.js +1 -1
- package/src/operations/expansions/offset.test.js +50 -89
- package/src/operations/expansions/offsetFromPoints.js +11 -6
- package/src/operations/extrusions/earcut/assignHoles.js +91 -0
- package/src/operations/extrusions/earcut/assignHoles.test.js +74 -0
- package/src/operations/extrusions/earcut/eliminateHoles.js +131 -0
- package/src/operations/extrusions/earcut/index.js +252 -0
- package/src/operations/extrusions/earcut/linkedList.js +58 -0
- package/src/operations/extrusions/earcut/linkedListSort.js +54 -0
- package/src/operations/extrusions/earcut/linkedPolygon.js +197 -0
- package/src/operations/extrusions/earcut/polygonHierarchy.js +64 -0
- package/src/operations/extrusions/earcut/triangle.js +16 -0
- package/src/operations/extrusions/extrudeFromSlices.js +10 -3
- package/src/operations/extrusions/extrudeFromSlices.test.js +47 -31
- package/src/operations/extrusions/extrudeLinear.js +10 -5
- package/src/operations/extrusions/extrudeLinear.test.js +91 -35
- package/src/operations/extrusions/extrudeLinearGeom2.js +5 -2
- package/src/operations/extrusions/extrudeLinearPath2.js +24 -0
- package/src/operations/extrusions/extrudeRectangular.js +1 -1
- package/src/operations/extrusions/extrudeRectangular.test.js +22 -15
- package/src/operations/extrusions/extrudeRotate.test.js +31 -27
- package/src/operations/extrusions/project.js +1 -1
- package/src/operations/extrusions/project.test.js +5 -5
- package/src/operations/extrusions/slice/calculatePlane.js +7 -4
- package/src/operations/extrusions/slice/isA.js +2 -2
- package/src/operations/extrusions/slice/repairSlice.js +47 -0
- package/src/operations/extrusions/slice/toPolygons.js +24 -60
- package/src/operations/hulls/hull.test.js +25 -2
- package/src/operations/hulls/hullChain.js +1 -1
- package/src/operations/hulls/hullChain.test.js +6 -4
- package/src/operations/hulls/hullGeom2.js +1 -1
- package/src/operations/hulls/hullPath2.js +6 -4
- package/src/operations/hulls/hullPath2.test.js +16 -0
- package/src/operations/hulls/hullPoints2.test.js +1 -1
- package/src/operations/modifiers/edges.js +1 -1
- package/src/operations/modifiers/generalize.js +1 -1
- package/src/operations/modifiers/generalize.test.js +6 -0
- package/src/operations/modifiers/snap.test.js +3 -3
- package/src/operations/transforms/align.d.ts +1 -1
- package/src/operations/transforms/align.test.js +12 -0
- package/src/operations/transforms/center.js +17 -17
- package/src/operations/transforms/center.test.js +12 -0
- package/src/operations/transforms/mirror.js +12 -12
- package/src/operations/transforms/mirror.test.js +16 -0
- package/src/operations/transforms/rotate.js +12 -12
- package/src/operations/transforms/rotate.test.js +10 -0
- package/src/operations/transforms/scale.js +19 -19
- package/src/operations/transforms/scale.test.js +15 -0
- package/src/operations/transforms/transform.js +3 -3
- package/src/operations/transforms/transform.test.js +5 -0
- package/src/operations/transforms/translate.js +14 -14
- package/src/operations/transforms/translate.test.js +16 -0
- package/src/primitives/arc.js +1 -1
- package/src/primitives/arc.test.js +11 -0
- package/src/primitives/circle.test.js +15 -9
- package/src/primitives/cube.test.js +3 -0
- package/src/primitives/cuboid.test.js +9 -24
- package/src/primitives/cylinder.test.js +7 -4
- package/src/primitives/cylinderElliptic.js +13 -6
- package/src/primitives/cylinderElliptic.test.js +72 -52
- package/src/primitives/ellipse.js +3 -1
- package/src/primitives/ellipse.test.js +14 -8
- package/src/primitives/ellipsoid.js +7 -5
- package/src/primitives/ellipsoid.test.js +84 -82
- package/src/primitives/geodesicSphere.d.ts +0 -1
- package/src/primitives/geodesicSphere.test.js +3 -0
- package/src/primitives/line.test.js +1 -0
- package/src/primitives/polygon.test.js +15 -10
- package/src/primitives/polyhedron.js +1 -1
- package/src/primitives/polyhedron.test.js +14 -42
- package/src/primitives/rectangle.test.js +3 -0
- package/src/primitives/roundedCuboid.test.js +5 -0
- package/src/primitives/roundedCylinder.js +6 -4
- package/src/primitives/roundedCylinder.test.js +40 -36
- package/src/primitives/roundedRectangle.test.js +5 -0
- package/src/primitives/sphere.test.js +52 -73
- package/src/primitives/square.test.js +3 -0
- package/src/primitives/star.test.js +6 -0
- package/src/primitives/torus.d.ts +0 -1
- package/src/primitives/torus.test.js +8 -1
- package/src/primitives/triangle.js +1 -1
- package/src/primitives/triangle.test.js +7 -0
- package/src/text/vectorText.js +2 -2
- package/src/utils/areAllShapesTheSameType.js +2 -2
- package/src/utils/areAllShapesTheSameType.test.js +17 -0
- package/src/utils/index.d.ts +1 -0
- package/src/utils/index.js +3 -1
- package/src/utils/padArrayToLength.js +1 -1
- package/src/utils/trigonometry.d.ts +2 -0
- package/src/utils/trigonometry.js +35 -0
- package/src/utils/trigonometry.test.js +25 -0
- package/test/helpers/nearlyEqual.js +4 -1
|
@@ -10,6 +10,7 @@ test('cylinderElliptic (defaults)', (t) => {
|
|
|
10
10
|
const obs = cylinderElliptic()
|
|
11
11
|
const pts = geom3.toPoints(obs)
|
|
12
12
|
|
|
13
|
+
t.notThrows(() => geom3.validate(obs))
|
|
13
14
|
t.is(pts.length, 96)
|
|
14
15
|
})
|
|
15
16
|
|
|
@@ -26,48 +27,49 @@ test('cylinderElliptic (options)', (t) => {
|
|
|
26
27
|
[[0.5000000000000001, 0.8660254037844386, -5], [0.5000000000000001, 0.8660254037844386, 5],
|
|
27
28
|
[0.8660254037844387, 0.49999999999999994, 5], [0.8660254037844387, 0.49999999999999994, -5]],
|
|
28
29
|
[[0, 0, 5], [0.8660254037844387, 0.49999999999999994, 5], [0.5000000000000001, 0.8660254037844386, 5]],
|
|
29
|
-
[[0, 0, -5], [
|
|
30
|
-
[[
|
|
30
|
+
[[0, 0, -5], [0, 1, -5], [0.5000000000000001, 0.8660254037844386, -5]],
|
|
31
|
+
[[0, 1, -5], [0, 1, 5],
|
|
31
32
|
[0.5000000000000001, 0.8660254037844386, 5], [0.5000000000000001, 0.8660254037844386, -5]],
|
|
32
|
-
[[0, 0, 5], [0.5000000000000001, 0.8660254037844386, 5], [
|
|
33
|
-
[[0, 0, -5], [-0.4999999999999998, 0.8660254037844387, -5], [
|
|
33
|
+
[[0, 0, 5], [0.5000000000000001, 0.8660254037844386, 5], [0, 1, 5]],
|
|
34
|
+
[[0, 0, -5], [-0.4999999999999998, 0.8660254037844387, -5], [0, 1, -5]],
|
|
34
35
|
[[-0.4999999999999998, 0.8660254037844387, -5], [-0.4999999999999998, 0.8660254037844387, 5],
|
|
35
|
-
[
|
|
36
|
-
[[0, 0, 5], [
|
|
36
|
+
[0, 1, 5], [0, 1, -5]],
|
|
37
|
+
[[0, 0, 5], [0, 1, 5], [-0.4999999999999998, 0.8660254037844387, 5]],
|
|
37
38
|
[[0, 0, -5], [-0.8660254037844387, 0.49999999999999994, -5], [-0.4999999999999998, 0.8660254037844387, -5]],
|
|
38
39
|
[[-0.8660254037844387, 0.49999999999999994, -5], [-0.8660254037844387, 0.49999999999999994, 5],
|
|
39
40
|
[-0.4999999999999998, 0.8660254037844387, 5], [-0.4999999999999998, 0.8660254037844387, -5]],
|
|
40
41
|
[[0, 0, 5], [-0.4999999999999998, 0.8660254037844387, 5], [-0.8660254037844387, 0.49999999999999994, 5]],
|
|
41
|
-
[[0, 0, -5], [-1,
|
|
42
|
-
[[-1,
|
|
42
|
+
[[0, 0, -5], [-1, 0, -5], [-0.8660254037844387, 0.49999999999999994, -5]],
|
|
43
|
+
[[-1, 0, -5], [-1, 0, 5],
|
|
43
44
|
[-0.8660254037844387, 0.49999999999999994, 5], [-0.8660254037844387, 0.49999999999999994, -5]],
|
|
44
|
-
[[0, 0, 5], [-0.8660254037844387, 0.49999999999999994, 5], [-1,
|
|
45
|
-
[[0, 0, -5], [-0.8660254037844386, -0.5000000000000001, -5], [-1,
|
|
45
|
+
[[0, 0, 5], [-0.8660254037844387, 0.49999999999999994, 5], [-1, 0, 5]],
|
|
46
|
+
[[0, 0, -5], [-0.8660254037844386, -0.5000000000000001, -5], [-1, 0, -5]],
|
|
46
47
|
[[-0.8660254037844386, -0.5000000000000001, -5], [-0.8660254037844386, -0.5000000000000001, 5],
|
|
47
|
-
[-1,
|
|
48
|
-
[[0, 0, 5], [-1,
|
|
48
|
+
[-1, 0, 5], [-1, 0, -5]],
|
|
49
|
+
[[0, 0, 5], [-1, 0, 5], [-0.8660254037844386, -0.5000000000000001, 5]],
|
|
49
50
|
[[0, 0, -5], [-0.5000000000000004, -0.8660254037844385, -5], [-0.8660254037844386, -0.5000000000000001, -5]],
|
|
50
51
|
[[-0.5000000000000004, -0.8660254037844385, -5], [-0.5000000000000004, -0.8660254037844385, 5],
|
|
51
52
|
[-0.8660254037844386, -0.5000000000000001, 5], [-0.8660254037844386, -0.5000000000000001, -5]],
|
|
52
53
|
[[0, 0, 5], [-0.8660254037844386, -0.5000000000000001, 5], [-0.5000000000000004, -0.8660254037844385, 5]],
|
|
53
|
-
[[0, 0, -5], [
|
|
54
|
-
[[
|
|
54
|
+
[[0, 0, -5], [0, -1, -5], [-0.5000000000000004, -0.8660254037844385, -5]],
|
|
55
|
+
[[0, -1, -5], [0, -1, 5],
|
|
55
56
|
[-0.5000000000000004, -0.8660254037844385, 5], [-0.5000000000000004, -0.8660254037844385, -5]],
|
|
56
|
-
[[0, 0, 5], [-0.5000000000000004, -0.8660254037844385, 5], [
|
|
57
|
-
[[0, 0, -5], [0.5000000000000001, -0.8660254037844386, -5], [
|
|
57
|
+
[[0, 0, 5], [-0.5000000000000004, -0.8660254037844385, 5], [0, -1, 5]],
|
|
58
|
+
[[0, 0, -5], [0.5000000000000001, -0.8660254037844386, -5], [0, -1, -5]],
|
|
58
59
|
[[0.5000000000000001, -0.8660254037844386, -5], [0.5000000000000001, -0.8660254037844386, 5],
|
|
59
|
-
[
|
|
60
|
-
[[0, 0, 5], [
|
|
60
|
+
[0, -1, 5], [0, -1, -5]],
|
|
61
|
+
[[0, 0, 5], [0, -1, 5], [0.5000000000000001, -0.8660254037844386, 5]],
|
|
61
62
|
[[0, 0, -5], [0.8660254037844384, -0.5000000000000004, -5], [0.5000000000000001, -0.8660254037844386, -5]],
|
|
62
63
|
[[0.8660254037844384, -0.5000000000000004, -5], [0.8660254037844384, -0.5000000000000004, 5],
|
|
63
64
|
[0.5000000000000001, -0.8660254037844386, 5], [0.5000000000000001, -0.8660254037844386, -5]],
|
|
64
65
|
[[0, 0, 5], [0.5000000000000001, -0.8660254037844386, 5], [0.8660254037844384, -0.5000000000000004, 5]],
|
|
65
|
-
[[0, 0, -5], [1,
|
|
66
|
-
[[1,
|
|
67
|
-
[0.8660254037844384, -0.5000000000000004,
|
|
68
|
-
[[0, 0, 5], [0.8660254037844384, -0.5000000000000004, 5], [1,
|
|
66
|
+
[[0, 0, -5], [1, 0, -5], [0.8660254037844384, -0.5000000000000004, -5]],
|
|
67
|
+
[[1, 0, -5], [1, 0, 5], [0.8660254037844384, -0.5000000000000004, 5],
|
|
68
|
+
[0.8660254037844384, -0.5000000000000004, -5]],
|
|
69
|
+
[[0, 0, 5], [0.8660254037844384, -0.5000000000000004, 5], [1, 0, 5]]
|
|
69
70
|
]
|
|
70
71
|
|
|
72
|
+
t.notThrows(() => geom3.validate(obs))
|
|
71
73
|
t.is(pts.length, 36)
|
|
72
74
|
t.true(comparePolygonsAsPoints(pts, exp))
|
|
73
75
|
|
|
@@ -83,57 +85,57 @@ test('cylinderElliptic (options)', (t) => {
|
|
|
83
85
|
[[0.8660254037844387, 0.9999999999999999, -1], [0.5000000000000001, 1.7320508075688772, -1], [1.7320508075688774, 0.49999999999999994, 1]],
|
|
84
86
|
[[0, 0, 1], [1.7320508075688774, 0.49999999999999994, 1], [1.0000000000000002, 0.8660254037844386, 1]],
|
|
85
87
|
[[1.7320508075688774, 0.49999999999999994, 1], [0.5000000000000001, 1.7320508075688772, -1], [1.0000000000000002, 0.8660254037844386, 1]],
|
|
86
|
-
[[0, 0, -1], [
|
|
87
|
-
[[0.5000000000000001, 1.7320508075688772, -1], [
|
|
88
|
-
[[0, 0, 1], [1.0000000000000002, 0.8660254037844386, 1], [
|
|
89
|
-
[[1.0000000000000002, 0.8660254037844386, 1], [
|
|
90
|
-
[[0, 0, -1], [-0.4999999999999998, 1.7320508075688774, -1], [
|
|
91
|
-
[[
|
|
92
|
-
[[0, 0, 1], [
|
|
93
|
-
[[
|
|
88
|
+
[[0, 0, -1], [0, 2, -1], [0.5000000000000001, 1.7320508075688772, -1]],
|
|
89
|
+
[[0.5000000000000001, 1.7320508075688772, -1], [0, 2, -1], [1.0000000000000002, 0.8660254037844386, 1]],
|
|
90
|
+
[[0, 0, 1], [1.0000000000000002, 0.8660254037844386, 1], [0, 1, 1]],
|
|
91
|
+
[[1.0000000000000002, 0.8660254037844386, 1], [0, 2, -1], [0, 1, 1]],
|
|
92
|
+
[[0, 0, -1], [-0.4999999999999998, 1.7320508075688774, -1], [0, 2, -1]],
|
|
93
|
+
[[0, 2, -1], [-0.4999999999999998, 1.7320508075688774, -1], [0, 1, 1]],
|
|
94
|
+
[[0, 0, 1], [0, 1, 1], [-0.9999999999999996, 0.8660254037844387, 1]],
|
|
95
|
+
[[0, 1, 1], [-0.4999999999999998, 1.7320508075688774, -1], [-0.9999999999999996, 0.8660254037844387, 1]],
|
|
94
96
|
[[0, 0, -1], [-0.8660254037844387, 0.9999999999999999, -1], [-0.4999999999999998, 1.7320508075688774, -1]],
|
|
95
97
|
[[-0.4999999999999998, 1.7320508075688774, -1], [-0.8660254037844387, 0.9999999999999999, -1], [-0.9999999999999996, 0.8660254037844387, 1]],
|
|
96
98
|
[[0, 0, 1], [-0.9999999999999996, 0.8660254037844387, 1], [-1.7320508075688774, 0.49999999999999994, 1]],
|
|
97
99
|
[[-0.9999999999999996, 0.8660254037844387, 1], [-0.8660254037844387, 0.9999999999999999, -1], [-1.7320508075688774, 0.49999999999999994, 1]],
|
|
98
|
-
[[0, 0, -1], [-1,
|
|
99
|
-
[[-0.8660254037844387, 0.9999999999999999, -1], [-1,
|
|
100
|
-
[[0, 0, 1], [-1.7320508075688774, 0.49999999999999994, 1], [-2,
|
|
101
|
-
[[-1.7320508075688774, 0.49999999999999994, 1], [-1,
|
|
102
|
-
[[0, 0, -1], [-0.8660254037844386, -1.0000000000000002, -1], [-1,
|
|
103
|
-
[[-1,
|
|
104
|
-
[[0, 0, 1], [-2,
|
|
105
|
-
[[-2,
|
|
100
|
+
[[0, 0, -1], [-1, 0, -1], [-0.8660254037844387, 0.9999999999999999, -1]],
|
|
101
|
+
[[-0.8660254037844387, 0.9999999999999999, -1], [-1, 0, -1], [-1.7320508075688774, 0.49999999999999994, 1]],
|
|
102
|
+
[[0, 0, 1], [-1.7320508075688774, 0.49999999999999994, 1], [-2, 0, 1]],
|
|
103
|
+
[[-1.7320508075688774, 0.49999999999999994, 1], [-1, 0, -1], [-2, 0, 1]],
|
|
104
|
+
[[0, 0, -1], [-0.8660254037844386, -1.0000000000000002, -1], [-1, 0, -1]],
|
|
105
|
+
[[-1, 0, -1], [-0.8660254037844386, -1.0000000000000002, -1], [-2, 0, 1]],
|
|
106
|
+
[[0, 0, 1], [-2, 0, 1], [-1.7320508075688772, -0.5000000000000001, 1]],
|
|
107
|
+
[[-2, 0, 1], [-0.8660254037844386, -1.0000000000000002, -1], [-1.7320508075688772, -0.5000000000000001, 1]],
|
|
106
108
|
[[0, 0, -1], [-0.5000000000000004, -1.732050807568877, -1], [-0.8660254037844386, -1.0000000000000002, -1]],
|
|
107
109
|
[[-0.8660254037844386, -1.0000000000000002, -1], [-0.5000000000000004, -1.732050807568877, -1], [-1.7320508075688772, -0.5000000000000001, 1]],
|
|
108
110
|
[[0, 0, 1], [-1.7320508075688772, -0.5000000000000001, 1], [-1.0000000000000009, -0.8660254037844385, 1]],
|
|
109
111
|
[[-1.7320508075688772, -0.5000000000000001, 1], [-0.5000000000000004, -1.732050807568877, -1], [-1.0000000000000009, -0.8660254037844385, 1]],
|
|
110
|
-
[[0, 0, -1], [
|
|
111
|
-
[[-0.5000000000000004, -1.732050807568877, -1], [
|
|
112
|
-
[[0, 0, 1], [-1.0000000000000009, -0.8660254037844385, 1], [
|
|
113
|
-
[[-1.0000000000000009, -0.8660254037844385, 1], [
|
|
114
|
-
[[0, 0, -1], [0.5000000000000001, -1.7320508075688772, -1], [
|
|
115
|
-
[[
|
|
116
|
-
[[0, 0, 1], [
|
|
117
|
-
[[
|
|
112
|
+
[[0, 0, -1], [0, -2, -1], [-0.5000000000000004, -1.732050807568877, -1]],
|
|
113
|
+
[[-0.5000000000000004, -1.732050807568877, -1], [0, -2, -1], [-1.0000000000000009, -0.8660254037844385, 1]],
|
|
114
|
+
[[0, 0, 1], [-1.0000000000000009, -0.8660254037844385, 1], [0, -1, 1]],
|
|
115
|
+
[[-1.0000000000000009, -0.8660254037844385, 1], [0, -2, -1], [0, -1, 1]],
|
|
116
|
+
[[0, 0, -1], [0.5000000000000001, -1.7320508075688772, -1], [0, -2, -1]],
|
|
117
|
+
[[0, -2, -1], [0.5000000000000001, -1.7320508075688772, -1], [0, -1, 1]],
|
|
118
|
+
[[0, 0, 1], [0, -1, 1], [1.0000000000000002, -0.8660254037844386, 1]],
|
|
119
|
+
[[0, -1, 1], [0.5000000000000001, -1.7320508075688772, -1], [1.0000000000000002, -0.8660254037844386, 1]],
|
|
118
120
|
[[0, 0, -1], [0.8660254037844384, -1.0000000000000009, -1], [0.5000000000000001, -1.7320508075688772, -1]],
|
|
119
121
|
[[0.5000000000000001, -1.7320508075688772, -1], [0.8660254037844384, -1.0000000000000009, -1], [1.0000000000000002, -0.8660254037844386, 1]],
|
|
120
122
|
[[0, 0, 1], [1.0000000000000002, -0.8660254037844386, 1], [1.7320508075688767, -0.5000000000000004, 1]],
|
|
121
123
|
[[1.0000000000000002, -0.8660254037844386, 1], [0.8660254037844384, -1.0000000000000009, -1], [1.7320508075688767, -0.5000000000000004, 1]],
|
|
122
|
-
[[0, 0, -1], [1,
|
|
123
|
-
[[0.8660254037844384, -1.0000000000000009, -1], [1,
|
|
124
|
-
[[0, 0, 1], [1.7320508075688767, -0.5000000000000004, 1], [2,
|
|
125
|
-
[[1.7320508075688767, -0.5000000000000004, 1], [1,
|
|
124
|
+
[[0, 0, -1], [1, 0, -1], [0.8660254037844384, -1.0000000000000009, -1]],
|
|
125
|
+
[[0.8660254037844384, -1.0000000000000009, -1], [1, 0, -1], [1.7320508075688767, -0.5000000000000004, 1]],
|
|
126
|
+
[[0, 0, 1], [1.7320508075688767, -0.5000000000000004, 1], [2, 0, 1]],
|
|
127
|
+
[[1.7320508075688767, -0.5000000000000004, 1], [1, 0, -1], [2, 0, 1]]
|
|
126
128
|
]
|
|
127
129
|
|
|
130
|
+
t.notThrows(() => geom3.validate(obs))
|
|
128
131
|
t.is(pts.length, 48)
|
|
129
132
|
t.true(comparePolygonsAsPoints(pts, exp))
|
|
130
133
|
|
|
131
134
|
// test startAngle and endAngle
|
|
132
135
|
obs = cylinderElliptic({ startRadius: [1, 2], endRadius: [2, 1], startAngle: Math.PI / 2, endAngle: Math.PI * 2 * 0.75, segments: 12 })
|
|
133
136
|
pts = geom3.toPoints(obs)
|
|
134
|
-
exp = [
|
|
135
|
-
]
|
|
136
137
|
|
|
138
|
+
t.notThrows(() => geom3.validate(obs))
|
|
137
139
|
t.is(pts.length, 28)
|
|
138
140
|
// t.true(comparePolygonsAsPoints(pts, exp))
|
|
139
141
|
|
|
@@ -141,6 +143,7 @@ test('cylinderElliptic (options)', (t) => {
|
|
|
141
143
|
obs = cylinderElliptic({ segments: 8 })
|
|
142
144
|
pts = geom3.toPoints(obs)
|
|
143
145
|
|
|
146
|
+
t.notThrows(() => geom3.validate(obs))
|
|
144
147
|
t.is(pts.length, 24)
|
|
145
148
|
|
|
146
149
|
// test center
|
|
@@ -181,6 +184,23 @@ test('cylinderElliptic (options)', (t) => {
|
|
|
181
184
|
[[-5, -5, -3.5], [-4.292893218813453, -5.707106781186548, -3.5], [-4, -5, -3.5]]
|
|
182
185
|
]
|
|
183
186
|
|
|
187
|
+
t.notThrows(() => geom3.validate(obs))
|
|
184
188
|
t.is(pts.length, 24)
|
|
185
189
|
t.true(comparePolygonsAsPoints(pts, exp))
|
|
186
190
|
})
|
|
191
|
+
|
|
192
|
+
test('cylinderElliptic (cone)', (t) => {
|
|
193
|
+
const obs = cylinderElliptic({ endRadius: [0, 0] })
|
|
194
|
+
const pts = geom3.toPoints(obs)
|
|
195
|
+
|
|
196
|
+
t.notThrows(() => geom3.validate(obs))
|
|
197
|
+
t.is(pts.length, 64)
|
|
198
|
+
})
|
|
199
|
+
|
|
200
|
+
test('cylinderElliptic (squished)', (t) => {
|
|
201
|
+
const obs = cylinderElliptic({ startRadius: [1, 0], endRadius: [0, 1], segments: 4 })
|
|
202
|
+
const pts = geom3.toPoints(obs)
|
|
203
|
+
|
|
204
|
+
t.notThrows(() => geom3.validate(obs))
|
|
205
|
+
t.is(pts.length, 8)
|
|
206
|
+
})
|
|
@@ -4,6 +4,8 @@ const vec2 = require('../maths/vec2')
|
|
|
4
4
|
|
|
5
5
|
const geom2 = require('../geometries/geom2')
|
|
6
6
|
|
|
7
|
+
const { sin, cos } = require('../utils/trigonometry')
|
|
8
|
+
|
|
7
9
|
const { isGTE, isNumberArray } = require('./commonChecks')
|
|
8
10
|
|
|
9
11
|
/**
|
|
@@ -62,7 +64,7 @@ const ellipse = (options) => {
|
|
|
62
64
|
segments = (rotation < Math.PI * 2) ? segments + 1 : segments
|
|
63
65
|
for (let i = 0; i < segments; i++) {
|
|
64
66
|
const angle = (step * i) + startAngle
|
|
65
|
-
const point = vec2.fromValues(radius[0] *
|
|
67
|
+
const point = vec2.fromValues(radius[0] * cos(angle), radius[1] * sin(angle))
|
|
66
68
|
vec2.add(point, centerv, point)
|
|
67
69
|
points.push(point)
|
|
68
70
|
}
|
|
@@ -10,6 +10,7 @@ test('ellipse (defaults)', (t) => {
|
|
|
10
10
|
const geometry = ellipse()
|
|
11
11
|
const obs = geom2.toPoints(geometry)
|
|
12
12
|
|
|
13
|
+
t.notThrows(() => geom2.validate(geometry))
|
|
13
14
|
t.deepEqual(obs.length, 32)
|
|
14
15
|
})
|
|
15
16
|
|
|
@@ -52,6 +53,7 @@ test('ellipse (options)', (t) => {
|
|
|
52
53
|
[3.9807852804032304, 4.804909677983871]
|
|
53
54
|
]
|
|
54
55
|
|
|
56
|
+
t.notThrows(() => geom2.validate(geometry))
|
|
55
57
|
t.deepEqual(obs.length, 32)
|
|
56
58
|
t.true(comparePoints(obs, exp))
|
|
57
59
|
|
|
@@ -63,20 +65,21 @@ test('ellipse (options)', (t) => {
|
|
|
63
65
|
[2.77163859753386, 1.913417161825449],
|
|
64
66
|
[2.121320343559643, 3.5355339059327373],
|
|
65
67
|
[1.1480502970952695, 4.619397662556434],
|
|
66
|
-
[
|
|
68
|
+
[0, 5],
|
|
67
69
|
[-1.1480502970952693, 4.619397662556434],
|
|
68
70
|
[-2.1213203435596424, 3.5355339059327378],
|
|
69
71
|
[-2.77163859753386, 1.9134171618254494],
|
|
70
|
-
[-3,
|
|
72
|
+
[-3, 0],
|
|
71
73
|
[-2.7716385975338604, -1.9134171618254483],
|
|
72
74
|
[-2.121320343559643, -3.5355339059327373],
|
|
73
75
|
[-1.148050297095271, -4.619397662556432],
|
|
74
|
-
[
|
|
76
|
+
[0, -5],
|
|
75
77
|
[1.14805029709527, -4.619397662556433],
|
|
76
78
|
[2.121320343559642, -3.5355339059327386],
|
|
77
79
|
[2.7716385975338595, -1.913417161825452]
|
|
78
80
|
]
|
|
79
81
|
|
|
82
|
+
t.notThrows(() => geom2.validate(geometry))
|
|
80
83
|
t.deepEqual(obs.length, 16)
|
|
81
84
|
t.true(comparePoints(obs, exp))
|
|
82
85
|
|
|
@@ -84,22 +87,23 @@ test('ellipse (options)', (t) => {
|
|
|
84
87
|
geometry = ellipse({ radius: [3, 5], startAngle: Math.PI / 2, segments: 16 })
|
|
85
88
|
obs = geom2.toPoints(geometry)
|
|
86
89
|
exp = [
|
|
87
|
-
[
|
|
90
|
+
[0, 5],
|
|
88
91
|
[-1.1480502970952693, 4.619397662556434],
|
|
89
92
|
[-2.1213203435596424, 3.5355339059327378],
|
|
90
93
|
[-2.77163859753386, 1.9134171618254494],
|
|
91
|
-
[-3,
|
|
94
|
+
[-3, 0],
|
|
92
95
|
[-2.7716385975338604, -1.9134171618254483],
|
|
93
96
|
[-2.121320343559643, -3.5355339059327373],
|
|
94
97
|
[-1.148050297095271, -4.619397662556432],
|
|
95
|
-
[
|
|
98
|
+
[0, -5],
|
|
96
99
|
[1.14805029709527, -4.619397662556433],
|
|
97
100
|
[2.121320343559642, -3.5355339059327386],
|
|
98
101
|
[2.7716385975338595, -1.913417161825452],
|
|
99
|
-
[3,
|
|
102
|
+
[3, 0],
|
|
100
103
|
[0, 0]
|
|
101
104
|
]
|
|
102
105
|
|
|
106
|
+
t.notThrows(() => geom2.validate(geometry))
|
|
103
107
|
t.deepEqual(obs.length, 14)
|
|
104
108
|
t.true(comparePoints(obs, exp))
|
|
105
109
|
|
|
@@ -111,15 +115,17 @@ test('ellipse (options)', (t) => {
|
|
|
111
115
|
[2.77163859753386, 1.913417161825449],
|
|
112
116
|
[2.121320343559643, 3.5355339059327373],
|
|
113
117
|
[1.1480502970952695, 4.619397662556434],
|
|
114
|
-
[
|
|
118
|
+
[0, 5],
|
|
115
119
|
[0, 0]
|
|
116
120
|
]
|
|
117
121
|
|
|
122
|
+
t.notThrows(() => geom2.validate(geometry))
|
|
118
123
|
t.deepEqual(obs.length, 6)
|
|
119
124
|
t.true(comparePoints(obs, exp))
|
|
120
125
|
|
|
121
126
|
// test segments
|
|
122
127
|
geometry = ellipse({ segments: 72 })
|
|
123
128
|
obs = geom2.toPoints(geometry)
|
|
129
|
+
t.notThrows(() => geom2.validate(geometry))
|
|
124
130
|
t.deepEqual(obs.length, 72)
|
|
125
131
|
})
|
|
@@ -3,6 +3,8 @@ const vec3 = require('../maths/vec3')
|
|
|
3
3
|
const geom3 = require('../geometries/geom3')
|
|
4
4
|
const poly3 = require('../geometries/poly3')
|
|
5
5
|
|
|
6
|
+
const { sin, cos } = require('../utils/trigonometry')
|
|
7
|
+
|
|
6
8
|
const { isGTE, isNumberArray } = require('./commonChecks')
|
|
7
9
|
|
|
8
10
|
/**
|
|
@@ -10,7 +12,7 @@ const { isGTE, isNumberArray } = require('./commonChecks')
|
|
|
10
12
|
* @param {Object} [options] - options for construction
|
|
11
13
|
* @param {Array} [options.center=[0,0,0]] - center of ellipsoid
|
|
12
14
|
* @param {Array} [options.radius=[1,1,1]] - radius of ellipsoid, along X, Y and Z
|
|
13
|
-
* @param {Number} [options.segments=32] - number of
|
|
15
|
+
* @param {Number} [options.segments=32] - number of segments to create per full rotation
|
|
14
16
|
* @param {Array} [options.axes] - an array with three vectors for the x, y and z base vectors
|
|
15
17
|
* @returns {geom3} new 3D geometry
|
|
16
18
|
* @alias module:modeling/primitives.ellipsoid
|
|
@@ -42,14 +44,14 @@ const ellipsoid = (options) => {
|
|
|
42
44
|
const p1 = vec3.create()
|
|
43
45
|
const p2 = vec3.create()
|
|
44
46
|
for (let slice1 = 0; slice1 <= segments; slice1++) {
|
|
45
|
-
const angle =
|
|
46
|
-
const cylinderpoint = vec3.add(vec3.create(), vec3.scale(p1, xvector,
|
|
47
|
+
const angle = 2 * Math.PI * slice1 / segments
|
|
48
|
+
const cylinderpoint = vec3.add(vec3.create(), vec3.scale(p1, xvector, cos(angle)), vec3.scale(p2, yvector, sin(angle)))
|
|
47
49
|
if (slice1 > 0) {
|
|
48
50
|
let prevcospitch, prevsinpitch
|
|
49
51
|
for (let slice2 = 0; slice2 <= qsegments; slice2++) {
|
|
50
52
|
const pitch = 0.5 * Math.PI * slice2 / qsegments
|
|
51
|
-
const cospitch =
|
|
52
|
-
const sinpitch =
|
|
53
|
+
const cospitch = cos(pitch)
|
|
54
|
+
const sinpitch = sin(pitch)
|
|
53
55
|
if (slice2 > 0) {
|
|
54
56
|
let points = []
|
|
55
57
|
let point
|
|
@@ -10,6 +10,7 @@ test('ellipsoid (defaults)', (t) => {
|
|
|
10
10
|
const obs = ellipsoid()
|
|
11
11
|
const pts = geom3.toPoints(obs)
|
|
12
12
|
|
|
13
|
+
t.notThrows(() => geom3.validate(obs))
|
|
13
14
|
t.is(pts.length, 512)
|
|
14
15
|
})
|
|
15
16
|
|
|
@@ -26,8 +27,8 @@ test('ellipsoid (options)', (t) => {
|
|
|
26
27
|
[1.2990381056766582, -1.25, -6.06217782649107], [1.5000000000000004, 0, -6.06217782649107]],
|
|
27
28
|
[[1.5000000000000004, 0, 6.06217782649107], [1.2990381056766582, -1.25, 6.06217782649107],
|
|
28
29
|
[2.25, -2.1650635094610964, 3.4999999999999996], [2.598076211353316, 0, 3.4999999999999996]],
|
|
29
|
-
[[1.5000000000000004, 0, -6.06217782649107], [1.2990381056766582, -1.25, -6.06217782649107], [
|
|
30
|
-
[[
|
|
30
|
+
[[1.5000000000000004, 0, -6.06217782649107], [1.2990381056766582, -1.25, -6.06217782649107], [0, 0, -7]],
|
|
31
|
+
[[0, 0, 7], [1.2990381056766582, -1.25, 6.06217782649107], [1.5000000000000004, 0, 6.06217782649107]],
|
|
31
32
|
[[2.598076211353316, -2.4999999999999996, 0], [1.5000000000000004, -4.330127018922193, 0],
|
|
32
33
|
[1.2990381056766584, -3.75, -3.4999999999999996], [2.25, -2.1650635094610964, -3.4999999999999996]],
|
|
33
34
|
[[2.25, -2.1650635094610964, 3.4999999999999996], [1.2990381056766584, -3.75, 3.4999999999999996],
|
|
@@ -36,28 +37,28 @@ test('ellipsoid (options)', (t) => {
|
|
|
36
37
|
[0.7500000000000004, -2.165063509461097, -6.06217782649107], [1.2990381056766582, -1.25, -6.06217782649107]],
|
|
37
38
|
[[1.2990381056766582, -1.25, 6.06217782649107], [0.7500000000000004, -2.165063509461097, 6.06217782649107],
|
|
38
39
|
[1.2990381056766584, -3.75, 3.4999999999999996], [2.25, -2.1650635094610964, 3.4999999999999996]],
|
|
39
|
-
[[1.2990381056766582, -1.25, -6.06217782649107], [0.7500000000000004, -2.165063509461097, -6.06217782649107], [
|
|
40
|
-
[[
|
|
41
|
-
[[1.5000000000000004, -4.330127018922193, 0], [
|
|
42
|
-
[
|
|
43
|
-
[[1.2990381056766584, -3.75, 3.4999999999999996], [
|
|
44
|
-
[
|
|
45
|
-
[[1.2990381056766584, -3.75, -3.4999999999999996], [
|
|
46
|
-
[
|
|
47
|
-
[[0.7500000000000004, -2.165063509461097, 6.06217782649107], [
|
|
48
|
-
[
|
|
49
|
-
[[0.7500000000000004, -2.165063509461097, -6.06217782649107], [
|
|
50
|
-
[[
|
|
51
|
-
[[
|
|
52
|
-
[-1.2990381056766576, -3.7500000000000004, -3.4999999999999996], [
|
|
53
|
-
[[
|
|
54
|
-
[-1.4999999999999993, -4.330127018922194, 0], [
|
|
55
|
-
[[
|
|
56
|
-
[-0.7499999999999998, -2.1650635094610973, -6.06217782649107], [
|
|
57
|
-
[[
|
|
58
|
-
[-1.2990381056766576, -3.7500000000000004, 3.4999999999999996], [
|
|
59
|
-
[[
|
|
60
|
-
[[
|
|
40
|
+
[[1.2990381056766582, -1.25, -6.06217782649107], [0.7500000000000004, -2.165063509461097, -6.06217782649107], [0, 0, -7]],
|
|
41
|
+
[[0, 0, 7], [0.7500000000000004, -2.165063509461097, 6.06217782649107], [1.2990381056766582, -1.25, 6.06217782649107]],
|
|
42
|
+
[[1.5000000000000004, -4.330127018922193, 0], [0, -5, 0],
|
|
43
|
+
[0, -4.330127018922194, -3.4999999999999996], [1.2990381056766584, -3.75, -3.4999999999999996]],
|
|
44
|
+
[[1.2990381056766584, -3.75, 3.4999999999999996], [0, -4.330127018922194, 3.4999999999999996],
|
|
45
|
+
[0, -5, 0], [1.5000000000000004, -4.330127018922193, 0]],
|
|
46
|
+
[[1.2990381056766584, -3.75, -3.4999999999999996], [0, -4.330127018922194, -3.4999999999999996],
|
|
47
|
+
[0, -2.5000000000000004, -6.06217782649107], [0.7500000000000004, -2.165063509461097, -6.06217782649107]],
|
|
48
|
+
[[0.7500000000000004, -2.165063509461097, 6.06217782649107], [0, -2.5000000000000004, 6.06217782649107],
|
|
49
|
+
[0, -4.330127018922194, 3.4999999999999996], [1.2990381056766584, -3.75, 3.4999999999999996]],
|
|
50
|
+
[[0.7500000000000004, -2.165063509461097, -6.06217782649107], [0, -2.5000000000000004, -6.06217782649107], [0, 0, -7]],
|
|
51
|
+
[[0, 0, 7], [0, -2.5000000000000004, 6.06217782649107], [0.7500000000000004, -2.165063509461097, 6.06217782649107]],
|
|
52
|
+
[[0, -5, 0], [-1.4999999999999993, -4.330127018922194, 0],
|
|
53
|
+
[-1.2990381056766576, -3.7500000000000004, -3.4999999999999996], [0, -4.330127018922194, -3.4999999999999996]],
|
|
54
|
+
[[0, -4.330127018922194, 3.4999999999999996], [-1.2990381056766576, -3.7500000000000004, 3.4999999999999996],
|
|
55
|
+
[-1.4999999999999993, -4.330127018922194, 0], [0, -5, 0]],
|
|
56
|
+
[[0, -4.330127018922194, -3.4999999999999996], [-1.2990381056766576, -3.7500000000000004, -3.4999999999999996],
|
|
57
|
+
[-0.7499999999999998, -2.1650635094610973, -6.06217782649107], [0, -2.5000000000000004, -6.06217782649107]],
|
|
58
|
+
[[0, -2.5000000000000004, 6.06217782649107], [-0.7499999999999998, -2.1650635094610973, 6.06217782649107],
|
|
59
|
+
[-1.2990381056766576, -3.7500000000000004, 3.4999999999999996], [0, -4.330127018922194, 3.4999999999999996]],
|
|
60
|
+
[[0, -2.5000000000000004, -6.06217782649107], [-0.7499999999999998, -2.1650635094610973, -6.06217782649107], [0, 0, -7]],
|
|
61
|
+
[[0, 0, 7], [-0.7499999999999998, -2.1650635094610973, 6.06217782649107], [0, -2.5000000000000004, 6.06217782649107]],
|
|
61
62
|
[[-1.4999999999999993, -4.330127018922194, 0], [-2.598076211353316, -2.4999999999999996, 0],
|
|
62
63
|
[-2.25, -2.1650635094610964, -3.4999999999999996], [-1.2990381056766576, -3.7500000000000004, -3.4999999999999996]],
|
|
63
64
|
[[-1.2990381056766576, -3.7500000000000004, 3.4999999999999996], [-2.25, -2.1650635094610964, 3.4999999999999996],
|
|
@@ -66,28 +67,28 @@ test('ellipsoid (options)', (t) => {
|
|
|
66
67
|
[-1.2990381056766582, -1.25, -6.06217782649107], [-0.7499999999999998, -2.1650635094610973, -6.06217782649107]],
|
|
67
68
|
[[-0.7499999999999998, -2.1650635094610973, 6.06217782649107], [-1.2990381056766582, -1.25, 6.06217782649107],
|
|
68
69
|
[-2.25, -2.1650635094610964, 3.4999999999999996], [-1.2990381056766576, -3.7500000000000004, 3.4999999999999996]],
|
|
69
|
-
[[-0.7499999999999998, -2.1650635094610973, -6.06217782649107], [-1.2990381056766582, -1.25, -6.06217782649107], [
|
|
70
|
-
[[
|
|
71
|
-
[[-2.598076211353316, -2.4999999999999996, 0], [-3,
|
|
72
|
-
[-2.598076211353316,
|
|
73
|
-
[[-2.25, -2.1650635094610964, 3.4999999999999996], [-2.598076211353316,
|
|
74
|
-
[-3,
|
|
75
|
-
[[-2.25, -2.1650635094610964, -3.4999999999999996], [-2.598076211353316,
|
|
76
|
-
[-1.5000000000000004,
|
|
77
|
-
[[-1.2990381056766582, -1.25, 6.06217782649107], [-1.5000000000000004,
|
|
78
|
-
[-2.598076211353316,
|
|
79
|
-
[[-1.2990381056766582, -1.25, -6.06217782649107], [-1.5000000000000004,
|
|
80
|
-
[[
|
|
81
|
-
[[-3,
|
|
82
|
-
[-2.2500000000000004, 2.1650635094610955, -3.4999999999999996], [-2.598076211353316,
|
|
83
|
-
[[-2.598076211353316,
|
|
84
|
-
[-2.5980762113533165, 2.4999999999999987, 0], [-3,
|
|
85
|
-
[[-2.598076211353316,
|
|
86
|
-
[-1.2990381056766584, 1.2499999999999996, -6.06217782649107], [-1.5000000000000004,
|
|
87
|
-
[[-1.5000000000000004,
|
|
88
|
-
[-2.2500000000000004, 2.1650635094610955, 3.4999999999999996], [-2.598076211353316,
|
|
89
|
-
[[-1.5000000000000004,
|
|
90
|
-
[[
|
|
70
|
+
[[-0.7499999999999998, -2.1650635094610973, -6.06217782649107], [-1.2990381056766582, -1.25, -6.06217782649107], [0, 0, -7]],
|
|
71
|
+
[[0, 0, 7], [-1.2990381056766582, -1.25, 6.06217782649107], [-0.7499999999999998, -2.1650635094610973, 6.06217782649107]],
|
|
72
|
+
[[-2.598076211353316, -2.4999999999999996, 0], [-3, 0, 0],
|
|
73
|
+
[-2.598076211353316, 0, -3.4999999999999996], [-2.25, -2.1650635094610964, -3.4999999999999996]],
|
|
74
|
+
[[-2.25, -2.1650635094610964, 3.4999999999999996], [-2.598076211353316, 0, 3.4999999999999996],
|
|
75
|
+
[-3, 0, 0], [-2.598076211353316, -2.4999999999999996, 0]],
|
|
76
|
+
[[-2.25, -2.1650635094610964, -3.4999999999999996], [-2.598076211353316, 0, -3.4999999999999996],
|
|
77
|
+
[-1.5000000000000004, 0, -6.06217782649107], [-1.2990381056766582, -1.25, -6.06217782649107]],
|
|
78
|
+
[[-1.2990381056766582, -1.25, 6.06217782649107], [-1.5000000000000004, 0, 6.06217782649107],
|
|
79
|
+
[-2.598076211353316, 0, 3.4999999999999996], [-2.25, -2.1650635094610964, 3.4999999999999996]],
|
|
80
|
+
[[-1.2990381056766582, -1.25, -6.06217782649107], [-1.5000000000000004, 0, -6.06217782649107], [0, 0, -7]],
|
|
81
|
+
[[0, 0, 7], [-1.5000000000000004, 0, 6.06217782649107], [-1.2990381056766582, -1.25, 6.06217782649107]],
|
|
82
|
+
[[-3, 0, 0], [-2.5980762113533165, 2.4999999999999987, 0],
|
|
83
|
+
[-2.2500000000000004, 2.1650635094610955, -3.4999999999999996], [-2.598076211353316, 0, -3.4999999999999996]],
|
|
84
|
+
[[-2.598076211353316, 0, 3.4999999999999996], [-2.2500000000000004, 2.1650635094610955, 3.4999999999999996],
|
|
85
|
+
[-2.5980762113533165, 2.4999999999999987, 0], [-3, 0, 0]],
|
|
86
|
+
[[-2.598076211353316, 0, -3.4999999999999996], [-2.2500000000000004, 2.1650635094610955, -3.4999999999999996],
|
|
87
|
+
[-1.2990381056766584, 1.2499999999999996, -6.06217782649107], [-1.5000000000000004, 0, -6.06217782649107]],
|
|
88
|
+
[[-1.5000000000000004, 0, 6.06217782649107], [-1.2990381056766584, 1.2499999999999996, 6.06217782649107],
|
|
89
|
+
[-2.2500000000000004, 2.1650635094610955, 3.4999999999999996], [-2.598076211353316, 0, 3.4999999999999996]],
|
|
90
|
+
[[-1.5000000000000004, 0, -6.06217782649107], [-1.2990381056766584, 1.2499999999999996, -6.06217782649107], [0, 0, -7]],
|
|
91
|
+
[[0, 0, 7], [-1.2990381056766584, 1.2499999999999996, 6.06217782649107], [-1.5000000000000004, 0, 6.06217782649107]],
|
|
91
92
|
[[-2.5980762113533165, 2.4999999999999987, 0], [-1.5000000000000013, 4.330127018922193, 0],
|
|
92
93
|
[-1.2990381056766591, 3.75, -3.4999999999999996], [-2.2500000000000004, 2.1650635094610955, -3.4999999999999996]],
|
|
93
94
|
[[-2.2500000000000004, 2.1650635094610955, 3.4999999999999996], [-1.2990381056766591, 3.75, 3.4999999999999996],
|
|
@@ -96,28 +97,28 @@ test('ellipsoid (options)', (t) => {
|
|
|
96
97
|
[-0.7500000000000009, 2.165063509461097, -6.06217782649107], [-1.2990381056766584, 1.2499999999999996, -6.06217782649107]],
|
|
97
98
|
[[-1.2990381056766584, 1.2499999999999996, 6.06217782649107], [-0.7500000000000009, 2.165063509461097, 6.06217782649107],
|
|
98
99
|
[-1.2990381056766591, 3.75, 3.4999999999999996], [-2.2500000000000004, 2.1650635094610955, 3.4999999999999996]],
|
|
99
|
-
[[-1.2990381056766584, 1.2499999999999996, -6.06217782649107], [-0.7500000000000009, 2.165063509461097, -6.06217782649107], [
|
|
100
|
-
[[
|
|
101
|
-
[[-1.5000000000000013, 4.330127018922193, 0], [
|
|
102
|
-
[
|
|
103
|
-
[[-1.2990381056766591, 3.75, 3.4999999999999996], [
|
|
104
|
-
[
|
|
105
|
-
[[-1.2990381056766591, 3.75, -3.4999999999999996], [
|
|
106
|
-
[
|
|
107
|
-
[[-0.7500000000000009, 2.165063509461097, 6.06217782649107], [
|
|
108
|
-
[
|
|
109
|
-
[[-0.7500000000000009, 2.165063509461097, -6.06217782649107], [
|
|
110
|
-
[[
|
|
111
|
-
[[
|
|
112
|
-
[1.2990381056766584, 3.75, -3.4999999999999996], [
|
|
113
|
-
[[
|
|
114
|
-
[1.5000000000000004, 4.330127018922193, 0], [
|
|
115
|
-
[[
|
|
116
|
-
[0.7500000000000004, 2.165063509461097, -6.06217782649107], [
|
|
117
|
-
[[
|
|
118
|
-
[1.2990381056766584, 3.75, 3.4999999999999996], [
|
|
119
|
-
[[
|
|
120
|
-
[[
|
|
100
|
+
[[-1.2990381056766584, 1.2499999999999996, -6.06217782649107], [-0.7500000000000009, 2.165063509461097, -6.06217782649107], [0, 0, -7]],
|
|
101
|
+
[[0, 0, 7], [-0.7500000000000009, 2.165063509461097, 6.06217782649107], [-1.2990381056766584, 1.2499999999999996, 6.06217782649107]],
|
|
102
|
+
[[-1.5000000000000013, 4.330127018922193, 0], [0, 5, 0],
|
|
103
|
+
[0, 4.330127018922194, -3.4999999999999996], [-1.2990381056766591, 3.75, -3.4999999999999996]],
|
|
104
|
+
[[-1.2990381056766591, 3.75, 3.4999999999999996], [0, 4.330127018922194, 3.4999999999999996],
|
|
105
|
+
[0, 5, 0], [-1.5000000000000013, 4.330127018922193, 0]],
|
|
106
|
+
[[-1.2990381056766591, 3.75, -3.4999999999999996], [0, 4.330127018922194, -3.4999999999999996],
|
|
107
|
+
[0, 2.5000000000000004, -6.06217782649107], [-0.7500000000000009, 2.165063509461097, -6.06217782649107]],
|
|
108
|
+
[[-0.7500000000000009, 2.165063509461097, 6.06217782649107], [0, 2.5000000000000004, 6.06217782649107],
|
|
109
|
+
[0, 4.330127018922194, 3.4999999999999996], [-1.2990381056766591, 3.75, 3.4999999999999996]],
|
|
110
|
+
[[-0.7500000000000009, 2.165063509461097, -6.06217782649107], [0, 2.5000000000000004, -6.06217782649107], [0, 0, -7]],
|
|
111
|
+
[[0, 0, 7], [0, 2.5000000000000004, 6.06217782649107], [-0.7500000000000009, 2.165063509461097, 6.06217782649107]],
|
|
112
|
+
[[0, 5, 0], [1.5000000000000004, 4.330127018922193, 0],
|
|
113
|
+
[1.2990381056766584, 3.75, -3.4999999999999996], [0, 4.330127018922194, -3.4999999999999996]],
|
|
114
|
+
[[0, 4.330127018922194, 3.4999999999999996], [1.2990381056766584, 3.75, 3.4999999999999996],
|
|
115
|
+
[1.5000000000000004, 4.330127018922193, 0], [0, 5, 0]],
|
|
116
|
+
[[0, 4.330127018922194, -3.4999999999999996], [1.2990381056766584, 3.75, -3.4999999999999996],
|
|
117
|
+
[0.7500000000000004, 2.165063509461097, -6.06217782649107], [0, 2.5000000000000004, -6.06217782649107]],
|
|
118
|
+
[[0, 2.5000000000000004, 6.06217782649107], [0.7500000000000004, 2.165063509461097, 6.06217782649107],
|
|
119
|
+
[1.2990381056766584, 3.75, 3.4999999999999996], [0, 4.330127018922194, 3.4999999999999996]],
|
|
120
|
+
[[0, 2.5000000000000004, -6.06217782649107], [0.7500000000000004, 2.165063509461097, -6.06217782649107], [0, 0, -7]],
|
|
121
|
+
[[0, 0, 7], [0.7500000000000004, 2.165063509461097, 6.06217782649107], [0, 2.5000000000000004, 6.06217782649107]],
|
|
121
122
|
[[1.5000000000000004, 4.330127018922193, 0], [2.598076211353315, 2.500000000000002, 0],
|
|
122
123
|
[2.2499999999999996, 2.1650635094610986, -3.4999999999999996], [1.2990381056766584, 3.75, -3.4999999999999996]],
|
|
123
124
|
[[1.2990381056766584, 3.75, 3.4999999999999996], [2.2499999999999996, 2.1650635094610986, 3.4999999999999996],
|
|
@@ -126,27 +127,27 @@ test('ellipsoid (options)', (t) => {
|
|
|
126
127
|
[1.2990381056766578, 1.2500000000000013, -6.06217782649107], [0.7500000000000004, 2.165063509461097, -6.06217782649107]],
|
|
127
128
|
[[0.7500000000000004, 2.165063509461097, 6.06217782649107], [1.2990381056766578, 1.2500000000000013, 6.06217782649107],
|
|
128
129
|
[2.2499999999999996, 2.1650635094610986, 3.4999999999999996], [1.2990381056766584, 3.75, 3.4999999999999996]],
|
|
129
|
-
[[0.7500000000000004, 2.165063509461097, -6.06217782649107], [1.2990381056766578, 1.2500000000000013, -6.06217782649107], [
|
|
130
|
-
[[
|
|
131
|
-
[[2.598076211353315, 2.500000000000002, 0], [3,
|
|
132
|
-
[2.598076211353316,
|
|
133
|
-
[[2.2499999999999996, 2.1650635094610986, 3.4999999999999996], [2.598076211353316,
|
|
134
|
-
[3,
|
|
135
|
-
[[2.2499999999999996, 2.1650635094610986, -3.4999999999999996], [2.598076211353316,
|
|
136
|
-
[1.5000000000000004,
|
|
137
|
-
[[1.2990381056766578, 1.2500000000000013, 6.06217782649107], [1.5000000000000004,
|
|
138
|
-
[2.598076211353316,
|
|
139
|
-
[[1.2990381056766578, 1.2500000000000013, -6.06217782649107], [1.5000000000000004,
|
|
140
|
-
[[
|
|
130
|
+
[[0.7500000000000004, 2.165063509461097, -6.06217782649107], [1.2990381056766578, 1.2500000000000013, -6.06217782649107], [0, 0, -7]],
|
|
131
|
+
[[0, 0, 7], [1.2990381056766578, 1.2500000000000013, 6.06217782649107], [0.7500000000000004, 2.165063509461097, 6.06217782649107]],
|
|
132
|
+
[[2.598076211353315, 2.500000000000002, 0], [3, 0, 0],
|
|
133
|
+
[2.598076211353316, 0, -3.4999999999999996], [2.2499999999999996, 2.1650635094610986, -3.4999999999999996]],
|
|
134
|
+
[[2.2499999999999996, 2.1650635094610986, 3.4999999999999996], [2.598076211353316, 0, 3.4999999999999996],
|
|
135
|
+
[3, 0, 0], [2.598076211353315, 2.500000000000002, 0]],
|
|
136
|
+
[[2.2499999999999996, 2.1650635094610986, -3.4999999999999996], [2.598076211353316, 0, -3.4999999999999996],
|
|
137
|
+
[1.5000000000000004, 0, -6.06217782649107], [1.2990381056766578, 1.2500000000000013, -6.06217782649107]],
|
|
138
|
+
[[1.2990381056766578, 1.2500000000000013, 6.06217782649107], [1.5000000000000004, 0, 6.06217782649107],
|
|
139
|
+
[2.598076211353316, 0, 3.4999999999999996], [2.2499999999999996, 2.1650635094610986, 3.4999999999999996]],
|
|
140
|
+
[[1.2990381056766578, 1.2500000000000013, -6.06217782649107], [1.5000000000000004, 0, -6.06217782649107], [0, 0, -7]],
|
|
141
|
+
[[0, 0, 7], [1.5000000000000004, 0, 6.06217782649107], [1.2990381056766578, 1.2500000000000013, 6.06217782649107]]
|
|
141
142
|
]
|
|
143
|
+
t.notThrows(() => geom3.validate(obs))
|
|
142
144
|
t.is(pts.length, 72)
|
|
143
145
|
t.true(comparePolygonsAsPoints(pts, exp))
|
|
144
146
|
|
|
145
147
|
// test segments
|
|
146
148
|
obs = ellipsoid({ segments: 8 })
|
|
147
149
|
pts = geom3.toPoints(obs)
|
|
148
|
-
|
|
149
|
-
]
|
|
150
|
+
t.notThrows(() => geom3.validate(obs))
|
|
150
151
|
t.is(pts.length, 32)
|
|
151
152
|
|
|
152
153
|
obs = ellipsoid({ center: [-3, 5, 7], segments: 8 })
|
|
@@ -202,6 +203,7 @@ test('ellipsoid (options)', (t) => {
|
|
|
202
203
|
[[-3, 5, 8], [-2.2928932188134525, 5, 7.707106781186548], [-2.5, 5.5, 7.707106781186548]]
|
|
203
204
|
]
|
|
204
205
|
|
|
206
|
+
t.notThrows(() => geom3.validate(obs))
|
|
205
207
|
t.is(pts.length, 32)
|
|
206
208
|
t.true(comparePolygonsAsPoints(pts, exp))
|
|
207
209
|
})
|
|
@@ -9,6 +9,7 @@ const comparePolygonsAsPoints = require('../../test/helpers/comparePolygonsAsPoi
|
|
|
9
9
|
test('geodesicSphere (defaults)', (t) => {
|
|
10
10
|
const obs = geodesicSphere()
|
|
11
11
|
const pts = geom3.toPoints(obs)
|
|
12
|
+
t.notThrows(() => geom3.validate(obs))
|
|
12
13
|
t.is(pts.length, 20)
|
|
13
14
|
})
|
|
14
15
|
|
|
@@ -39,6 +40,7 @@ test('geodesicSphere (options)', (t) => {
|
|
|
39
40
|
[[0, -2.628654726407001, -4.253254557317035], [2.628654726407001, -4.253254557317035, 0], [-2.628654726407001, -4.253254557317035, 0]]
|
|
40
41
|
]
|
|
41
42
|
|
|
43
|
+
t.notThrows(() => geom3.validate(obs))
|
|
42
44
|
t.is(pts.length, 20)
|
|
43
45
|
t.true(comparePolygonsAsPoints(pts, exp))
|
|
44
46
|
|
|
@@ -46,5 +48,6 @@ test('geodesicSphere (options)', (t) => {
|
|
|
46
48
|
obs = geodesicSphere({ radius: 5, frequency: 18 })
|
|
47
49
|
pts = geom3.toPoints(obs)
|
|
48
50
|
|
|
51
|
+
t.notThrows.skip(() => geom3.validate(obs))
|
|
49
52
|
t.is(pts.length, 180)
|
|
50
53
|
})
|