Allow transform patterns to return multiple transforms (#4531)
* Support multiple transforms in patterns * New examples in docs * Refactor: move large block into its own function
This commit is contained in:
		
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -123905,7 +123905,8 @@
 | 
			
		||||
      "// Each instance will be shifted along the X axis,\n// with a gap between the original (at x = 0) and the first replica\n// (at x = 8). This is because `id` starts at 1.\nfn transform = (id) => {\n  return { translate: [4 * (1 + id), 0, 0] }\n}\n\nsketch001 = startSketchOn('XZ')\n  |> circle({ center: [0, 0], radius: 2 }, %)\n  |> extrude(5, %)\n  |> patternTransform(4, transform, %)",
 | 
			
		||||
      "fn cube = (length, center) => {\n  l = length / 2\n  x = center[0]\n  y = center[1]\n  p0 = [-l + x, -l + y]\n  p1 = [-l + x, l + y]\n  p2 = [l + x, l + y]\n  p3 = [l + x, -l + y]\n\n  return startSketchAt(p0)\n    |> lineTo(p1, %)\n    |> lineTo(p2, %)\n    |> lineTo(p3, %)\n    |> lineTo(p0, %)\n    |> close(%)\n    |> extrude(length, %)\n}\n\nwidth = 20\nfn transform = (i) => {\n  return {\n    // Move down each time.\n    translate: [0, 0, -i * width],\n    // Make the cube longer, wider and flatter each time.\n    scale: [pow(1.1, i), pow(1.1, i), pow(0.9, i)],\n    // Turn by 15 degrees each time.\n    rotation: { angle: 15 * i, origin: \"local\" }\n  }\n}\n\nmyCubes = cube(width, [100, 0])\n  |> patternTransform(25, transform, %)",
 | 
			
		||||
      "fn cube = (length, center) => {\n  l = length / 2\n  x = center[0]\n  y = center[1]\n  p0 = [-l + x, -l + y]\n  p1 = [-l + x, l + y]\n  p2 = [l + x, l + y]\n  p3 = [l + x, -l + y]\n\n  return startSketchAt(p0)\n    |> lineTo(p1, %)\n    |> lineTo(p2, %)\n    |> lineTo(p3, %)\n    |> lineTo(p0, %)\n    |> close(%)\n    |> extrude(length, %)\n}\n\nwidth = 20\nfn transform = (i) => {\n  return {\n    translate: [0, 0, -i * width],\n    rotation: {\n      angle: 90 * i,\n      // Rotate around the overall scene's origin.\n      origin: \"global\"\n    }\n  }\n}\nmyCubes = cube(width, [100, 100])\n  |> patternTransform(4, transform, %)",
 | 
			
		||||
      "// Parameters\nr = 50 // base radius\nh = 10 // layer height\nt = 0.005 // taper factor [0-1)\n// Defines how to modify each layer of the vase.\n// Each replica is shifted up the Z axis, and has a smoothly-varying radius\nfn transform = (replicaId) => {\n  scale = r * abs(1 - (t * replicaId)) * (5 + cos(replicaId / 8))\n  return {\n    translate: [0, 0, replicaId * 10],\n    scale: [scale, scale, 0]\n  }\n}\n// Each layer is just a pretty thin cylinder.\nfn layer = () => {\n  return startSketchOn(\"XY\")\n    // or some other plane idk\n    |> circle({ center: [0, 0], radius: 1 }, %, $tag1)\n    |> extrude(h, %)\n}\n// The vase is 100 layers tall.\n// The 100 layers are replica of each other, with a slight transformation applied to each.\nvase = layer()\n  |> patternTransform(100, transform, %)"
 | 
			
		||||
      "// Parameters\nr = 50 // base radius\nh = 10 // layer height\nt = 0.005 // taper factor [0-1)\n// Defines how to modify each layer of the vase.\n// Each replica is shifted up the Z axis, and has a smoothly-varying radius\nfn transform = (replicaId) => {\n  scale = r * abs(1 - (t * replicaId)) * (5 + cos(replicaId / 8))\n  return {\n    translate: [0, 0, replicaId * 10],\n    scale: [scale, scale, 0]\n  }\n}\n// Each layer is just a pretty thin cylinder.\nfn layer = () => {\n  return startSketchOn(\"XY\")\n    // or some other plane idk\n    |> circle({ center: [0, 0], radius: 1 }, %, $tag1)\n    |> extrude(h, %)\n}\n// The vase is 100 layers tall.\n// The 100 layers are replica of each other, with a slight transformation applied to each.\nvase = layer()\n  |> patternTransform(100, transform, %)",
 | 
			
		||||
      "fn transform = (i) => {\n  // Transform functions can return multiple transforms. They'll be applied in order.\n  return [\n    { translate: [30 * i, 0, 0] },\n    { rotation: { angle: 45 * i } }\n  ]\n}\nstartSketchAt([0, 0])\n  |> polygon({\n       radius: 10,\n       numSides: 4,\n       center: [0, 0],\n       inscribed: false\n     }, %)\n  |> extrude(4, %)\n  |> patternTransform(3, transform, %)"
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user