V2 Feedback : converting V1 examples
-
Hello, I'm slowly converting V1 examples to V2 syntax.
It went ok for the first example, logo :

// title : OpenJSCAD.org Logo // author : Rene K. Mueller // license : MIT License // revision : 0.003 // tags : Logo,Intersection,Sphere,Cube // file : logo.jscad const jscad = require('@jscad/modeling') const { primitives, transforms, booleans } = jscad const { cube, sphere } = primitives const { intersect, subtract, union } = booleans const { scale, translate } = transforms function main () { return translate([0, 0, 1.5], scale([10, 10, 10], union( subtract( cube({size: 3}), sphere({radius: 2}) ), intersect( sphere({radius: 1.3}), cube({size: 2.1}) ) ) ) ); } module.exports = { main } -
But the second example, sphere with cutouts doesn't look the same as on V1:

It may be default centering that is different// title : Example 001 // author : OpenSCAD.org, adapted by Rene K. Mueller // license : MIT License // description: example001.scad ported to OpenJSCAD.org // file : example001.jscad const jscad = require('@jscad/modeling') const { primitives, transforms, booleans } = jscad const { cylinder, sphere } = primitives const { subtract } = booleans const { rotate } = transforms function radiusFromDiameter (d) { return d / 2; } function rotcy (rot, r, h) { return rotate(rot, cylinder({radius: r, height: h})); } function example001 () { var size = 50; var hole = 25; var radius = radiusFromDiameter(hole); var height = radiusFromDiameter(size * 2.5); return subtract( sphere({radius: radiusFromDiameter(size)}), rotcy([0, 0, 0], radius, height), rotcy([90, 0, 0], radius, height), rotcy([0, 90, 0], radius, height) ); } function main () { return example001(); } module.exports = { main } -
This post is deleted! -
Third example, cone with cutouts, looks ok :

// title : Example 002 // author : OpenSCAD.org, adapted by Rene K. Mueller // license : MIT License // description: example002.scad ported to OpenJSCAD.org // file : example002.jscad const jscad = require('@jscad/modeling') const { primitives, transforms, booleans } = jscad const { cube, cuboid, cylinderElliptic } = primitives const { intersect, subtract, union } = booleans const { translate } = transforms function example002 () { return intersect( subtract( union( cube({size: 30}), translate([0, 0, -25], cuboid({size: [15, 15, 50]})) ), union( cuboid({size: [50, 10, 10]}), cuboid({size: [10, 50, 10]}), cuboid({size: [10, 10, 50]}) ) ), translate([0, 0, 5], cylinderElliptic({height: 50, startRadius: [20,20], endRadius: [5,5]}) )); } function main () { return example002(); } module.exports = { main } -
Fourth example, box with cutouts :

// title : Example 003 // author : OpenSCAD.org, adapted by Rene K. Mueller // license : MIT License // description: example003.scad ported to OpenJSCAD.org // file : example003.jscad const jscad = require('@jscad/modeling') const { primitives, transforms, booleans } = jscad const { cube, cuboid } = primitives const { subtract, union } = booleans function example003 () { return subtract( union( cube({size: 30}), cuboid({size: [40, 15, 15]}), cuboid({size: [15, 40, 15]}), cuboid({size: [15, 15, 40]}) ), union( cuboid({size: [50, 10, 10]}), cuboid({size: [10, 50, 10]}), cuboid({size: [10, 10, 50]}) ) ); } function main () { return example003(); } module.exports = { main } -
Fifth example, pavillon :

I needed to move cylinders (columns) and cube (enter) to make them cope with their v1 conterparts// title : Example 005 // author : OpenSCAD.org, adapted by Rene K. Mueller // license : MIT License // description: example005.scad ported to OpenJSCAD // file : example005.jscad const jscad = require('@jscad/modeling') const { primitives, transforms, booleans } = jscad const { cube, cylinder, cylinderElliptic } = primitives const { subtract, union } = booleans const { translate, scale } = transforms function example005 () { var cy = []; for (var i = 0; i <= 5; i++) { cy[i] = translate([Math.sin(360 * i / 6) * 80, Math.cos(360 * i / 6) * 80, 80], cylinder({height: 200, radius: 10})); } return translate([0, 0, -120], union( subtract( cylinder({height: 50, radius: 100}), translate([0, 0, 10], cylinder({height: 50, radius: 80})), translate([100, 0, 35-25], cube({size: 50})) ), cy, translate([0, 0, 200], cylinderElliptic({height: 80, startRadius: [120,120], endRadius: [1,1]})) ) ); } function main () { return scale([1 / 3, 1 / 3, 1 / 3], example005()); } module.exports = { main } -
Sixth example, transformations :

It looks ok, except for transform (so, I removed it) that does not seem to work with same parameters as V1.// title : transformations // author : Mark Moissette // license : MIT License // description: all the different transforms operations const jscad = require('@jscad/modeling') const { primitives, transforms } = jscad const { cube } = primitives const { scale, translate, rotate, transform } = transforms function main () { const testCube = cube(); return [ translate([0, 10, 0], testCube), // simple translation translate([10, 0, 0], rotate([10, 5, 0], testCube)), // translate + rotate translate([-10, 0, 0], scale([0.5, 0.5, 5], testCube)), // translate + scale /*transform([ // matrix transform Math.cos(15), -Math.sin(15), 0, 0, Math.sin(15), Math.cos(15), 0, 0, 0, 0, 1, 1, 0, 0, 0, 1 ], testCube)*/ ] } module.exports = { main } -
Seventh example, expand :

It looks ok.// title : Expand // author : OpenSCAD.org, adapted by Rene K. Mueller // license : MIT License // description: testing expand() function // file : expand.jscad const jscad = require('@jscad/modeling') const { primitives, transforms, booleans, expansions } = jscad const { cube, cylinder } = primitives const { subtract, union } = booleans const { rotate, scale, translate } = transforms const { expand } = expansions function main () { return scale([10, 10, 10], union( expand({delta:0.2, segments:8}, subtract( cube({size:2}), translate([0.3, -0.3, 0.3], cube({size:2})))), translate([-4, 0, 0], subtract( cube({size:2}), translate([0.3, -0.3, 0.3], cube({size:2})))), expand({delta:0.3, segments:8}, translate([0, -3, 0], cube({size:2}))), translate([-4, -3, 0], cube({size:2})), expand({delta:0.3, segments:4}, translate([0, 4, 0], cylinder({radius: 1, height: 2, segments: 16}))), translate([-4, 4, 0], cylinder({radius: 1, height: 2})) )); } module.exports = { main } -
Eighth example, lookup :

It looks ok, but my lookup function is maybe buggy, I needed to stretch return value (x2) to have same lengths as V1, and to add a center to each cylinders to make it look the same.// title : Lookup // author : OpenSCAD.org, adapted by Rene K. Mueller // description: testing lookup() function // file : lookup.jscad // from http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Mathematical_Functions const jscad = require('@jscad/modeling') const { primitives, transforms, colors, maths } = jscad const { cylinder } = primitives const { translate } = transforms const { colorize, hslToRgb } = colors const { vec2 } = maths const { lerp } = vec2 function getCylinderH (p) { return lookup(p, [ [ -200, 5 ], [ -50, 20 ], [ -20, 18 ], [ +80, 25 ], [ +150, 2 ] ]); } function main () { var w = []; for (var i = -100; i <= 100; i += 5) { w.push(colorize(hslToRgb([((i + 100) / 200) * 0.3 + 0.6, 1, 0.5]), translate([i, 0, -30], cylinder({radius: 4, height: getCylinderH(i) * 3 *2, segments: 16 , center : [i,0,getCylinderH(i) * 3] })))); } return w; } function lookup(ix, L){ // L = [ [ i0, v0], ..., [iN, vN] ] if (ix <= L[0][0]) return L[0][0]; var i = L.length-1; if (ix >= L[i][0]) return L[i][0]; i = L.findIndex( x => x[0] >= ix); v1 = L[i-1][1]; v2 = L[i][1]; if (ix === L[i-1][0]) return v1; if (ix === L[i][0]) return v2; var i1 = L[i-1][0], i2 = L[i][0]; var r = v1 + (v2-v1) / (i2-i1) * (ix-i1); return r; } module.exports = { main }
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login