@jscad/web 2.5.10 → 2.6.0

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.
Files changed (80) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +1 -1
  3. package/dist/jscad-web.min.js +959 -2030
  4. package/examples/CHANGELOG.md +30 -0
  5. package/examples/README.md +1 -5
  6. package/examples/package.json +1 -1
  7. package/examples/parameters/gear.js +1 -1
  8. package/locales/README.md +23 -0
  9. package/locales/de.json +1 -0
  10. package/locales/en.json +2 -1
  11. package/locales/fr.json +1 -0
  12. package/locales/hr.json +1 -0
  13. package/locales/ja.json +1 -0
  14. package/locales/zh.json +62 -0
  15. package/package.json +7 -7
  16. package/postInstall.js +0 -1
  17. package/src/index.js +2 -1
  18. package/src/sideEffects/i18n/index.js +2 -1
  19. package/src/sideEffects/worker/index.js +7 -8
  20. package/src/ui/flow/design.js +10 -305
  21. package/src/ui/flow/reducers.js +304 -0
  22. package/examples/old/benchmark-cag.jscad +0 -27
  23. package/examples/old/benchmark-csg.jscad +0 -29
  24. package/examples/old/benchmark.jscad +0 -25
  25. package/examples/old/bunch-cubes.jscad +0 -17
  26. package/examples/old/complex/example001.jscad +0 -31
  27. package/examples/old/complex/example002.jscad +0 -25
  28. package/examples/old/complex/example003.jscad +0 -25
  29. package/examples/old/complex/example004.jscad +0 -16
  30. package/examples/old/complex/example005.jscad +0 -27
  31. package/examples/old/complex/globe.js +0 -235
  32. package/examples/old/complex/iphone4-case.js +0 -213
  33. package/examples/old/complex/umbilical_torus.js +0 -43
  34. package/examples/old/complex/umbilical_torus.scad +0 -37
  35. package/examples/old/core/cncCutout.js +0 -16
  36. package/examples/old/core/connectors/servo.js +0 -185
  37. package/examples/old/core/extrusions/extrudeLinear.js +0 -24
  38. package/examples/old/core/extrusions/extrudeRectangular.js +0 -21
  39. package/examples/old/core/extrusions/extrudeRotate.js +0 -43
  40. package/examples/old/core/extrusions/slices/four2three-round.js +0 -62
  41. package/examples/old/core/extrusions/slices/four2three.js +0 -53
  42. package/examples/old/core/extrusions/slices/jar-barrel.js +0 -60
  43. package/examples/old/core/extrusions/slices/jar.js +0 -69
  44. package/examples/old/core/extrusions/slices/non-aff.js +0 -72
  45. package/examples/old/core/extrusions/slices/rose.js +0 -52
  46. package/examples/old/core/extrusions/slices/screw.js +0 -34
  47. package/examples/old/core/extrusions/slices/screwDouble.js +0 -34
  48. package/examples/old/core/extrusions/slices/slices.js +0 -43
  49. package/examples/old/core/extrusions/slices/spring.js +0 -41
  50. package/examples/old/core/extrusions/slices/three2four.js +0 -42
  51. package/examples/old/core/extrusions/slices/tor.js +0 -30
  52. package/examples/old/core/hulls/hullChain.js +0 -58
  53. package/examples/old/core/lookup.js +0 -19
  54. package/examples/old/core/platonics/main.jscad +0 -42
  55. package/examples/old/core/platonics/maths_geodesic.jscad +0 -192
  56. package/examples/old/core/platonics/origv07/dualdodeca_difference.stl +0 -1962
  57. package/examples/old/core/platonics/origv07/dualdodeca_intersection.stl +0 -1374
  58. package/examples/old/core/platonics/origv07/dualdodeca_union.stl +0 -1822
  59. package/examples/old/core/platonics/origv07/maths_geodesic.scad +0 -162
  60. package/examples/old/core/platonics/origv07/platonic.scad +0 -483
  61. package/examples/old/core/platonics/origv07/test_platonic.scad +0 -616
  62. package/examples/old/core/platonics/platonic.jscad +0 -528
  63. package/examples/old/core/text/textSimplex.js +0 -625
  64. package/examples/old/core/transforms/transformations.js +0 -29
  65. package/examples/old/echo.jscad +0 -7
  66. package/examples/old/formats/scad/example001.scad +0 -26
  67. package/examples/old/formats/scad/example002.scad +0 -23
  68. package/examples/old/formats/scad/example003.scad +0 -20
  69. package/examples/old/formats/scad/example004.scad +0 -11
  70. package/examples/old/formats/scad/example005.scad +0 -20
  71. package/examples/old/json_logo.json +0 -1
  72. package/examples/old/parameters/axis-coupler.js +0 -149
  73. package/examples/old/parameters/celtic-knot-ring.js +0 -300
  74. package/examples/old/parameters/grille.js +0 -257
  75. package/examples/old/parameters/lamp-shade.js +0 -369
  76. package/examples/old/parameters/name-plate.js +0 -46
  77. package/examples/old/parameters/s-hook.js +0 -131
  78. package/examples/old/parameters/stepper-motor.js +0 -127
  79. package/examples/old/various/logo.js +0 -32
  80. package/examples/old/voxel.json +0 -1
@@ -1,53 +0,0 @@
1
- /*
2
- // title: Four to three (sides)
3
- // author: Eduard Bespalov
4
- // license: MIT License
5
- // description: testing solidFromSlices()
6
- */
7
- // TODO the code this demonstrates does not seem to exist any more.
8
-
9
- const jscad = require('@jscad/modeling')
10
- console.log(jscad)
11
- const { geom2, geom3, line2, path2, poly3 } = require('@jscad/modeling').geometries
12
-
13
- const { extrudeFromSlices } = jscad.extrusions
14
-
15
- const getParameterDefinitions = () => {
16
- return [
17
- { name: 'radius', caption: 'Radius:', type: 'float', default: 10 },
18
- { name: 'height', caption: 'Height:', type: 'float', default: 35 },
19
- { name: 'twist', caption: 'Twist:', type: 'int', default: 90 }
20
- ]
21
- }
22
-
23
- const main = (params) => {
24
- var thing = thingTwisted(params.radius, params.height, params.twist)
25
- return thing
26
- }
27
-
28
- function thingTwisted (radius, height, twistangle) {
29
- twistangle = twistangle || 0
30
-
31
- var flatBottom = poly3.fromPoints([
32
- [-radius, -radius, 0],
33
- [radius, -radius, 0],
34
- [radius, radius, 0]
35
- ])
36
-
37
- var thing = flatBottom.solidFromSlices({
38
- numslices: height,
39
- callback: function (t) {
40
- var coef = 1 - t
41
- var h = height * t
42
- return poly3.fromPoints([
43
- [-radius, -radius, h],
44
- [radius, -radius, h],
45
- [radius * coef, radius, h],
46
- [-radius * coef, radius, h]
47
- ]).rotate([0, 0, 0], [0, 0, 1], twistangle * t)
48
- }
49
- })
50
- return thing
51
- }
52
-
53
- module.exports = { main, getParameterDefinitions }
@@ -1,60 +0,0 @@
1
- // title: Jar barrel
2
- // author: Eduard Bespalov
3
- // license: MIT License
4
- // description: testing solidFromSlices()
5
-
6
- // Here we define the user editable parameters:
7
- const getParameterDefinitions = () => {
8
- return [
9
- { name: 'diameter', caption: 'Jar diameter:', type: 'float', default: 35 },
10
- { name: 'height', caption: 'Jar height:', type: 'float', default: 35 },
11
- { name: 'wallThick', caption: 'Jar wall thick:', type: 'float', default: 1 }
12
- ]
13
- }
14
-
15
- const main = (params) => {
16
- var radius = params.diameter / 2
17
- var thick = params.wallThick
18
- var height = params.height
19
- var bottomThick = 2 * thick
20
-
21
- var jar = hexTwisted(radius, height, 60).subtract(
22
- hexTwisted(radius - thick, height - bottomThick, 60)
23
- // rotate because jar is already rotated on that level
24
- // otherwise will get holes
25
- .rotateZ(60 * (bottomThick / height))
26
- .translate([0, 0, bottomThick]) // make jar bottom
27
- )
28
- return jar
29
- }
30
-
31
- function hexTwisted (radius, height, twistangle) {
32
- twistangle = twistangle || 0
33
- var sqrt3 = Math.sqrt(3) / 2
34
- var cag = geom2.fromPoints([
35
- [radius, 0, 0],
36
- [radius / 2, radius * sqrt3, 0],
37
- [-radius / 2, radius * sqrt3, 0],
38
- [-radius, 0, 0],
39
- [-radius / 2, -radius * sqrt3, 0],
40
- [radius / 2, -radius * sqrt3, 0]
41
- ]).expand(4, CSG.defaultResolution2D)
42
-
43
- var flatBottom = poly3.fromPoints(
44
- cag.getOutlinePaths()[0].points
45
- )
46
-
47
- var hex = flatBottom.solidFromSlices({
48
- numslices: height,
49
- callback: function (t) {
50
- var coef = (t > 0.5 ? 1 - t : t) + 0.8
51
- var polygon = this.rotateZ(t * twistangle)
52
- .translate([0, 0, height * t])
53
- .scale([coef, coef, 1])
54
- return polygon
55
- }
56
- })
57
- return hex
58
- }
59
-
60
- module.exports = { main }
@@ -1,69 +0,0 @@
1
- // title: Jar
2
- // author: Eduard Bespalov
3
- // license: MIT License
4
- // description: testing solidFromSlices()
5
-
6
- // Here we define the user editable parameters:
7
- const getParameterDefinitions = () => {
8
- return [
9
- { name: 'diameter', caption: 'Jar diameter:', type: 'float', default: 35 },
10
- { name: 'height', caption: 'Jar height:', type: 'float', default: 35 },
11
- { name: 'wallThick', caption: 'Jar wall thick:', type: 'float', default: 1 }
12
- ]
13
- }
14
-
15
- const main = (params) => {
16
- var radius = params.diameter / 2
17
- var thick = params.wallThick
18
- var height = params.height
19
- var bottomThick = 2 * thick
20
-
21
- var jar = hexTwisted(radius, height, 60).subtract(
22
- hexTwisted(radius - thick, height - bottomThick, 60)
23
- // rotate because jar is already rotated on that level
24
- // otherwise will get holes
25
- .rotateZ(60 * (bottomThick / height))
26
- .translate([0, 0, bottomThick]) // make jar bottom
27
- )
28
- return jar
29
- }
30
-
31
- function hexTwisted (radius, height, twistangle) {
32
- twistangle = twistangle || 0
33
- var sqrt3 = Math.sqrt(3) / 2
34
- var cag = geom2.fromPoints([
35
- [radius, 0, 0],
36
- [radius / 2, radius * sqrt3, 0],
37
- [-radius / 2, radius * sqrt3, 0],
38
- [-radius, 0, 0],
39
- [-radius / 2, -radius * sqrt3, 0],
40
- [radius / 2, -radius * sqrt3, 0]
41
- ]).expand(4, CSG.defaultResolution2D)
42
-
43
- var flatBottom = poly3.fromPoints(
44
- cag.getOutlinePaths()[0].points
45
- )
46
-
47
- var bounds = flatBottom.boundingBox()
48
- // save bounds to remove barrel effect created by rotation
49
- var bottomBounds = {
50
- x: Math.abs(bounds[1].x - bounds[0].x),
51
- y: Math.abs(bounds[1].y - bounds[0].y)
52
- }
53
-
54
- var hex = flatBottom.solidFromSlices({
55
- numslices: height,
56
- callback: function (t) {
57
- var polygon = this.rotateZ(t * twistangle).translate([0, 0, height * t])
58
- var bounds = polygon.boundingBox()
59
-
60
- var xScale = Math.max(1, Math.abs(bounds[1].x - bounds[0].x) / bottomBounds.x)
61
- var yScale = Math.max(1, Math.abs(bounds[1].y - bounds[0].y) / bottomBounds.y)
62
-
63
- return polygon.scale(1 / Math.max(xScale, yScale))
64
- }
65
- })
66
- return hex
67
- }
68
-
69
- module.exports = { main }
@@ -1,72 +0,0 @@
1
- // title: Non Affine Transformation
2
- // author: Eduard Bespalov
3
- // license: MIT License
4
- // description: testing solidFromSlices()
5
-
6
- const main = (params) => {
7
- var radius = 20
8
-
9
- var height = 60
10
-
11
- var vec = new CSG.Vector3D(0, radius, 0)
12
-
13
- var angle
14
-
15
- angle = 360 / 7
16
- var pol7 = poly3.fromPoints([
17
- vec,
18
- vec.rotateZ(1 * angle),
19
- vec.rotateZ(2 * angle),
20
- vec.rotateZ(3 * angle),
21
- vec.rotateZ(4 * angle),
22
- vec.rotateZ(5 * angle),
23
- vec.rotateZ(6 * angle)
24
- ])
25
-
26
- angle = 360 / 6
27
- var hex = poly3.fromPoints([
28
- vec,
29
- vec.rotateZ(1 * angle),
30
- vec.rotateZ(2 * angle),
31
- vec.rotateZ(3 * angle),
32
- vec.rotateZ(4 * angle),
33
- vec.rotateZ(5 * angle)
34
- ])
35
-
36
- angle = 360 / 5
37
- var pent = poly3.fromPoints([
38
- vec,
39
- vec.rotateZ(1 * angle),
40
- vec.rotateZ(2 * angle),
41
- vec.rotateZ(3 * angle),
42
- vec.rotateZ(4 * angle)
43
- ])
44
-
45
- angle = 360 / 4
46
- var square = poly3.fromPoints([
47
- vec,
48
- vec.rotateZ(1 * angle),
49
- vec.rotateZ(2 * angle),
50
- vec.rotateZ(3 * angle)
51
- ])
52
-
53
- angle = 360 / 3
54
- var triag = poly3.fromPoints([
55
- vec,
56
- vec.rotateZ(1 * angle),
57
- vec.rotateZ(2 * angle)
58
- ])
59
-
60
- var polygons = [pol7, hex, pent, square, triag, pol7, hex, pent, square, triag]
61
-
62
- return triag.solidFromSlices({
63
- numslices: polygons.length,
64
- callback: function (t, slice) {
65
- return polygons[slice].translate(
66
- [0, 0, height * t]
67
- )
68
- }
69
- })
70
- }
71
-
72
- module.exports = { main }
@@ -1,52 +0,0 @@
1
- // title: Rose Curve
2
- // author: Eduard Bespalov
3
- // license: MIT License
4
- // description: testing solidFromSlices()
5
-
6
- const main = (params) => {
7
- var radius = 50
8
-
9
- var height = 60
10
-
11
- var vec = new CSG.Vector3D(0, 5, 0)
12
-
13
- var angle
14
-
15
- angle = 360 / 5
16
- var pent = poly3.fromPoints([
17
- vec,
18
- vec.rotateZ(1 * angle),
19
- vec.rotateZ(2 * angle),
20
- vec.rotateZ(3 * angle),
21
- vec.rotateZ(4 * angle)
22
- ]).rotateY(90).setColor([1, 0, 0.1])// .translate([0, radius, 0]);
23
-
24
- // rose: r = a * sin(k * fi)
25
- // k = 5 /3
26
- var k = 5 / 3
27
- return pent.solidFromSlices({
28
- numslices: 300,
29
- loop: true,
30
- callback: function (t, slice) {
31
- var angle = t * Math.PI * 3
32
-
33
- var r = radius * Math.sin(k * angle)
34
-
35
- var x = r * Math.cos(angle)
36
-
37
- var y = r * Math.sin(angle)
38
-
39
- var vec = new CSG.Vector3D(x, y, 0)
40
- // normal
41
- var x1 = radius * (k * Math.cos(k * angle) * Math.cos(angle) - Math.sin(angle) * Math.sin(k * angle))
42
-
43
- var y1 = radius * (k * Math.cos(k * angle) * Math.sin(angle) + Math.cos(angle) * Math.sin(k * angle))
44
-
45
- var turn = (new CSG.Vector2D(x1, y1)).angleDegrees()
46
-
47
- return this.rotateZ(turn).translate(vec)
48
- }
49
- })
50
- }
51
-
52
- module.exports = { main }
@@ -1,34 +0,0 @@
1
- // title: Screw
2
- // author: Eduard Bespalov
3
- // license: MIT License
4
- // description: testing solidFromSlices()
5
-
6
- const main = (params) => {
7
- var sqrt3 = Math.sqrt(3) / 2
8
- var radius = 10
9
-
10
- var hex = poly3.fromPoints([
11
- [radius, 0, 0],
12
- [radius / 2, radius * sqrt3, 0],
13
- [-radius / 2, radius * sqrt3, 0],
14
- [-radius, 0, 0],
15
- [-radius / 2, -radius * sqrt3, 0],
16
- [radius / 2, -radius * sqrt3, 0]
17
- ]).setColor(
18
- [0, 0.8, 0]
19
- )
20
- var angle = 5
21
- return hex.solidFromSlices({
22
- numslices: 720 / angle,
23
- callback: function (t, slice) {
24
- var coef = 1 - t * 0.8
25
- return this.scale(coef).translate([radius * 4 * t, t * 15, 0]).rotate(
26
- [0, 20, 0],
27
- [-1, 0, 0],
28
- angle * slice
29
- )
30
- }
31
- })
32
- }
33
-
34
- module.exports = { main }
@@ -1,34 +0,0 @@
1
- // title: Screw
2
- // author: Eduard Bespalov
3
- // license: MIT License
4
- // description: testing solidFromSlices()
5
-
6
- const main = (params) => {
7
- var sqrt3 = Math.sqrt(3) / 2
8
- var radius = 10
9
-
10
- var hex = poly3.fromPoints([
11
- [radius, 0, 0],
12
- [radius / 2, radius * sqrt3, 0],
13
- [-radius / 2, radius * sqrt3, 0],
14
- [-radius, 0, 0],
15
- [-radius / 2, -radius * sqrt3, 0],
16
- [radius / 2, -radius * sqrt3, 0]
17
- ]).setColor(
18
- [0, 0.8, 0]
19
- )
20
- var angle = 5
21
- return hex.solidFromSlices({
22
- numslices: 720 / angle,
23
- callback: function (t, slice) {
24
- var coef = 1 - t * 0.8
25
- return this.rotateZ(5 * slice).scale(coef).translate([radius * 4 * t, t * 15, 0]).rotate(
26
- [0, 20, 0],
27
- [-1, 0, 0],
28
- angle * slice
29
- )
30
- }
31
- })
32
- }
33
-
34
- module.exports = { main }
@@ -1,43 +0,0 @@
1
- // title: Slices (single screw evolution)
2
- // author: Eduard Bespalov
3
- // license: MIT License
4
- // description: testing solidFromSlices()
5
- const { poly3 } = require('@jscad/modeling').geometry
6
- const { extrudeFromSlices } = require('@jscad/modeling').operations
7
-
8
- const main = (params) => {
9
- const radius = 20
10
- const angle = 5
11
-
12
- const hex = poly3.fromPoints([
13
- [radius, 0, 0],
14
- [radius + 3, 0, 3],
15
- [radius, 0, 6]
16
- ])
17
-
18
- /* return hex.solidFromSlices({
19
- numslices: 420 / angle,
20
- callback: function (t, slice) {
21
- return this.translate([0, 0, t * 8]).rotate(
22
- [0, 0, 0], // center
23
- [0, 0, 10], // direction
24
- angle * slice
25
- )
26
- }
27
- }) */
28
-
29
- return extrudeFromSlices(
30
- {
31
- numberOfSlices: 420 / angle,
32
- callback: (progress, count, slice) => {
33
- return translate([0, 0, t * 8], rotate(
34
- [0, 0, 10 * angle * slice]
35
- ))
36
- // let newshape = circle({ radius: 5 + count, segments: 4 + count })
37
- let newslice = slice.fromSides(geom2.toSides(newshape))
38
- return newslice
39
- }
40
- }, hex
41
- )
42
- }
43
- module.exports = { main }
@@ -1,41 +0,0 @@
1
- /*
2
- // title: Spring
3
- // author: Eduard Bespalov
4
- // license: MIT License
5
- // description: testing solidFromSlices()
6
- // tags: extrusion, slices, spring
7
- */
8
-
9
- const { geom2, geom3, line2, path2, poly3 } = require('@jscad/modeling').geometry
10
-
11
- const main = (params) => {
12
- const sqrt3 = Math.sqrt(3) / 2
13
- const radius = 2
14
- const angle = 10
15
- // generate slice every 10 deg
16
- const springRadius = 10
17
- const loops = 5
18
-
19
- const hex = poly3.createFromPoints([
20
- [radius, 0, 0],
21
- [radius / 2, radius * sqrt3, 0],
22
- [-radius / 2, radius * sqrt3, 0],
23
- [-radius, 0, 0],
24
- [-radius / 2, -radius * sqrt3, 0],
25
- [radius / 2, -radius * sqrt3, 0]
26
- ])
27
-
28
- var loopGap = radius * 2 * sqrt3 + 2// spring thick and gap
29
- return hex.solidFromSlices({
30
- numslices: 360 * loops / angle,
31
- callback: function (t, slice) {
32
- return this.translate([loopGap * loops * t, 0, 0]).rotate(
33
- [0, springRadius, 0],
34
- [-1, 0, 0],
35
- angle * slice
36
- )
37
- }
38
- })
39
- }
40
-
41
- module.exports = { main }
@@ -1,42 +0,0 @@
1
- // title: Three to four (sides)
2
- // author: Eduard Bespalov
3
- // license: MIT License
4
- // description: testing solidFromSlices()
5
-
6
- const getParameterDefinitions = () => {
7
- return [
8
- { name: 'radius', caption: 'Radius:', type: 'float', default: 10 },
9
- { name: 'height', caption: 'Height:', type: 'float', default: 35 },
10
- { name: 'twist', caption: 'Twist:', type: 'int', default: 90 }
11
- ]
12
- }
13
-
14
- const main = (params) => {
15
- var thing = thingTwisted(params.radius, params.height, params.twist)
16
- return thing
17
- }
18
-
19
- function thingTwisted (radius, height, twistangle) {
20
- twistangle = twistangle || 0
21
-
22
- var flatBottom = poly3.fromPoints([
23
- [-radius, -radius, 0],
24
- [radius, -radius, 0],
25
- [radius, radius, 0]
26
- ])
27
-
28
- var thing = flatBottom.solidFromSlices({
29
- numslices: height,
30
- callback: function (t) {
31
- var coef = t
32
- var h = height * t
33
- return poly3.fromPoints([
34
- [-radius, -radius, h],
35
- [radius, -radius, h],
36
- [radius * coef, radius, h],
37
- [-radius * coef, radius, h]
38
- ]).rotate([0, 0, 0], [0, 0, 1], twistangle * t)
39
- }
40
- })
41
- return thing
42
- }
@@ -1,30 +0,0 @@
1
- // title: Tor (multi-color)
2
- // author: Eduard Bespalov
3
- // license: MIT License
4
- // description: testing solidFromSlices()
5
-
6
- const main = (params) => {
7
- var sqrt3 = Math.sqrt(3) / 2
8
- var radius = 10
9
-
10
- var hex = poly3.fromPoints([
11
- [radius, 0, 0],
12
- [radius / 2, radius * sqrt3, 0],
13
- [-radius / 2, radius * sqrt3, 0],
14
- [-radius, 0, 0],
15
- [-radius / 2, -radius * sqrt3, 0],
16
- [radius / 2, -radius * sqrt3, 0]
17
- ])
18
- var angle = 5
19
- return hex.solidFromSlices({
20
- numslices: 360 / angle,
21
- loop: true,
22
- callback: function (t, slice) {
23
- return this.rotate(
24
- [0, 20, 0], [-1, 0, 0], angle * slice
25
- ).setColor(hsl2rgb(t, 1, 0.5))
26
- }
27
- })
28
- }
29
-
30
- module.exports = { main }
@@ -1,58 +0,0 @@
1
- /* title : Chain Hull
2
- // author : Rene K. Mueller, Moissette Mark
3
- // license : MIT License
4
- // date : 2013/04/18
5
- // description: Whosa whatsis suggested "Chain Hull" as described at
6
- // https://plus.google.com/u/0/105535247347788377245/posts/aZGXKFX1ACN
7
- */
8
-
9
- const { sin, cos } = Math
10
- const { circle } = require('@jscad/modeling').primitives
11
- const { translate, scale } = require('@jscad/modeling').transforms
12
- const { union } = require('@jscad/modeling').booleans
13
- const { hullChain } = require('@jscad/modeling').hulls
14
- const { extrudeLinear } = require('@jscad/modeling').extrusions
15
-
16
- const main = () => {
17
- const shell = []
18
- const hexagon = []
19
-
20
- for (let i = 0; i < 12; i++) { // -- shell like
21
- const x = sin(i / 12 * 180) * 10
22
- const y = cos(i / 12 * 180) * 10
23
- shell.push(
24
- translate([x, y, 0], scale(6 - i / 2, circle())) // { center: true }
25
- )
26
- }
27
-
28
- const n = 6
29
- for (let i = 0; i < n; i++) { // -- hexagon chain hulled
30
- const x = sin(i / n * 360) * 10
31
- const y = cos(i / n * 360) * 10
32
- hexagon.push(
33
- translate([x, y, 0], circle())// { center: true }
34
- )
35
- }
36
-
37
- return [
38
- translate([-20, 0, 0],
39
- extrudeLinear({ height: 5 }, hullChain(shell))
40
- ),
41
- hullChain(shell),
42
- translate([20, 0, 0],
43
- union(shell)
44
- ),
45
-
46
- translate([-25, 40, 0],
47
- extrudeLinear({ height: 5 }, hullChain({ closed: true }, hexagon))
48
- ),
49
- translate([0, 40, 0],
50
- hullChain({ closed: true }, hexagon)
51
- ),
52
- translate([25, 40, 0],
53
- union(hexagon)
54
- )
55
- ]
56
- }
57
-
58
- module.exports = { main }
@@ -1,19 +0,0 @@
1
- // title : Lookup
2
- // author : OpenSCAD.org, adapted by Rene K. Mueller
3
- // description: testing lookup() function
4
- // file : lookup.jscad
5
-
6
- // from http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Mathematical_Functions
7
-
8
- function getCylinderH (p) {
9
- return lookup(p, [ [ -200, 5 ], [ -50, 20 ], [ -20, 18 ], [ +80, 25 ], [ +150, 2 ] ]);
10
- }
11
-
12
- function main () {
13
- var w = [];
14
- for (var i = -100; i <= 100; i += 5) {
15
- w.push(translate([i, 0, -30],
16
- cylinder({r1: 2, r2: 2, h: getCylinderH(i) * 3, fn: 16})).setColor(hsl2rgb(((i + 100) / 200) * 0.3 + 0.6, 1, 0.5)));
17
- }
18
- return w;
19
- }
@@ -1,42 +0,0 @@
1
- // title: Platonics
2
- // author: Willliam A. Adams, Rene K. Mueller
3
- // license: Public Domain
4
- // date: 2011/09, 2013/04/01
5
- // description: original an OpenSCAD.org code, adapted for OpenJSCAD.org and testing recursive include()
6
-
7
- include("platonic.jscad");
8
-
9
- function platonicSolid(n) {
10
- var a = n();
11
- return polyhedron({points: a[0], triangles: a[1]});
12
- }
13
-
14
- function platonicWire(n) {
15
- var a = n();
16
- var p = a[0];
17
- var t = a[1];
18
- var o = [];
19
-
20
- for(var i=0; i<t.length; i++) {
21
- for(var j=0; j<t[i].length; j++) {
22
- var p1 = p[t[i][j]];
23
- var p2 = p[t[i][(j+1)%t[i].length]];
24
- o.push(cylinder({start: p1, end: p2, fn:3, r: 0.02}));
25
- }
26
- }
27
- return union(o);
28
- }
29
-
30
- function main() {
31
- var s = [];
32
- s.push(platonicSolid(tetrahedron));
33
- s.push(platonicSolid(hexahedron));
34
- s.push(platonicSolid(octahedron));
35
- s.push(platonicSolid(dodecahedron));
36
- s.push(platonicSolid(icosahedron));
37
- for(var i=0; i<s.length; i++) {
38
- s[i] = s[i].scale(5).translate([(i-s.length/2)*10,0,0]);
39
- }
40
- return s;
41
- }
42
-