JSCAD User Group

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    1. Home
    2. SimonClark
    3. Posts
    • Profile
    • Following 0
    • Followers 0
    • Topics 4
    • Posts 9
    • Best 0
    • Controversial 0
    • Groups 2

    Posts made by SimonClark

    • RE: V2 Update

      Nice! I'll pull it down tonight.

      posted in Development Discussions
      SimonClark
      SimonClark
    • Bezier tubes

      Screen Shot 2020-07-14 at 10.25.07 AM.png
      Updated my bezier implementation, and I wanted to share. :).

      It can now handle an arbitrary number of control points, and an arbitrary number of dimensions. Also allows for getting the tangential vector at any point along the curve.

      tube([
      	[8,2,12],
      	[8,-6,12],
      	[8,0,0],
      	[-8,4,2],
      	[-8,-2,2]
      ]);
      
      function tube(bezierControlPoints) {
      	let circ = circle({radius: 1, segments:32});
      	let circPoints = geometry.geom2.toPoints(circ);
      	let tubeSlice = slice.fromPoints(circPoints);
      
      	var tubeCurve = math.bezier.create(bezierControlPoints);
      
      	let tube = extrusions.extrudeFromSlices({
      			numberOfSlices: 60,
      			isCapped: true,
      			callback: function (progress, count, base) {
      				let position = tubeCurve.at(progress);
      				let tangent = tubeCurve.tangentAt(progress);
      				let rotation = fromVectors(math.vec3.fromArray([0,0,1]),math.vec3.fromArray(tangent));
      				let translation = math.mat4.fromTranslation(position);
      				let newslice = slice.transform(math.mat4.multiply(translation, rotation), base);
      				return newslice
      			}
      		}, tubeSlice);
      	return tube;
      }
      
      

      My rotation matrix from vectors code is a little funky when it's near 180 degrees, but otherwise, pretty happy with it.

      posted in Development Discussions
      SimonClark
      SimonClark
    • Running single tests...

      Dumb question... How do I just run one test.js? Something's eluding me 😞

      posted in Development Discussions
      SimonClark
      SimonClark
    • RE: Additions for consideration...

      @z3dev said in Additions for consideration...:

      @simonclark cool.

      FYI, there's a bezier function as part of path2 geometry which is based on the SVG algorithm. See src/geometry/path2/appendBezier()

      Thanks! I'm taking a look at this, and try to make sure the interfaces are similar.

      My goal was to create something that I could use as an easing function in scaling, rotating, etc. I've also updated the algorithm to support n'th dimensions, and n'th order polynomials (control points).

      posted in Development Discussions
      SimonClark
      SimonClark
    • RE: Additions for consideration...

      @z3dev will do. I should get some tests around the math.bezier, as well as support for 2 and 3 dimensional beziers. Currently it is only a single dimensional bezier.

      posted in Development Discussions
      SimonClark
      SimonClark
    • Additions for consideration...

      Hey folks,

      I've added a couple of features to my fork, and I'm wondering if they are valuable additions for anyone else:

      1. Simple vagrant file. Once you've cloned the repo, "cd vagrant; vagrant up" will launch a vm, configure it with the packages needed, build the project, run the tests, build the docs, and be ready to launch. All without messing with the host machine.

      2. Bezier easing:

      const main = () => {
      	return [
      		extrudeWobble(30)
      	]
      }
      
      function extrudeWobble(height) {
      	var squareSlice = slice.fromPoints([[10, 10], [-10, 10], [-10, -10], [10, -10]]);
      
      	var xCurve = math.bezier.create([1, 2, 0.4, 1]);
      	var yCurve = math.bezier.create([1, 2, 0.5]);
      
      	let wobble = extrusions.extrudeFromSlices({
      			numberOfSlices: 30,
      			isCapped: true,
      			callback: function (progress, count, base) {
              		let newslice = slice.transform(math.mat4.fromTranslation([0, 0, height * progress]), base);
              		newslice = slice.transform(math.mat4.fromScaling([
           				xCurve.at(progress),
      		        	yCurve.at(progress),  // y
      		        	1  // z
      		        ]), newslice);
      		        return newslice
      			}
      		}, squareSlice);
      	return wobble;
      }
      

      will produce:0_1593809538569_Screen Shot 2020-07-03 at 4.51.55 PM.png

      posted in Development Discussions
      SimonClark
      SimonClark
    • RE: All parameters being ignored in local install.

      thanks @z3dev. I made some bad assumptions about what docs were relevant 🙂

      posted in Development Discussions
      SimonClark
      SimonClark
    • RE: All parameters being ignored in local install.

      Thanks, I thought I did follow the directions there. I'll try it again on a local VM.

      posted in Development Discussions
      SimonClark
      SimonClark
    • All parameters being ignored in local install.

      I'm just getting started with setting up for contributing. Followed all instructions on an Ubuntu 18.04 dev box.
      node -v : 12.18.1
      npm -v : 6.14.5
      npm test : all passed
      Starting the web server, and I can create objects in a simple script, but all parameters are being ignored. ie:

      function main() {
        return cylinder({r:12, h:1});
      }
      

      returns a cylinder with radius 1, height 1.
      Similar results with other primitives, transforms, etc.

      Any ideas what could cause that?

      posted in Development Discussions
      SimonClark
      SimonClark