@jscad/web 2.5.3 → 2.5.4
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 +11 -0
- package/data/themes.js +40 -40
- package/dist/jscad-web.min.js +46 -46
- package/examples/core/colors/basicColors.js +0 -1
- package/examples/core/colors/colorCube.js +10 -12
- package/examples/core/curves/bezier/extrudeAlongPath.js +20 -22
- package/examples/core/curves/bezier/simpleExtrude.js +4 -6
- package/examples/core/extrusions/basicExtrusions.js +3 -3
- package/examples/core/hulls/hull2D.js +3 -5
- package/examples/core/hulls/hull3D.js +3 -5
- package/examples/core/measurements/measureAggregateBounds.js +5 -7
- package/examples/core/measurements/measureAreaAndVolume.js +6 -8
- package/examples/core/measurements/measureBounds.js +5 -7
- package/examples/core/other/orientation.js +2 -3
- package/examples/core/primitives/dodecahedron.js +1 -3
- package/examples/core/primitives/polyhedron.js +12 -14
- package/examples/core/primitives/primitives2D.js +1 -3
- package/examples/core/primitives/primitives3D.js +2 -4
- package/examples/core/primitives/roundedCuboid.js +7 -9
- package/examples/core/primitives/sphere.js +10 -12
- package/examples/core/primitives/torus.js +20 -22
- package/examples/core/text/text.js +5 -8
- package/examples/core/transforms/align.js +5 -7
- package/examples/core/transforms/center.js +6 -8
- package/examples/import/AMFImport/index.js +1 -3
- package/examples/import/STLImport/index.js +4 -6
- package/examples/import/SVGImport/index.js +0 -1
- package/examples/module-design/mountPlate.js +5 -9
- package/examples/module-design/subFolder/sphereShape.js +1 -3
- package/examples/parameters/allParamTypes.js +19 -21
- package/examples/parameters/balloons.js +15 -26
- package/examples/parameters/gear.js +9 -11
- package/package.json +7 -7
- package/postInstall.js +3 -3
- package/src/index.js +0 -1
- package/src/most-gestures/drags.js +15 -0
- package/src/most-gestures/zooms.js +20 -1
- package/src/sideEffects/dat/index.js +0 -6
- package/src/sideEffects/dom/index.js +0 -2
- package/src/sideEffects/fileDialog/index.js +0 -2
- package/src/sideEffects/i18n/index.js +0 -1
- package/src/sideEffects/localFs/index.js +1 -4
- package/src/sideEffects/localFs/walkFileTree.js +1 -7
- package/src/sideEffects/localStorage/index.js +0 -1
- package/src/sideEffects/state/index.js +0 -11
- package/src/ui/flow/design.js +5 -26
- package/src/ui/flow/dom.js +0 -1
- package/src/ui/flow/flowOut.js +0 -24
- package/src/ui/flow/languages.js +0 -1
- package/src/ui/flow/shortcuts.js +0 -1
- package/src/ui/flow/themes.js +1 -1
- package/src/ui/flow/tools.js +0 -6
- package/src/ui/views/editor.js +0 -6
- package/src/ui/views/parameterControls.js +0 -1
- package/src/ui/views/status.js +4 -2
- package/src/utils/keys.js +0 -1
|
@@ -48,17 +48,15 @@ const main = (params) => {
|
|
|
48
48
|
return o
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
const getParameterDefinitions = () =>
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
]
|
|
62
|
-
}
|
|
51
|
+
const getParameterDefinitions = () => [
|
|
52
|
+
{
|
|
53
|
+
name: 'method',
|
|
54
|
+
type: 'choice',
|
|
55
|
+
caption: 'Colorize Method',
|
|
56
|
+
values: ['rgb', 'hsv', 'hsl'],
|
|
57
|
+
captions: ['(r,g,b) = (x,y,z)', '(h,s,v) = (x,y,z)', '(h,s,l) = (x,y,z)'],
|
|
58
|
+
initial: 'hsl'
|
|
59
|
+
}
|
|
60
|
+
]
|
|
63
61
|
|
|
64
62
|
module.exports = { main, getParameterDefinitions }
|
|
@@ -16,27 +16,25 @@ const { translate } = jscad.transforms
|
|
|
16
16
|
const { slice } = jscad.extrusions
|
|
17
17
|
const { bezier } = jscad.curves
|
|
18
18
|
|
|
19
|
-
const main = () =>
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
]
|
|
37
|
-
}
|
|
19
|
+
const main = () => [
|
|
20
|
+
box4x4([-8, -4, 2], [1, 0, 0]),
|
|
21
|
+
box4x4([8, 4, 12], [0, 1, 0]),
|
|
22
|
+
tube([
|
|
23
|
+
[6, 4, 12],
|
|
24
|
+
[-3, 4, 12],
|
|
25
|
+
[4, -4, 2],
|
|
26
|
+
[-6, -4, 2]
|
|
27
|
+
]),
|
|
28
|
+
tube([
|
|
29
|
+
[8, 2, 12],
|
|
30
|
+
[8, -6, 12],
|
|
31
|
+
[8, 0, 0],
|
|
32
|
+
[-8, 4, 2],
|
|
33
|
+
[-8, -2, 2]
|
|
34
|
+
])
|
|
35
|
+
]
|
|
38
36
|
|
|
39
|
-
|
|
37
|
+
const tube = (bezierControlPoints) => {
|
|
40
38
|
// Create the initial slice
|
|
41
39
|
const circ = circle({ radius: 1, segments: 32 })
|
|
42
40
|
const l = bezierControlPoints.length - 1
|
|
@@ -69,7 +67,7 @@ function tube (bezierControlPoints) {
|
|
|
69
67
|
}, tubeSlice)
|
|
70
68
|
}
|
|
71
69
|
|
|
72
|
-
|
|
70
|
+
const rotationMatrixFromVectors = (srcVector, targetVector) => {
|
|
73
71
|
// From https://gist.github.com/kevinmoran/b45980723e53edeb8a5a43c49f134724
|
|
74
72
|
srcVector = maths.vec3.normalize(maths.vec3.create(), srcVector)
|
|
75
73
|
targetVector = maths.vec3.normalize(maths.vec3.create(), targetVector)
|
|
@@ -86,7 +84,7 @@ function rotationMatrixFromVectors (srcVector, targetVector) {
|
|
|
86
84
|
)
|
|
87
85
|
}
|
|
88
86
|
|
|
89
|
-
|
|
87
|
+
const box4x4 = (translation, color) => {
|
|
90
88
|
const b = cuboid({ size: [4, 4, 4] })
|
|
91
89
|
return colors.colorize(color, translate(translation, b))
|
|
92
90
|
}
|
|
@@ -13,13 +13,11 @@ const { maths, extrusions } = jscad
|
|
|
13
13
|
const { bezier } = jscad.curves
|
|
14
14
|
const { slice } = extrusions
|
|
15
15
|
|
|
16
|
-
const main = () =>
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
]
|
|
20
|
-
}
|
|
16
|
+
const main = () => [
|
|
17
|
+
extrudeWobble(30)
|
|
18
|
+
]
|
|
21
19
|
|
|
22
|
-
|
|
20
|
+
const extrudeWobble = (height) => {
|
|
23
21
|
const squareSlice = slice.fromPoints([[10, 10], [-10, 10], [-10, -10], [10, -10]])
|
|
24
22
|
|
|
25
23
|
const xCurve = bezier.create([1, 2, 0.4, 1])
|
|
@@ -14,7 +14,7 @@ const { extrudeRectangular, extrudeLinear, extrudeRotate } = jscad.extrusions
|
|
|
14
14
|
const { translate } = jscad.transforms
|
|
15
15
|
const { expand } = jscad.expansions
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
const main = () => {
|
|
18
18
|
const shapes = []
|
|
19
19
|
const aLine = line([[0, 0], [0, 5], [2, 8], [5, 9]])
|
|
20
20
|
shapes.push(translate([-17, 0, 0], aLine))
|
|
@@ -29,8 +29,8 @@ function main () {
|
|
|
29
29
|
const extrudedPoly = extrudeLinear({ height: 5, twistAngle: Math.PI / 4, twistSteps: 10 }, poly)
|
|
30
30
|
shapes.push(translate([-1, 0, 0], extrudedPoly))
|
|
31
31
|
|
|
32
|
-
const starPoly = translate([3,0,0], star())
|
|
33
|
-
const extrudedStar = extrudeRotate({segments: 32, startAngle: 0, angle: (Math.PI * 0.75), overflow: 'cap'}, starPoly)
|
|
32
|
+
const starPoly = translate([3, 0, 0], star())
|
|
33
|
+
const extrudedStar = extrudeRotate({ segments: 32, startAngle: 0, angle: (Math.PI * 0.75), overflow: 'cap' }, starPoly)
|
|
34
34
|
shapes.push(translate([9, 0, 0], extrudedStar))
|
|
35
35
|
|
|
36
36
|
return shapes
|
|
@@ -13,11 +13,9 @@ const { circle, rectangle } = jscad.primitives
|
|
|
13
13
|
const { translate } = jscad.transforms
|
|
14
14
|
const { hull, hullChain } = jscad.hulls
|
|
15
15
|
|
|
16
|
-
const getParameterDefinitions = () =>
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
]
|
|
20
|
-
}
|
|
16
|
+
const getParameterDefinitions = () => [
|
|
17
|
+
{ name: 'doHull', type: 'radio', caption: 'Show:', values: ['shapes', 'hull', 'chain'], captions: ['Original Shapes', 'Hull', 'Hull Chain'], initial: 'shapes' }
|
|
18
|
+
]
|
|
21
19
|
|
|
22
20
|
const main = (params) => {
|
|
23
21
|
const shapes = [
|
|
@@ -13,11 +13,9 @@ const { cuboid, sphere } = jscad.primitives
|
|
|
13
13
|
const { translate } = jscad.transforms
|
|
14
14
|
const { hull, hullChain } = jscad.hulls
|
|
15
15
|
|
|
16
|
-
const getParameterDefinitions = () =>
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
]
|
|
20
|
-
}
|
|
16
|
+
const getParameterDefinitions = () => [
|
|
17
|
+
{ name: 'doHull', type: 'radio', caption: 'Show:', values: ['shapes', 'hull', 'chain'], captions: ['Original Shapes', 'Hull', 'Hull Chain'], initial: 'shapes' }
|
|
18
|
+
]
|
|
21
19
|
|
|
22
20
|
const main = (params) => {
|
|
23
21
|
const shapes = [
|
|
@@ -14,13 +14,11 @@ const { measureAggregateBoundingBox } = require('@jscad/modeling').measurements
|
|
|
14
14
|
const { colorize } = require('@jscad/modeling').colors
|
|
15
15
|
const { subtract } = require('@jscad/modeling').booleans
|
|
16
16
|
|
|
17
|
-
const getParameterDefinitions = () =>
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
]
|
|
23
|
-
}
|
|
17
|
+
const getParameterDefinitions = () => [
|
|
18
|
+
{ name: 'rotatex', type: 'slider', initial: 0, min: -3.14, max: 3.14, step: 0.01, caption: 'X Rotation:' },
|
|
19
|
+
{ name: 'rotatey', type: 'slider', initial: 0, min: -3.14, max: 3.14, step: 0.01, caption: 'Y Rotation:' },
|
|
20
|
+
{ name: 'rotatez', type: 'slider', initial: 0, min: -3.14, max: 3.14, step: 0.01, caption: 'Z Rotation:' }
|
|
21
|
+
]
|
|
24
22
|
|
|
25
23
|
const buildBoundingBox = (bounds) => {
|
|
26
24
|
// Bounding box format is an array of arrays of values, eg:
|
|
@@ -14,17 +14,15 @@ const { measureArea, measureVolume } = require('@jscad/modeling').measurements
|
|
|
14
14
|
const { vectorText } = require('@jscad/modeling').text
|
|
15
15
|
const { path2 } = require('@jscad/modeling').geometries
|
|
16
16
|
|
|
17
|
-
const getParameterDefinitions = () =>
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
]
|
|
23
|
-
}
|
|
17
|
+
const getParameterDefinitions = () => [
|
|
18
|
+
{ name: 'shape', type: 'choice', caption: 'Shape:', values: ['circle', 'square', 'star', 'sphere', 'cube'], initial: 'circle' },
|
|
19
|
+
{ name: 'size', type: 'number', initial: 10.0, min: 0.1, max: 10.0, step: 0.01, caption: 'Size:' },
|
|
20
|
+
{ name: 'segments', type: 'choice', values: [8, 16, 32, 64, 128], initial: 16, caption: 'Segments:' }
|
|
21
|
+
]
|
|
24
22
|
|
|
25
23
|
const textPaths = (text, y) => {
|
|
26
24
|
const lineSegmentPointArrays = vectorText({ x: -20, y: -10, input: text })
|
|
27
|
-
let textSegments = lineSegmentPointArrays.map((points) =>
|
|
25
|
+
let textSegments = lineSegmentPointArrays.map((points) => path2.fromPoints({ closed: false }, points))
|
|
28
26
|
textSegments = scale([0.2, 0.2, 0.2], textSegments)
|
|
29
27
|
return translate([-25, y - 10, 0], textSegments)
|
|
30
28
|
}
|
|
@@ -14,13 +14,11 @@ const { measureBoundingBox } = require('@jscad/modeling').measurements
|
|
|
14
14
|
const { colorize } = require('@jscad/modeling').colors
|
|
15
15
|
const { subtract } = require('@jscad/modeling').booleans
|
|
16
16
|
|
|
17
|
-
const getParameterDefinitions = () =>
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
]
|
|
23
|
-
}
|
|
17
|
+
const getParameterDefinitions = () => [
|
|
18
|
+
{ name: 'rotatex', type: 'slider', initial: 0, min: -3.14, max: 3.14, step: 0.01, caption: 'X Rotation:' },
|
|
19
|
+
{ name: 'rotatey', type: 'slider', initial: 0, min: -3.14, max: 3.14, step: 0.01, caption: 'Y Rotation:' },
|
|
20
|
+
{ name: 'rotatez', type: 'slider', initial: 0, min: -3.14, max: 3.14, step: 0.01, caption: 'Z Rotation:' }
|
|
21
|
+
]
|
|
24
22
|
|
|
25
23
|
const buildBoundingBox = (bounds) => {
|
|
26
24
|
// Bounding box format is an array of arrays of values, eg:
|
|
@@ -20,7 +20,6 @@ const getParameterDefinitions = () => {
|
|
|
20
20
|
// UG... only integer steps can be performed reliably
|
|
21
21
|
const max = 360
|
|
22
22
|
const min = -max
|
|
23
|
-
const step = max / 360
|
|
24
23
|
return [
|
|
25
24
|
{ name: 'rotations', type: 'group', caption: 'Rotations (Degrees)' },
|
|
26
25
|
{ name: 'rotateX', type: 'float', caption: 'About X axis', title: 'Rotation from Y to Z', initial: 0, min, max },
|
|
@@ -38,7 +37,7 @@ const getParameterDefinitions = () => {
|
|
|
38
37
|
*/
|
|
39
38
|
const main = (params) => {
|
|
40
39
|
const dimension = 20
|
|
41
|
-
const coordinateSystem = colorize([0, 0, 0, 0.5], cuboidFrame({size: [20, 20, 20]}))
|
|
40
|
+
const coordinateSystem = colorize([0, 0, 0, 0.5], cuboidFrame({ size: [20, 20, 20] }))
|
|
42
41
|
|
|
43
42
|
const axisX = colorize([1, 0, 0], axisDirection(dimension, 'X'))
|
|
44
43
|
const axisY = colorize([0, 1, 0], axisDirection(dimension, 'Y'))
|
|
@@ -46,7 +45,7 @@ const main = (params) => {
|
|
|
46
45
|
|
|
47
46
|
// apply the rotations
|
|
48
47
|
const rotations = [degToRad(params.rotateX), degToRad(params.rotateY), degToRad(params.rotateZ)]
|
|
49
|
-
|
|
48
|
+
const rotated = rotate(rotations, coordinateSystem)
|
|
50
49
|
|
|
51
50
|
return [coordinateSystem, rotated, axisX, axisY, axisZ]
|
|
52
51
|
}
|
|
@@ -10,19 +10,17 @@
|
|
|
10
10
|
|
|
11
11
|
const { polyhedron } = require('@jscad/modeling').primitives
|
|
12
12
|
|
|
13
|
-
const main = () => {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
})
|
|
26
|
-
}
|
|
13
|
+
const main = () => polyhedron({
|
|
14
|
+
points: [
|
|
15
|
+
[0, -10, 60], [0, 10, 60], [0, 10, 0], [0, -10, 0], [60, -10, 60], [60, 10, 60],
|
|
16
|
+
[10, -10, 50], [10, 10, 50], [10, 10, 30], [10, -10, 30], [30, -10, 50], [30, 10, 50]
|
|
17
|
+
],
|
|
18
|
+
faces: [
|
|
19
|
+
[0, 2, 3], [0, 1, 2], [4, 5, 0], [5, 1, 0], [5, 4, 2], [4, 3, 2],
|
|
20
|
+
[6, 9, 8], [6, 8, 7], [6, 11, 10], [6, 7, 11], [10, 11, 8], [10, 8, 9],
|
|
21
|
+
[3, 9, 0], [9, 6, 0], [10, 0, 6], [0, 10, 4], [3, 10, 9], [3, 4, 10],
|
|
22
|
+
[1, 11, 7], [1, 5, 11], [1, 7, 8], [2, 1, 8], [8, 11, 2], [5, 2, 11]
|
|
23
|
+
]
|
|
24
|
+
})
|
|
27
25
|
|
|
28
26
|
module.exports = { main }
|
|
@@ -25,9 +25,7 @@ const main = () => {
|
|
|
25
25
|
star({ vertices: 9, outerRadius: 2, innerRadius: 0.8, density: 2, startAngle: Math.PI / 18 })
|
|
26
26
|
]
|
|
27
27
|
|
|
28
|
-
return allPrimitives.map((primitive, index) =>
|
|
29
|
-
return translate([(index % 4 - 2) * 6, Math.floor(index / 4 - 2) * 6, 0], primitive)
|
|
30
|
-
})
|
|
28
|
+
return allPrimitives.map((primitive, index) => translate([(index % 4 - 2) * 6, Math.floor(index / 4 - 2) * 6, 0], primitive))
|
|
31
29
|
}
|
|
32
30
|
|
|
33
31
|
module.exports = { main }
|
|
@@ -20,7 +20,7 @@ const main = () => {
|
|
|
20
20
|
roundedCuboid({ size: [1, 2, 3], roundRadius: 0.4, segments: 16 }),
|
|
21
21
|
sphere({ radius: 2, segments: 16 }),
|
|
22
22
|
geodesicSphere({ radius: 1.5, segments: 16 }),
|
|
23
|
-
ellipsoid({ radius: [2, 1, 1.5], segments: 64, axes: [[1, 1, 0], [0, -1, 1], [-1, 0, 1]]}),
|
|
23
|
+
ellipsoid({ radius: [2, 1, 1.5], segments: 64, axes: [[1, 1, 0], [0, -1, 1], [-1, 0, 1]] }),
|
|
24
24
|
cylinder({ radius: 1, height: 5 }),
|
|
25
25
|
roundedCylinder({ radius: 1, height: 8, roundRadius: 0.8 }),
|
|
26
26
|
cylinderElliptic({ height: 8, startRadius: [1, 2], startAngle: 0, endRadius: [1, 2], endAngle: (Math.PI / 8), segments: 32 }),
|
|
@@ -29,9 +29,7 @@ const main = () => {
|
|
|
29
29
|
torus({ innerRadius: 1, outerRadius: 1.5, innerSegments: 4, outerSegments: 6, innerRotation: 0 })
|
|
30
30
|
]
|
|
31
31
|
|
|
32
|
-
return allPrimitives.map((primitive, index) =>
|
|
33
|
-
return translate([(index % 4 - 2) * 6, Math.floor(index / 4 - 2) * 6, 0], primitive)
|
|
34
|
-
})
|
|
32
|
+
return allPrimitives.map((primitive, index) => translate([(index % 4 - 2) * 6, Math.floor(index / 4 - 2) * 6, 0], primitive))
|
|
35
33
|
}
|
|
36
34
|
|
|
37
35
|
module.exports = { main }
|
|
@@ -10,15 +10,13 @@
|
|
|
10
10
|
|
|
11
11
|
const { cuboid, roundedCuboid } = require('@jscad/modeling').primitives
|
|
12
12
|
|
|
13
|
-
const getParameterDefinitions = () =>
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
]
|
|
21
|
-
}
|
|
13
|
+
const getParameterDefinitions = () => [
|
|
14
|
+
{ name: 'width', type: 'float', default: 10, caption: 'Width:' },
|
|
15
|
+
{ name: 'height', type: 'float', default: 14, caption: 'Height:' },
|
|
16
|
+
{ name: 'depth', type: 'float', default: 7, caption: 'Depth:' },
|
|
17
|
+
{ name: 'rounded', type: 'choice', caption: 'Round the corners', values: [0, 1], captions: ['No', 'Yes'], default: 1 },
|
|
18
|
+
{ name: 'radius', type: 'float', default: 2, caption: 'Corner Radius:' }
|
|
19
|
+
]
|
|
22
20
|
|
|
23
21
|
/**
|
|
24
22
|
* Create a rounded cuboid with the supplied parameters
|
|
@@ -11,19 +11,17 @@
|
|
|
11
11
|
const { sphere, geodesicSphere } = require('@jscad/modeling').primitives
|
|
12
12
|
const { translate, scale } = require('@jscad/modeling').transforms
|
|
13
13
|
|
|
14
|
-
const main = () =>
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
translate([-15, -25, 0], geodesicSphere({ radius: 10, frequency: 6 })),
|
|
14
|
+
const main = () => [
|
|
15
|
+
translate([15, -25, 0], sphere({ radius: 10, segments: 12 })),
|
|
16
|
+
translate([-15, -25, 0], geodesicSphere({ radius: 10, frequency: 6 })),
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
translate([15, 0, 0], sphere({ radius: 10, segments: 32 })),
|
|
19
|
+
translate([-15, 0, 0], geodesicSphere({ radius: 10, frequency: 24 })),
|
|
21
20
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
21
|
+
scale([0.5, 1, 2], translate([15, 25, 0], sphere({ radius: 10, segments: 32 }))),
|
|
22
|
+
scale([0.5, 2, 1], translate([30, 25, 0], sphere({ radius: 10, segments: 32 }))),
|
|
23
|
+
scale([0.5, 1, 2], translate([-15, 25, 0], geodesicSphere({ radius: 10, frequency: 18 }))),
|
|
24
|
+
scale([0.5, 2, 1], translate([-30, 25, 0], geodesicSphere({ radius: 10, frequency: 18 })))
|
|
25
|
+
]
|
|
28
26
|
|
|
29
27
|
module.exports = { main }
|
|
@@ -12,30 +12,28 @@ const { torus } = require('@jscad/modeling').primitives
|
|
|
12
12
|
const { translate } = require('@jscad/modeling').transforms
|
|
13
13
|
const { degToRad } = require('@jscad/modeling').utils
|
|
14
14
|
|
|
15
|
-
const main = () =>
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
translate([10, 20, 0], torus({ innerRadius: 0.5 })),
|
|
15
|
+
const main = () => [
|
|
16
|
+
// Top Row - Simple Torii
|
|
17
|
+
translate([-10, 20, 0], torus({ innerRadius: 1, innerSegments: 32, outerRadius: 4, outerSegments: 32, innerRotation: 0, startAngle: 0, outerRotation: Math.PI * 2 })),
|
|
18
|
+
translate([0, 20, 0], torus({ innerRadius: 2, outerRadius: 3 })),
|
|
19
|
+
translate([10, 20, 0], torus({ innerRadius: 0.5 })),
|
|
21
20
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
// Second row - Square Torii
|
|
22
|
+
translate([-10, 10, 0], torus({ innerSegments: 4, outerSegments: 4 })),
|
|
23
|
+
translate([0, 10, 0], torus({ innerSegments: 4, outerSegments: 4, innerRotation: degToRad(45) })),
|
|
24
|
+
translate([10, 10, 0], torus({ outerSegments: 4 })),
|
|
25
|
+
translate([20, 10, 0], torus({ innerSegments: 5, outerSegments: 4, innerRotation: degToRad(0) })),
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
// Third Row - Pentagonal Torii
|
|
28
|
+
translate([-10, 0, 0], torus({ innerSegments: 4, outerSegments: 5 })),
|
|
29
|
+
translate([0, 0, 0], torus({ innerSegments: 4, innerRotation: degToRad(45), outerSegments: 5 })),
|
|
30
|
+
translate([10, 0, 0], torus({ innerSegments: 32, outerSegments: 5 })),
|
|
32
31
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
32
|
+
// Fourth Row - Other Variations
|
|
33
|
+
translate([-10, -10, 0], torus({ innerSegments: 4 })),
|
|
34
|
+
translate([0, -10, 0], torus({ innerSegments: 4, innerRotation: 45 })),
|
|
35
|
+
translate([10, -10, 0], torus({ outerSegments: 8 })),
|
|
36
|
+
translate([20, -10, 0], torus({ outerSegments: 3 }))
|
|
37
|
+
]
|
|
40
38
|
|
|
41
39
|
module.exports = { main }
|
|
@@ -16,13 +16,11 @@ const { circle, sphere } = jscad.primitives
|
|
|
16
16
|
const { vectorText } = jscad.text
|
|
17
17
|
const { translate } = jscad.transforms
|
|
18
18
|
|
|
19
|
-
const getParameterDefinitions = () =>
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
]
|
|
25
|
-
}
|
|
19
|
+
const getParameterDefinitions = () => [
|
|
20
|
+
{ name: 'outline_string', initial: 'Outline', type: 'text', caption: 'Outline Text', size: 30 },
|
|
21
|
+
{ name: 'flat_string', initial: 'Flat', type: 'text', caption: 'Flat Text', size: 30 },
|
|
22
|
+
{ name: 'round_string', initial: 'Round', type: 'text', caption: 'Round Text', size: 30 }
|
|
23
|
+
]
|
|
26
24
|
|
|
27
25
|
const main = (params) => {
|
|
28
26
|
const outlineText = buildOutlineText(params.outline_string, 2)
|
|
@@ -39,7 +37,6 @@ const buildOutlineText = (message, characterLineWidth) => {
|
|
|
39
37
|
const lineRadius = characterLineWidth / 2
|
|
40
38
|
const lineCorner = circle({ radius: lineRadius })
|
|
41
39
|
|
|
42
|
-
const lineSegments3D = []
|
|
43
40
|
const lineSegmentPointArrays = vectorText({ x: 0, y: 0, input: message }) // line segments for each character
|
|
44
41
|
|
|
45
42
|
const lineSegments = []
|
|
@@ -13,13 +13,11 @@ const { cuboid } = jscad.primitives
|
|
|
13
13
|
const { subtract } = jscad.booleans
|
|
14
14
|
const { align } = jscad.transforms
|
|
15
15
|
|
|
16
|
-
const getParameterDefinitions = () =>
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
]
|
|
22
|
-
}
|
|
16
|
+
const getParameterDefinitions = () => [
|
|
17
|
+
{ name: 'grouped', type: 'checkbox', checked: false, caption: 'Align as group' },
|
|
18
|
+
{ name: 'modes', type: 'choice', caption: 'modes:', values: ['["none","none","none"]', '["center","center","min"]', '["min","min","min"]', '["max","min","center"]'], initial: '["none","none","none"]' },
|
|
19
|
+
{ name: 'relativeTo', type: 'choice', caption: 'relativeTo:', values: ['[0,0,0]', '[null,null,null]', '[10,-10,0]'], initial: '[0,0,0]' }
|
|
20
|
+
]
|
|
23
21
|
|
|
24
22
|
/**
|
|
25
23
|
* Generates a series of boxes of various sizes, and uses the align function to align them in different ways.
|
|
@@ -13,13 +13,11 @@ const { polygon } = jscad.primitives
|
|
|
13
13
|
const { extrudeLinear } = jscad.extrusions
|
|
14
14
|
const { center } = jscad.transforms
|
|
15
15
|
|
|
16
|
-
const getParameterDefinitions = () =>
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
]
|
|
22
|
-
}
|
|
16
|
+
const getParameterDefinitions = () => [
|
|
17
|
+
{ name: 'centerx', type: 'checkbox', checked: false, caption: 'Center on X:' },
|
|
18
|
+
{ name: 'centery', type: 'checkbox', checked: false, caption: 'Center on Y:' },
|
|
19
|
+
{ name: 'centerz', type: 'checkbox', checked: false, caption: 'Center on Z:' }
|
|
20
|
+
]
|
|
23
21
|
|
|
24
22
|
/**
|
|
25
23
|
* Creates a 3D crosshair, and centers it on various axes according to the parameters
|
|
@@ -36,7 +34,7 @@ const main = (params) => {
|
|
|
36
34
|
return crossHair3D
|
|
37
35
|
}
|
|
38
36
|
|
|
39
|
-
|
|
37
|
+
const crosshair = () => {
|
|
40
38
|
const poly = polygon({
|
|
41
39
|
points: [
|
|
42
40
|
[0, 0], [10, 0], [10, 4], [9, 4], [9, 1], [6, 1], [5, 3],
|
|
@@ -15,11 +15,9 @@ const { union } = require('@jscad/modeling').booleans
|
|
|
15
15
|
const sculpture = require('./3d_sculpture-VernonBussler.stl')
|
|
16
16
|
const frog = require('./frog-OwenCollins.stl')
|
|
17
17
|
|
|
18
|
-
const main = () =>
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
)
|
|
23
|
-
}
|
|
18
|
+
const main = () => union(
|
|
19
|
+
translate([0, 0, 13], rotateZ(-Math.PI / 3, scale([0.25, 0.25, 0.25], frog))),
|
|
20
|
+
translate([-5, 6, 0], sculpture)
|
|
21
|
+
)
|
|
24
22
|
|
|
25
23
|
module.exports = { main }
|
|
@@ -9,15 +9,11 @@
|
|
|
9
9
|
|
|
10
10
|
const { cuboid } = require('@jscad/modeling').primitives
|
|
11
11
|
|
|
12
|
-
const getParameterDefinitions = () =>
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
]
|
|
17
|
-
}
|
|
12
|
+
const getParameterDefinitions = () => [
|
|
13
|
+
{ name: 'plate-group', type: 'group', initial: 'open', caption: 'Mounting Plate' },
|
|
14
|
+
{ name: 'plateLength', type: 'float', initial: 25, caption: 'length', min: 25, max: 200 }
|
|
15
|
+
]
|
|
18
16
|
|
|
19
|
-
const create = (length) => {
|
|
20
|
-
return cuboid({ size: [length, 10, 1] })
|
|
21
|
-
}
|
|
17
|
+
const create = (length) => cuboid({ size: [length, 10, 1] })
|
|
22
18
|
|
|
23
19
|
module.exports = { create, getParameterDefinitions }
|
|
@@ -11,8 +11,6 @@ const { sphere } = require('@jscad/modeling').primitives
|
|
|
11
11
|
const { colorize } = require('@jscad/modeling').colors
|
|
12
12
|
const { translateZ } = require('@jscad/modeling').transforms
|
|
13
13
|
|
|
14
|
-
const sphereShape = (radius) => {
|
|
15
|
-
return colorize([1, 0, 0, 1], translateZ(radius, sphere({ radius })))
|
|
16
|
-
}
|
|
14
|
+
const sphereShape = (radius) => colorize([1, 0, 0, 1], translateZ(radius, sphere({ radius })))
|
|
17
15
|
|
|
18
16
|
module.exports = sphereShape
|