@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.
- package/CHANGELOG.md +35 -0
- package/README.md +1 -1
- package/dist/jscad-web.min.js +959 -2030
- package/examples/CHANGELOG.md +30 -0
- package/examples/README.md +1 -5
- package/examples/package.json +1 -1
- package/examples/parameters/gear.js +1 -1
- package/locales/README.md +23 -0
- package/locales/de.json +1 -0
- package/locales/en.json +2 -1
- package/locales/fr.json +1 -0
- package/locales/hr.json +1 -0
- package/locales/ja.json +1 -0
- package/locales/zh.json +62 -0
- package/package.json +7 -7
- package/postInstall.js +0 -1
- package/src/index.js +2 -1
- package/src/sideEffects/i18n/index.js +2 -1
- package/src/sideEffects/worker/index.js +7 -8
- package/src/ui/flow/design.js +10 -305
- package/src/ui/flow/reducers.js +304 -0
- package/examples/old/benchmark-cag.jscad +0 -27
- package/examples/old/benchmark-csg.jscad +0 -29
- package/examples/old/benchmark.jscad +0 -25
- package/examples/old/bunch-cubes.jscad +0 -17
- package/examples/old/complex/example001.jscad +0 -31
- package/examples/old/complex/example002.jscad +0 -25
- package/examples/old/complex/example003.jscad +0 -25
- package/examples/old/complex/example004.jscad +0 -16
- package/examples/old/complex/example005.jscad +0 -27
- package/examples/old/complex/globe.js +0 -235
- package/examples/old/complex/iphone4-case.js +0 -213
- package/examples/old/complex/umbilical_torus.js +0 -43
- package/examples/old/complex/umbilical_torus.scad +0 -37
- package/examples/old/core/cncCutout.js +0 -16
- package/examples/old/core/connectors/servo.js +0 -185
- package/examples/old/core/extrusions/extrudeLinear.js +0 -24
- package/examples/old/core/extrusions/extrudeRectangular.js +0 -21
- package/examples/old/core/extrusions/extrudeRotate.js +0 -43
- package/examples/old/core/extrusions/slices/four2three-round.js +0 -62
- package/examples/old/core/extrusions/slices/four2three.js +0 -53
- package/examples/old/core/extrusions/slices/jar-barrel.js +0 -60
- package/examples/old/core/extrusions/slices/jar.js +0 -69
- package/examples/old/core/extrusions/slices/non-aff.js +0 -72
- package/examples/old/core/extrusions/slices/rose.js +0 -52
- package/examples/old/core/extrusions/slices/screw.js +0 -34
- package/examples/old/core/extrusions/slices/screwDouble.js +0 -34
- package/examples/old/core/extrusions/slices/slices.js +0 -43
- package/examples/old/core/extrusions/slices/spring.js +0 -41
- package/examples/old/core/extrusions/slices/three2four.js +0 -42
- package/examples/old/core/extrusions/slices/tor.js +0 -30
- package/examples/old/core/hulls/hullChain.js +0 -58
- package/examples/old/core/lookup.js +0 -19
- package/examples/old/core/platonics/main.jscad +0 -42
- package/examples/old/core/platonics/maths_geodesic.jscad +0 -192
- package/examples/old/core/platonics/origv07/dualdodeca_difference.stl +0 -1962
- package/examples/old/core/platonics/origv07/dualdodeca_intersection.stl +0 -1374
- package/examples/old/core/platonics/origv07/dualdodeca_union.stl +0 -1822
- package/examples/old/core/platonics/origv07/maths_geodesic.scad +0 -162
- package/examples/old/core/platonics/origv07/platonic.scad +0 -483
- package/examples/old/core/platonics/origv07/test_platonic.scad +0 -616
- package/examples/old/core/platonics/platonic.jscad +0 -528
- package/examples/old/core/text/textSimplex.js +0 -625
- package/examples/old/core/transforms/transformations.js +0 -29
- package/examples/old/echo.jscad +0 -7
- package/examples/old/formats/scad/example001.scad +0 -26
- package/examples/old/formats/scad/example002.scad +0 -23
- package/examples/old/formats/scad/example003.scad +0 -20
- package/examples/old/formats/scad/example004.scad +0 -11
- package/examples/old/formats/scad/example005.scad +0 -20
- package/examples/old/json_logo.json +0 -1
- package/examples/old/parameters/axis-coupler.js +0 -149
- package/examples/old/parameters/celtic-knot-ring.js +0 -300
- package/examples/old/parameters/grille.js +0 -257
- package/examples/old/parameters/lamp-shade.js +0 -369
- package/examples/old/parameters/name-plate.js +0 -46
- package/examples/old/parameters/s-hook.js +0 -131
- package/examples/old/parameters/stepper-motor.js +0 -127
- package/examples/old/various/logo.js +0 -32
- 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
|
-
|