Surface Fillets

Learn how to use FilletSrf to create beautiful transitions

In this tutorial, we will model an oil drainage jerrycan using a workflow that involves surface fillets to create base and transition surfaces. Functional products, like this oil drainage jerrycan, don’t require G2 continuous surfaces. Therefore only G1 (rolling ball) fillets are used. Since this is a rotation mold product, only the outer surfaces need to be modeled.

We will use the FilletSrf command since it can handle both surfaces that share an edge as well as surfaces that are not connected. This enables you to control arc-like transitions between surfaces that do not meet.

Step 1 - Creating the base volume

Download and open the oil_drainage_jerrycan.3dm.

Turn on layer 1a where you’ll find the bounding box volume of the product. We start by cutting off parts of this box using the Gumball. Select the curves on layer cutting curves and use Gumball’s cut handle to slice through the box in Z directions. Hold Shift to cut in both directions (1b). Delete the smaller slices (1c).

Step 2 - Creating the handle cutout

Using the curves on layer handle curves, use Gumball on the closed curves to cut out parts. There are two closed curves; one is cut in positive and the other in negative Z direction (2a).

There is one open curve that is flush with the new cutout. Start PushPull , select the area of the handle to cutout, and push it through the volume to make the cutout (2b).

Step 3 - Surface Fillets

Start FilletSrf and click on the two surfaces where the 10mm concave fillet will be placed. A dialog will open that allows you to interactively change the radius with a slider. Although the radius is in this case known, try using the slider to change the radius and see it update in real time.

Important

Unless stated otherwise, make sure that the option Trim is kept On and Extend is kept Off during this tutorial.

Note
Typing a number in the commandline followed by sets the slider value. Under the slider you will see four numbers that allow you to modify the range. The default range is 10. If we set the slider to 10 and the range to 10, this means we can move the slider between 5 and 15. The slider is designed to fine-tune a radius in real time.
Make the other surface fillets as indicated (3a).

Now add fillets to the handle of radius 12.5 (3b).

Explode the model and Split the surfaces by isocurve using Intersection Osnap, and delete the surface parts that are not needed. This should end in the result seen in image 3c.

Now ExtendSrf the large corner fillet as indicated in image 3d. Next, construct the surfaces in step 3e with Sweep1 Start on the front to create the first surface (3e), then work your way to create the other surfaces, using the last created surface edge as rail for the next Sweep, resulting in 3f.

Use FilletSrf with a radius of 10mm to create the transition between the handle and body surfaces. Next, use the fillets created in previous steps to trim the surfaces that have been filleted (3g).

Tip

If the fillets are made correctly, you can use them directly to trim the filleted surfaces. If this fails, duplicating the edges of the fillets can help them to be used as trimming objects instead.

DupEdge
<script>
    var parser = new DOMParser();
    var href = "https://docs.mcneel.com/rhino/8/help/en-us/unfurl/dupedge.htm"
    var scriptTag = document.getElementsByTagName('script');
    scriptTag = scriptTag[scriptTag.length - 1];
    var parentTag = scriptTag.parentNode;

    function addPreviewDiv(parent){ 
        const previewElement = document.createElement("span");
        previewElement.classList.add("tooltip");
        previewElement.classList.add("arrow-top");

        const iframeElement = document.createElement("iframe");
        iframeElement.src = href;
        iframeElement.style.width = "100%";
        iframeElement.style.height = "100%";
        iframeElement.style.border = "none";
        previewElement.appendChild(iframeElement);

        parent.appendChild(previewElement)
    }

    addPreviewDiv(parentTag)

</script>

Step 4 - Finalizing the base surfaces

So far, our mode is still symmetrical along 2 axis, therefore we only made fillets on one quarter of the model.

In view, create two planes with CutPlane along the X and Y axes, and use these surfaces to Trim the three quarters of the model that are no longer needed.(4a)

Now, create a series of fillets along the top edge (radius 15mm). Notice that the last surface fillet on the side opposite to the handle will not trim the vertical surface. To fix this, use ExtendSrf to extend the surface and Trim it with the vertical cutplane created in step 4a. Join the resulting fillets and trim the top surface to finalize the (quarter)shape (4b).

Mirror the complete shape from the previous step over the Y-axis and join the result. Make a 30mm surface fillet between the two parts where there is still a sharp edge. This time disable the Trim option in FilletSrf as well. After creating the two fillets, use these surfaces to Trim the surfaces that were just filleted. Join the resulting surfaces into one open polysurface (4c).

Select the resulting polysurface, run Mirror and use the command option Z to mirror over the Z-axis. Join the two objects into one. This should result in a closed polysurface (Solid).

Step 5 - Creating the funnel

Select the two rectangles in layer funnel curves and Loft these curves and make a PlanarSrf from the smallest rectangle (5a).

Next make a Pipe around the curve in layer pipe curve, radius 5mm (5b).

Turn on History recording: Right-clicking Record History in the StatusBar, and select “Always Record History”.

Use FilletSrf to create the fillets in the corners of the funnel. This time, disable Trim and enable Extend. Try to match the corner fillets’ size with the pipe’s corners. The corners on the steeper side need a different radius than the other side. I used a radius of 15 for the steeper side and 20 for the other. Notice that these fillets don’t precisely line up with the corners in our piped curve yet. To better align the funnel with the piped curve, select the loft surface and nudge it down in top view until satisfied (5c). I moved the surface down 3mm. Notice that due to the history recording, the fillets will update. This will however only work when Trim in the FilletSrf dialog has been disabled.

Note
When you need a lot of fillets of the same size, it’s easier to use the commandline version of FilletSrf to speed up the process. Type *-FilletSrf in the command line. The * will keep running the command, until is pressed. No dialog will be shown.

Make connecting fillets between the pipe and the base solid and between the pipe and the funnel of radius 5mm. Make sure the Extend option is turned off again. To create all the fillets of the pipe to the funnel, at each corner you will end up with one bigger and two smaller surface fillets(5d).

After making all the fillets, select the two fillet chains and Join them into two polysurfaces. Select the outer chain and Trim the inside of the base shape. Next, add the inner chain to the selection and trim both the pipe as well as the funnel. Join the resulting surfaces and polysurfaces into a closed polysurface (5e).

For the last part of this step, we will use FilletEdge with a radius 3. In the Command Line, set Railtype=DistBetweenRails to make the fillet at the bottom of the funnel (check image 5f).

Step 6 - Adding screw details

Modeling the screw parts goes beyond the scope of this tutorial. These parts are therefore provided as is. Use BooleanUnion to combine the outlet with the main body and BooleanDifference to subtract the two smaller threads from the main body.

Step 7 - Adding bottom support

In this last step, we will use FilletSrfCrv to create a fillet between the bottom surface and a curve. This will allow us to create a fillet tangent to the surface connecting to the curve. Imagine a ball running over the surface along the curve. For best results, explode the curve and make a FilletSrfCrv to each curve (7a).

Make a PlanarSrf with the curves and join this with the created fillets (7b).

Create a fillet along the sharp edge (radius 3) with FilletEdge RailType=RollingBall (7c). Change the perspective view to wireframe, and Trim the part of the surface that is covered by the bottom support by clicking on the edge indicated in image 7d.

Select all and Join to create the final closed polysurface.

Finished
Congratulations for completing this tutorial! If you have any questions write on discourse or drop a mail to gijs@mcneel.com