15-394 Assignment 3: Studded Surface

Introduction

In this assignment you will use Grasshopper to construct a 3D surface with an array of protruding studs. You will then 3D print this surface.

Ideally your surface should be around 3x3 inches, or 75x75 millimeters. In Rhino, the default grid units are millimeters. The tiny grid squares a 1 mm, and the larger squares are 5 mm. So your project should take up about 15 large squares per side.

Making a 3D Surface

You can make a 3D surface by generating a set of curves and lofting between them.
  1. In Rhino, draw four gently varying vertical curves, roughly 75 mm high, roughly evenly spaced. They should cover a roughly 75x75 mm area, but make the heights and spacing vary a bit.
  2. In the Perspective window, click on the second curve, then shift-click to raise it in the Z direction.
  3. Raise the third curve as well, by a different amount.
  4. Insert a Params > Curve component in Grasshopper.
  5. Right click on the Curve component, do Set Multiple Curves, and click on the four Rhino curves in left to right order.
  6. Insert a Surface > Prinitives > Loft component and connect the Curve component to its C input.
  7. Now we have a surface. But surfaces have zero thickness and cannot be 3D printed. We need to make a solid volume from this surface, with roughly constant thickness. The Extrude or Offset components won't work because they extrude the entire surface in a single direction, while we want to extrude in a direction that is normal to the surface at each point.
  8. Insert a Surface > Util > Divide Surface component, and feed the output of the Loft into its S input. You can use the default number of U and V divisions (10), or change them if you like.
  9. Insert a Transform > Euclidean > Move component and feed the P output of Divide Surface into its G input
  10. Insert a Maths > Operators > Multiply component.
  11. Feed the N (normals) output of Divide Surface into the A input of the muliply.
  12. Create a 0 < 5.0 < 15.0 slider and connect it to the B input of the Multiply component.
  13. Zoom way in on the left edge of the Multiply until you see a + sign. Click on that to create a C input to the Multiply component.
  14. Right click on the C input, choose Set Data Item, and enter a value of -1.
  15. Connect the output of the Multiply component to the T input of the Move component.
  16. Insert a Surface > Freeform > Surface From Points component.
  17. Connect the output of the Move component to the P input of Surface From Points.
  18. Right click on the P input of Surface From Points and select Flatten.
  19. Right click on the U input of Surface From Points and choose Set Integer. If the Divide Surface is using 10 U divisions, set the Surface From Points value of U to 11.
  20. Now we have two surfaces, the new one should be above the original. We need to connect them along the edges in order to form a closed volume.
  21. Insert a Surface > Freeform > Loft component.
  22. Connect the output of the first Loft to the C input of the new loft.
  23. Holding down the shift key, connect the output of the Surface From Points component to the C input of the enw loft, so that it now has two input sources.
  24. Insert a Surface > Util > Brep Join component.
  25. Feed the output of the first Loft, the second Loft, and the Surface From Points components into the Brep Join component. This gives us a closed 3D volume.

    Make A Stud

  26. In order to make a studded surface we have to make a stud that we can then replicate over the surface. The stud should be centered on the origin, and should be fairly small: around 6x6 mm in the x-y plane and around 4 mm high.
  27. Use your creativity in designing your stud. For example, you might use a truncated cone, which you can create by lofting between a curve in the x-y plane and another curve 4 mm above the x-y plane. But don't just copy that idea; come up with one of your own. Your stud does not have to be symmetric; it could be a crescent moon or a horsehoe. Just keep the limitations of the 3D printer in mind; don't choose something with ultra-fine features, or a crazy shape that will require support material.

    Divide The Surface

  28. Insert a Maths > Domain > Divide Domain2 component (this is the 2D version of Divide Domain).
  29. Connect the output of Surface From Points to the I input of Divide Domain2.
  30. Insert a Surface > Util > Isotrim component.
  31. Connect the output of Surface From Points to the S input of the Isotrim component.
  32. Connect the output of Divide Domain2 to the D input of the Isotrim component. This gives us a list of surfaces, each of which is a patch of our original top surface. We're going to put a stud in the center of each of these patches, but first we have to find the center.
  33. Insert a Surface > Analysis > Deconstruct Brep component.
  34. Feed the output of the Istotrim component into the Deconstruct Brep.
  35. Insert a Maths > Util > Average component.
  36. Feed the V (vertices) output of Deconstruct Brep into the Average component.
  37. Insert a Surface > Analysis > Brep Closest Point component.
  38. Feed the output of the Average component into the P input of Brep Closest Point.
  39. Feed the output of Surface From Points into the B input of Brep Closest Point.
  40. Insert a Vector > Plane > Plane Normal component.
  41. Feed the P output of Brep Closest Point into the O input of Plane Normal.
  42. Feed the N (normal) output of Brep Closest Point into the Z input of Plane Normal.
  43. Right click on the Z input to Plane Normal, choose Expression, and enter the expression "-x" (without the quotes).
  44. Now we have a set of planes located at the patches, with orientations that match the patch centers.

    Move the Studs To Their Positions

  45. Insert a Transform > Euclidean > Orient component.
  46. Connect the component representing your stud geometry to the G input of the Orient component.
  47. Connect the output of the Plane Normal component to the B input of the Orient component. Now you should see a stud in every patch.
  48. Insert a Weaverbird > Extract > Join Meshes and Weld component.
  49. Connect the output of the Brep Join to the M+ input of the Join Meshes and Weld component.
  50. Right click on the G output of the Orient component and select Flatten.
  51. Connect the G output of the Orient component as a second M+ input to the Join Meshes and Weld component. The output of this component should now consist of the thickened surface with the studs embedded in it.
  52. Make sure that your final output is a single mesh, not a collection of meshes.

    Output and 3D Print the Result

  53. Right click on the Join Meshes and Weld component, choose Bake, and click the checkbox to group the outputs.
  54. In Rhino, click on the baked surface so it appears in yellow.
  55. In Rhino, do File > Export Selected, set the file type to STL, enter a filename, and accept the default STL Mesh Export Options.
  56. Use this Google Drive link to submit your studded surface for printing. Include your Andrew id at the start of the filename, e.g., dst_studs01.stl. Place the file in the Submissions folder. When it is printing it will be moved to the "In Progress" folder, and when finished it will be moved to the "Completed" folder.

What to Hand In

  • In Canvas, hand in your Grasshopper and Rhino files, and your STL file.
  • When you get your 3D printed object back, post a photo to Piazza.

Back to 15-394 course home page