Rhino Spork

RenderingMarch 12, 2020

Here we will be practicing creating your first full model in Rhino. It will be surface based and cover using control points to adjust your form while keeping history. We will NOT be focusing on creating extremely accurate curves and surfaces in this tutorial. These concepts will be covered later.

We will cover the following commands:





04 Light My Fire Spork.zip


1) Turn on Record History in the bottom options bar. Make sure Gumball is turned on. Osnaps should be on and at least End, Near, Point, Mid … Int

2) Use the Picture command to place the Spork_Top image in the top view.

To grab the origin type “0” and confirm with SPACE or turn on Grid Snap. It doesn’t how big the picture is yet.

3) Next modify the image to get rid of the white background and add some transparency. This is done in the Materials tab near your Layers tab.

Select the material

Check Use color mask, select white as the material to mask, then adjust until all the white is blocked out. This is probably about 10%.

Add some transparency in Object transparency

4) Use the Rectangle command to make a rectangle that is 170mm by 37mm

In all future steps “>” will represent confirming by pressing SPACE/ENTER

Rectangle > 170 > 37

5) Use the Move to move the midpoint of the 37mm long side to the origin.

You will need the midpoint Osnap to be turned on. Again, you can type 0 when asked where to move to or you can turn Grid Snap on and click the origin manually.

6) Now, click the picture and use the Gumball, Scale and Rotate commands to align the spork.

It can be helpful to create a line on the midpoint of the rectangle to help align the center. It will not align perfectly with the box, but the most important part is to get the centerline and the length correct.

7) Delete the geometry you used to scale the fork or put it on a new layer and hide it (see step 18). Rename the Default layer to Image and lock it. Then create a new layer where you will build.

8) Now let’s use Curve > Degree=5 to make the top edge of the spork

Your first click should be at the origin, then the second directly vertical to make sure the curve is continuous when building the other side.

Continue and overbuild the the end of the spork. Don’t worry too much about how many clicks and spans you are creating. When you project this curve later it will be rebuilt anyway.

9) Use the Mirror command and adjust the control points with the gumball to match the fork/knife end.

I ended up just deleting the last point by clicking it and pressing DELETE.

10) Create another Curve > Degree=3 for the knife edge and use the Trim command.

Trim > click the cutting object (line you just made) > click the excess part of the line

11) Use the Join command to merge all these lines together

12) Create more Curve > Degree=3 lines for the fork part. Do not worry about the fillet/round yet.

13) Create the fillets on the fork prongs

There are many ways to do this. Two of my preferred ways are using the ArcBlend tool and the BlendCrv tool. Try out both. With both you drag the white endpoints to where you want them. Make sure you have the trim and join options turned on.

14) Use the Plane > 3Point command to make a surface about the size of the picture. Now move it so the midpoint of the short side is aligned (but not touching) the origin.

You can do this by using Move > select the midpoint > select the origin

Then use the gumball to back off the surface about -1mm

Make sure that all the curves fit within this plane. Otherwise use the Scale command to make the plane slightly larger.

15) Now we need to Rebuild the surface to have the correct characteristics.

Use Rebuild > Select the surface

Then enter the following settings

16) Select the surface and type PointsOn so you can see the control points.

You can also type MoveUVN to bring up the control panel tool for manipulating control points.

Using the Gumball, only drag control points directly up and down. Make sure you do this SYMMETRICALLY until you get the curvature below. I suggest looking at 01_main body in my file and turning PointsOn so you can see the general shape.

17,5) Project > Loose=No … Direction=View

Now we will project this joined curve to the surface so we can trim with it later. Use the Project command to project this border to the surface. First chose the joined curve we created as the curve to project. SPACE to confirm. In the Top Viewport** click on the surface to project to. SPACE to confirm.

Why did we project the curve instead of just trimming the surface directly? If we trim directly, History will not be maintained. By this, if you move the surface after trimming, it will not update to the projected curve. If history is not working later, it is because Project > Loose=Yes. Performing a “loose” operation often breaks the history.

**NOTE: Because the Direction=View, if we are in the perspective view it will project in the direction we are looking. While this can be useful, it is bad practice to make an operation that cannot repeated later with some tool if we need to make changes. If you need to project in another direction, create a line, CPlane or perpendicular surface in the direction. Project > … Direction=custom. The next step will ask you to “choose the projection direction” and you can use the tool you created.

18, 6) Use the Trim command. Select the projected curve to cut with. SPACE. Select the surface to trim. SPACE.

If you are not happy with the edge activate PointsOn the surface and adjust until you are happy.

** A reminder that you can change this view to shaded by clicking the arrow in the top left corner of this picture.

19, 5) OffsetSrf > Distance=2 … Solid=yes Loose=yes … DeleteInput=no

We are doing this as a first step to adjust the major form. Lets break this down.

We are offsetting the surface inward/upward** by 2mm. This is because we have built the spork with the outside line in mind. If we were to thicken outward instead it would no longer have the same outer edge.

**NOTE: Click on the surface to flip the direction of the offset

We are making the offset Solid: yes*** because we want to make boolean trims on this body later without having to stitch a bunch of surfaces together in the end.

***NOTE: If we choose Solid: no then it will only offset the surface without any edges. Useful in many cases, but not here.

Loose: no makes it so that the offset is exact. The finish is not exactly what we want, but it maintains history. This means we can make changes to the original surface and the body will update. The edges of this are not the best for many reasons, but acceptable. We will cover this concept more in depth at another time.

(a note for your info) Loose: yes makes it so that the offsetting surface is not exact. This allows the surface to rebuild with a much nicer finish that matches the degree/spans of the original. Unfortunately, this is history breaking, meaning we will won’t be able to adjust the original surface anymore. This is usually best for surface offsets, not for solid offsets.

We are choosing DeleteInput: no because we want to maintain the history on the original surface. This way we can make sure that if we update the surface, the body will also update.

20, 6) Turn PointsOn again and adjust the surface until you are happy with it. The solid should rebuild and update so long as you have your Record History turned on.

Why are we doing this? In this workflow we are adjusting until we get the form correct. Because we are designers, this is where we might utilize 3D printing to make very small adjustments to improve the ergonomics, depth of the spoon and general shape to make this exactly what we want.

21, 8) Let’s talk about methodology while we are at it.

Before we do this, let’s discuss some theory regarding methodology. When working from pictures to build in 3D it is easy to get caught up in exactness. By this I mean, you may sacrifice some surface quality to match exactly what you are seeing. However, as a designer you are working to create new things and not necessarily recreating the exact surface down to the .001mm that may complicate your surface. We have 3D scanning and other techniques for doing this.

So you have two options here. 1) You can either try to match what exists in front of you, or 2) match the mindset of the designer. In most cases it is best to go with #2 and try to match the design intent/mindset.

For example:

If I were to match this exactly, then my surface would be asymmetrical and there would be issues with surface quality. I have instead opted to try to match the intent by creating a mirrored area. Typically it is best to make these decisions instead of trying to follow the pictures or models exactly.

22, 9) ExtractIsocurve > Direction=U …

Now we will make the edge of the knife part. We want to have a curve along the surface, but also that is a bit offset from the bottom. To do this we will ExtractIsocurve and select the surface. SPACE to confirm. Then move the curve up a tiny bit. Click to place. SPACE to confirm.

23, 10) Curve > Degree=3 > 3 clicks

Now lets create the curve that will be the top of our sweep rail. To do this we will create a Curve > Degree=3 and click 3 times before pressing ENTER to confirm.

24, 11) Project > Loose=No … Direction=View

Same as in step 17, we will click the curve we just created, SPACE, then, in the top view select the polysurface body of the spork.

This will result in a “ring” around the body. We will fix this in the next step.

25, 12) Explode

Go ahead and use the Explode command to part this ring by clicking on the polycurve you want to explode. We only want the top curve so simply delete the other curves.

26, 13) Loft > Click both curves > Straight Sections, Rebuild with: 5 control points

Use the Loft command to build a splitting tool. Select the isocurve offset we created then select the projected curve we created. SPACE. Enter the following settings:

Why did we rebuild this surface? Now it wont intersect perfectly…

We will handle the intersection part in the next step. But let’s talk about why we rebuilt this surface.

Because our curves were less than ideal and really only there to give us a rough guideline, we rebuild the surface so that when we create the split there is less possibility for error. Rebuilding the surface helps clean up all of the messy parts that are created from exactness.

Still not understanding? Try messing around with the settings and see how it changes the surface.

27, 14) ( ExtendSrf > Type=Smooth Merge=Yes ) x 4

Because the surface no longer completely intersects the polysurface, if we try to do a BooleanSplit now it will fail. Fix this by using ExtendSrf selecting an edge of the trimming tool we just created. In total you will do this operation 4 times.

**HINT: Remember you can press space after you complete each command to repeat it instead of having to retype it.

28, 16) Repeat steps 24 through 27 to create the front of the fork… except in step 24 choose Loose=Yes.

Before we do a BooleanSplit, let’s take advantage of still having some nice surfaces to project onto. This simplifies the process.

(step 24) Project > Loose=Yes

(step 25) You will likely be able to skip the Explode, but not the delete in step 25.

(step 26) Play around with the settings. We projected degree 3 curves so perhaps no need to rebuild. Maybe try with rebuilding with 3 control points.

(step 27) The same

29, 17) FilletEdge > … NextRadius=4 … Preview=Yes …

The time has come to break our history. Because we are starting to make major detail modifications to the shape it is good practice to right click on the layer you are working and Duplicate Layer and Objects so you have a working copy with history.

Before we do our major split, lets add a fillet on the corner. Use the FilletEdge command. Enter the parameters so that the next edge you click has them. Select the edge and confirm with SPACE.

This will bring you to the preview and edit stage. Here you can edit the parameters for the edge. Try clicking on the white dot next to the number 4.000 and change the value by dragging or entering a number. If you do not want to confirm the change you can hit ESC and it will take you back one step instead of cancelling the whole command.

The fillet operation in Rhino are quite extensive. Play around with them. If the fillet commands aren’t enough for you, you can always create custom fillets with BlendSrf.

30, 17) BooleanSplit > DeleteInput=No**

Now it is time to make some cuts away from the spork body. Use the command BooleanSplit. Select the main polysurface body as the body to split. SPACE to confirm. Then select both the trimming surfaces we created in the previous steps. SPACE to confirm.

Select the 3 bodies that were split off and delete (the delete key) them.

**NOTE: Using DeleteInput: no doesn’t actually do anything in this situation. However, it is good practice to keep around the tools you use and to move them periodically into a layer including your extra build surfaces and sketches called ‘tools’. This is more a matter of building habits then an operational necessity here.

31, 18) Make a new layer called tools and place your cutting surfaces there. Then hide the tools layer.

SHIFT + click on both trimming surfaces to select multiple

How you decide to structure your layers is up to you. But try to find a system that makes sense you you know where you have put your layers. I have moved my main body into default and hidden the rest of my layers except images.

32, 19) We have a problem. Let’s fix it.

There is a very sharp edge in the model now that is not manufacturable with any sort of accuracy. This should actually be a a flat front edge.

In best practice we would use all our saved surfaces and go back to the original surface we offset from. This would be trimmed on the front edge as well. Then, once we got to the step where we would need to create the trimming surface, we would use the same ExtractIsocurve method to control the intersection.

In time, doing this will feel like a quick fix and will be how you go about the repair. However, for simplicity let’s accept the error and imperfection today and introduce a new command instead.

33, 20) ExtractIsocurve

Let’s do what we did in step 22.

If the direction of your U and V on your trimming surface were flipped, you may need to use the Toggle option to flip the direction of the line.

Click the end of the edge where we created the last ExtractIsocurve. SPACE to confirm to exit the tool.

34, 21) ExtrudeCrv > … BothSides=Yes …

We will extrude the curve with the option BothSides: yes and make it oversized.

The curve automatically extrudes to the normal (perpendicular) plane that it is built. If you would like to extrude it in another direction you can use the Direction option.

35, 22) BooleanSplit

Just like in step 29 lets split the body with the surface and delete the extra. We can then move these trimming tools into the ‘tools’ layer.

**TROUBLESHOOTING: If your BooleanSplit fails then it is likely that the surface does not completely intersect. Use the ExtendSrf like in step 14 to make it oversized. Then try to split again.

36, 23) OffsetSrf > Distance=2 … Solid=No Loose=Yes …

To cut away the remaining features we need to create a surface that aligns with the top. Show the original surface we created our body from and offset it like in step 17, but this time as a loose surface that is not a solid.

Why? Because our picture is taken from the top we need to calculate the cuts from the top. We could simply do an extruded cut from the base plane our sketches are on. However, this would likely not follow the design intent and not flow with the body. It will become more clear in the upcoming steps.

37, 24) Untrim

Because we want to overbuild to avoid possible problems during the future boolean operations, lets use the Untrim command to reset the top surface to its original, untrimmed size. To do this, select one of the edges ( not the front because it is not trimmed here ) and press SPACE to finish the tool.

38, 25) Create the knife edge cuts

We can create the edge cuts in quite a few different ways. Technically Option: A is hands down the best. However, options B and C are also reasonable. Option B is the best of the curve-based options because we need to follow along the slight curve with our lines. However, Option: B produces a very similar result.

Do Option A and skip to the next step if you are already feeling in the flow. Come back to check the other sections later.

**SUMMARY: Option A is the most uniform. Option B accounts for a single ejection direction during manufacturing from a tool. Option C is bad, don’t do it, but tweening curves is cool.

All options start with the same step though.

Use the Polyline command to make the first cut curve.

39, 26) OPTION: A ExtrudeCrv, ArrayCrv

First Project > Loose=Yes … Direction=CPlaneZ the Polyline we just created onto the top surface we offset.

This will undoubtedly break the join so lets just go ahead and select both of the new curves and use the Join command.

Now let’s use ExtrudeCrv > BothSides=Yes to create a surface that intersects with our main body.

Use the DupEdge command to duplicate the bottom edge of the knife edge.

As counter-intuitive as it seems, we are going to use the Extend command to shorten the line. First select the line. Then type the command Extend > Type=Natural. Finally, select the curve again. In the top view click the start of the final tooth to finish the curve.

Now trim the other side of the line. Use the Trim command. Select the surface extrusion we just created as the cutting tool. Select the other side of the curve as the object to trim.

Use the FilletEdge command to add a a .2mm fillet on our cutting surface.

Use ArrayCrv, select the surface we just filleted, SPACE to confirm, then the curve we trimmed as the path. Enter the following settings and confirm.

Finally, use BooleanSplit and delete the remainders.

**NOTE: If you look in the top view you will notice the teeth do not align with the picture. This is because we did not project the surface extrusion curve to the bottom of the surface of the spork. However, we did use the curve from the bottom edge as the guide curve.

**EXTRA PRACTICE: Try going back and fixing this by projecting to the bottom surface, extending the lines a bit so they are overbuilt, then extruding, ArrayCrv and BooleanSplit.

39, 26) OPTION: B ArrayCrv. This will array our cut curve along a path.

Use FilletCorners > Fillet Radius: .2 to round the inside corner.

Copy and paste ( CTRL+C, CTRL+V ) and drag the line over to the the last cut.

**TIP: If you can see that when you dragged your curve it left the base plane you can use the ProjectToCplane command to place it back on the to the base plane.

Make a copy ( CTRL+C, CTRL+V ) of the original outline of the spork body so we don’t break our history.

Then move it directly downward 0.2mm in the Z axis with the gumball so we don’t accidentally modify the wrong curve.

Explode the curve. Delete the long curves that are not the knife edge.

Select ( SHIFT+click ) both of the cutting edge curves you created for the in the previous step and move them directly downward 0.2mm in the Z axis with the gumball as well.

Use the Trim command and make the lines look like below.

Delete the last cut curve. It was only used for reference.

Use the ArrayCrv command. Select the first cut curve as the object to array. Then use the copied line we created as the path curve. Enter the following settings:

Then you get:

Now select all these and use the Group command ( CTRL + G ) to make selecting easier.

Move the whole group upward until the intersection between the 5th and 6th curve is about in the middle of the ExtractIsocurve line. See below:

Use the Gumball to Rotate along the green axis so that the line is roughly tangent to the edge

Now use the ExtrudeCrv command to extrude surfaces in both directions.

Finally use the BooleanSplit command to split the main body and delete the remainders.

The perks of this method is that it accounts for a single direction of ejection in the manufacturing tool if you add some draft to the extrusions. The downside:

The shape of the teeth are quite variable

39, 26) OPTION: C TweenCrv > Number=8 … Flip

In this method we will use TweenCrv. It is much faster… But even worse.

Use FilletCorners > Fillet Radius: .2 to round the inside corner.

Copy and paste ( CTRL+C, CTRL+V ) and drag the line over to the the last cut.

Use the TweenCrv command. Select the cut curves, both the first and the last. Use the Flip option to make sure that it selects the same reference point on each curve. TA DA!

Alternatively you could use ArrayLinear, but this will not account for any rotation between the first and last or any variation in shape.

Now SHIFT + Click all the curves and use the ExtrudeCrv command. Extrude them until it intersects with the body.

Now use the BooleanSplit command to cut the body and delete the remainders.

This isn’t a great method because it doesn’t really account for manufacturing, nor does it flow along the surface. We get weird triangles and leftovers when we do it this way.


40, 27) Create a solid OffsetSrf as a cutting tool.

It is time to make the fork. To do this, lets use the curves we created in the beginning as well as our untrim top surface.

First, ensure that all your lines extend past the untrim surface. To make sure they do, let’s use the Extend** command to push them past end. Click the line you want to extend and click beyond the surface.

**This command first asks for a boundary or length. This is because you can make the line snap to a boundary, similar to a Trim. You can utilize this feature by selecting a limit of the line or typing in a number. However, you can also freely move the curve by using SPACE to skip and then clicking each curve you want to extend

Select all ( SHIFT + Click ) the fork curves and group ( CTRL + G ) them.

Then use the Trim command to the untrimmed top surface… which will now, no long, be untrimmed.

Use the

OffsetSrf > Distance=3 … Solid=Yes Loose=Yes … BothSides=Yes

to overbuild a cutting tool.

41, 28) Use BooleanDifference to cut.

Select the main body as the body to subtract from > then your cutting tools as the bodies to subtract with.

42, 29) Before you start detailing with fillets SAVE A COPY!

Filleting can be tricky. If you need to go back and start over, it’s always nice to have a backup.

43, 30) Finish up the detailing by adding FilletEdge.

Try out the different options in the FilletEdge (tool)** command. Add extra handles and change the radius to make variable fillets, change the RailType to see the effects, use the ChainEges command with different continuity settings to select the an entire edge, etc.

Just remember you can always CTRL + click on an edge to deselect it.

If you are having problems with your fillets failing then you are probably trying to create fillets that are too big and have “intersecting geometry.” Go easy on the fillets. If you need custom blend surfaces you need to build them manually.

You will see on the front edge that there is a custom surface for the blend. Sometimes fillets aren’t enough and you need to build more complicated blends. For now, put a fillet on the edge and see the difference.

Read more about Advanced Filleting here

**You can edit your FilletEdges again by re-entering the tool and clicking Edit. This will take you to the last command. To continue going back in time through the fillets continue to click Edit until you reach the one you would like to change. Press SPACE to confirm that you want to edit that operation. Unfortunately, it will undo all fillets after this point. This is why it is good to save a copy to fix minor fillets by extracting surfaces to build. We will cover more of this later.

Woot! You made it!

If you want more practice go back to step 39 Option: A and alter the knife edge.

Since you should have most of your tool you used for the shaping in other layers, you can quickly make a modification and rebuild the rest. An alternative is to use the Explode command to make the body not solid, rebuild the correct surfaces, trim everything, then use CreateSolid. We will talk about this more later.