JSCAD User Group
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    V2 Feedback : converting V1 examples

    Scheduled Pinned Locked Moved Development Discussions
    9 Posts 1 Posters 1.6k Views 1 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • gilboonetG Offline
      gilboonet
      last edited by gilboonet

      Hello, I'm slowly converting V1 examples to V2 syntax.
      It went ok for the first example, logo :
      Capture d’écran de 2020-08-29 14-42-25.png

      // 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 }
      
      1 Reply Last reply Reply Quote 0
      • gilboonetG Offline
        gilboonet
        last edited by

        But the second example, sphere with cutouts doesn't look the same as on V1:
        Capture d’écran de 2020-08-29 14-51-45.png
        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 }
        
        1 Reply Last reply Reply Quote 0
        • gilboonetG Offline
          gilboonet
          last edited by

          This post is deleted!
          1 Reply Last reply Reply Quote 0
          • gilboonetG Offline
            gilboonet
            last edited by

            Third example, cone with cutouts, looks ok :
            Capture d’écran de 2020-08-29 15-38-54.png

            // 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 }
            
            1 Reply Last reply Reply Quote 0
            • gilboonetG Offline
              gilboonet
              last edited by

              Fourth example, box with cutouts :
              Capture d’écran de 2020-08-29 15-53-38.png

              // 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 }
              
              1 Reply Last reply Reply Quote 0
              • gilboonetG Offline
                gilboonet
                last edited by

                Fifth example, pavillon :
                Capture d’écran de 2020-08-29 16-14-28.png
                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 }
                
                
                1 Reply Last reply Reply Quote 0
                • gilboonetG Offline
                  gilboonet
                  last edited by gilboonet

                  Sixth example, transformations :
                  Capture d’écran de 2020-08-30 10-22-07.png
                  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 }
                  
                  1 Reply Last reply Reply Quote 0
                  • gilboonetG Offline
                    gilboonet
                    last edited by

                    Seventh example, expand :
                    Capture d’écran de 2020-08-30 14-47-35.png
                    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 }
                    
                    
                    1 Reply Last reply Reply Quote 0
                    • gilboonetG Offline
                      gilboonet
                      last edited by

                      Eighth example, lookup :
                      Capture d’écran de 2020-08-30 16-16-04.png
                      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 }
                      
                      
                      1 Reply Last reply Reply Quote 0

                      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
                      • First post
                        Last post
                      Powered by NodeBB | Contributors