Offset Vector... My favorite CC feature

I’ve had my Shapeoko for over a year now and developed a bunch of designed and cutting techniques only to discover this year that I could have saved myself a lot of time and effort if I knew about the offset vector feature.

The first hack I can throw away is duplicating tools and changing the radius so that CC would draw a path offset from in the design. Before I knew about the offset vector feature, this is how I but a rim around an odd shaped dish. It was a workaround but you couldn’t simulate it so you had to take it on faith that the right thing would happen.

I’ll give some cool examples of what I could do with offset vectors. From a practical standpoint pocketing rather than contouring to cut out shapes can relieve workholding stress which I described in this post.


Application 1: What to do with all that scrap wood you have lying around.

With all the CNC and woodworking projects inevitably you end up with a lot of wood scraps. So I made a bunch of box and lids. Here is how you can easily design a bunch of custom boxes. For simplicity I’ll cut both the box and lid on the same stock, you may want cut then separately depending to optimize the size of your scraps.

I will be using a 1/4" endmill. I will make my wall thickness 1/4" as well. If you use a different size, you may have to adapt the technique.


Step 1

Start out with a rounded rectangle of your choosing. In my example the left will be the lid, the right will be the box. Use the fillet setting on the rectangle and choose a radius equal to your bit diameter plus your wall thickness, in my case 0.5".

Step 2

Select both rectangles and use the offset vector feature to offset inside them by the wall thickness.

resulting in

Step 3 create offset for lid lip.

Select the lid path and offset it by half the wall thickness

Step 4 create offset for box lip.

Select the box path and offset it by half the wall thickness plus a small margin. If you don’t add this bit of slop your box and lid may fit so tight you’ll have a hard time pulling them apart, but since this is scrap wood. Try it and see :grinning:. I went with 5/100". So instead of .125", I offset with .13"

Step 5 (Optional) create a pocket for removal

You can simply contour the outside if you prefer, but since I’ve been preaching pocketing over contouring for thick stock, I’ll demonstrate.
Offset the original vectors by a little over the bit diameter (I used 0.3")


Path 1:

Carve out the inside of your lid and box. Pocket the innermost vectors. I’ll demonstrate with an endmill, but in practice I use a bowl bit so I get rounded edges on the bottom.

Path 2:

Contour the shape of the lid lip, by selecting the middle path and contouring on the inside. I used a depth of 1/8". (I also disabled the each toolpath after I created it so you can see what I just added.)

Path 3:

Contour the shape of the box lip, by selecting the middle path and contouring the outside. Depth should be at most the the depth of the lid lip, but can be smaller if you want.

Path 4:

Cut out your box and lid. In the pocket cutout technique select the outer paths of the box and lid and that last offset path and create a pocket path. If you use a tape and glue workhold you can cut all the way through. I prefer not to and use a trim router to clean the last bit, but that’s my preference.


Here’s what the simulation looks like:

Finishing Touches

I prefer to use a roundover bit on trim router to round the lid top and box bottom.

Here is the demo file I just created:

scrapwood_box.c2d (108 KB)

A photo of a finished box

Now instead a pile of scrap wood I don’t know what to do with, I have a pile of wood boxes I don’t know what to do with :laughing:


Application 2: Making an odd shaped box.

This example builds upon the the previous scrapwood box so I will combine some steps.

Suppose you want to make a odd shaped box say a hexagon instead. In the first application I started with a rectangle with a fillet. But how do you apply a fillet to an arbitrary shape?

Let’s start with some hexagons

It’s easy with Offset Vector. Simply offset inside with by the desired radius (0.5" in this case).

Then offset outside by the same.

Then you can discard the original and the inside offset path. Voila, you have hexagons with a 1/2 inch fillet.

From there you can repeat the steps in the previous application

and get the following:

I believe this fillet technique will work on any convex shape, it may have unintended results on concave shapes.
hex_box.c2d (128 KB)


Application 3: Fun finger joints

Before demonstrating how to use offset vectors to fix these decorative finger joints. I’ll demonstrate the naïve approach. Suppose I wanted to create finger joints that look like the following

Then, I’ll create a design for the mate by subtracting those fingers from a rectangle.

I’d get the following.

It looks good until you examine it closely. On the mate, the corners on the diamond are rounded (due to the bit radius) on the finger it is not. As a result they won’t fit without filing or sanding. Furthermore, if you look at necks of the finger where it meets the shapes or where it meets the board, it is rounded where it is not on the mate.

This poses a convex and concave issue. Bottom line is:

  1. On convex shapes, you can add a fillet by offsetting out then in.
  2. On concave shapes you can round it appropriately by going in then out.

The offsets should be at a minimum the bit diameter.

First fix the polygons (offset out then in)

Then merge and fix the concave corners

Create the mate:

As you see in the simulation, a perfect fit

… too perfect. Most likely this will fit so tight you might need a hammer to put them together

Once again, offset vector to the rescue… Basically, it is easiest to offset in the finger side. First, create a rectangle for the board. This is because when you offset, you’ll also shrink the size of the board. This rectangle let’s you restore it.

Then offset the fingers by a desired amount, I’m using 1/100 of an inch, the width of a scroll saw blade. But you can increase it if it is still too tight.

Then align the rectangle appropriately to the finger vector.

and union the two.


Application 4: Quick and Dirty Rest Milling.

If you offset a vector in by the bit diameter and then out the same bit diameter. You will get a vector representing the actual pocket that bit will carve. Suppose I start out with this shape. It has convex, concave and disjoint features.

Step 1 Determine the region cut by larger bit.

You do this by an inside offset of the vector by the bit diameter, then by an outside offset of the new vector by the same.

The inner is shown in black and the outer in orange.
You can delete the inner path it is not needed.

Step 2 Create an offset for the smaller bit

Select the newly created vector and offset it in by at least the small bit diameter. I used 0.063" for 1/16 (0.0625").

The pocket formed between this vector and the original is the “rest”. If you don’t go to at least the bit diameter there may be some spots it misses. If you go over the diameter there might be some “air cutting” and basically take more time than necessary. You could tweak this path further to minimize the time the small bit isn’t actually cutting, but the point is that this is a quick and dirty way to do rest milling.

The intermediate path created in step 1 is now no longer necessary so you can delete it.

Step 3 Set your toolpaths

For the large bit, pocket as you normally. For the small bit, pocket between the original vector and the one created in step 2.

(Large toolpath disabled for clarity)

End Result

rest-example.c2d (193.8 KB)


If you want to do a quick and dirty rest milling job, just a few offset vector operations can give you a good pocket definition for a small bit. Obviously, if you are doing a lot you should use CC Pro