Using a keyhole tool

This came up in a support e-mail — unfortunately, Carbide Create can’t preview this, but it can be done — it just takes a bit of faith:

​First, model the slot (the width should be a bit more than the shaft of the keyhole tool, the length equal to how long you want) — this is best done as two circles and a rectangle all connected — using a rectangle makes it easy to position the circles since one can use the midpoints:

​Then draw in the entry hole (this should be a bit more in diameter than the cutting portion of the keyhole tool) — it’s easy to position accurately as the afore-mentioned circles are because one can as noted above, use the midpoint:

​draw in a small square which matches the increase in diameter above:

​shift it down so that it aligns at the top:

​Then draw in an open Polyline which starts at the bottom left corner of the small square, goes up to the top/bottom midpoint of the square/rectangle, up to the top midpoint, and comes back down to the top-bottom midpoint, and ends at the bottom right corner — this is most easily done by zooming in and using the top of the circle as a proxy:

​and then Node editing to get the top position right:

Note that it will be necessary to extend the bottom slot by the height of the square by duping the square and making it a rectangle as wide as the circle and dragging a duplicate of the circle down to align at the bottom midpoint center:

Select all the circles and rectangles and Boolean Union:

​Then switch to the Toolpath pane and assign a pocket to the shape to the desired depth:

​Then select the polyline and assign a different tool to make a no offset contour cut to that depth or a bit deeper — I like to use a ball-nose endmill and a bit deeper so that I can see the cut and assign a Depth per Pass greater than the depth of the pocket so that it will be cut in a single pass:

​The previews will show an indication of how you wish to cut:


Disabling the pocket toolpath and the stock simulation allows one to verify the full-depth plunge w/ the second tool:


File for those who are curious:

keyhole_usingballnose.c2d (36.8 KB)


Is it possible to program CC using a T-slot Keyhole Bit?

Specifically, a plunge, move in a specific direction, move back in the opposite direction and raise out?
Thinking while typing maybe a thin dual line path?
I think I know how to put this tool in CC but would be interested in your input.

I am thinking this would be useful for hanging small signs and artwork by placing these horizontally on the back side.

1 Like

That is exactly what the above is depicting — the problem is, a keyhole tool can’t be correctly previewed in 3D, hence the work-around shown above.


1 Like

That definitely looks better in the preview than mine does but I went far simpler for the keyholes. I did a circle with a simple pocket and then a polyline with one end at the centre of the circle.

The circle I went with a simple pocket down to 0.32 inches

and then the polyline was a contour with a start depth of 0.32 inches and a max depth of .3201 inches

As long as the polyline started ad the centre of the circle it would go up the line then back to the circle and retract. It feels like it should not work but so far it has for me. I half expected it to retract at the end of the polyline and cause me to have the tool rip out of the wood or cause the z-axis to skip steps. i have not done this in a while so do you know if the newer versions of Carbide Create will make my method stop working @WillAdams?

I built a jig and use a plunge router. Plunge it, pull it, turn it off, back it out. Done. No programming.

No, that’s the basis of the technique I used — I just drew in the pocket because I think it’s better practice to clear the slot as much as possible.

1 Like

You can but it is quite slow.

More seriously, for Fusion 360 users you have to do basically the same thing, everything I’ve found so far says to use the 2D trace toolpath and draw what you want the cutter to do.


Here’s the way I do it.

When I looked at the CC file, I see the ball nose in the slot from the top to the bottom.
Where does the Keyhole cutter stay at the bottom of the pocket and follow the slot both ways?

Could this be done using manual control?

Thx, about to try to use that keyhole cutter to make an undercut along the side of a slot, I am so glad that there is CAM preview…

1 Like

The toolpath for the ball-nose (which is used for the keyhole tool) is set to go to full depth because of the setting of the depth per pass for that toolpath to greater than the depth of the pocket.


I looked at the GCode in NC Viewer only and it appears to do what I expected it to do. Please do your due diligence and look at it yourself in something like NC Viewer and/or aircut if you are going to use this as a starting point.

  1. Make sure the keyhole bit is higher than the work piece and X,Y,Z has been zero’ed at the top of the stock where you want the keyhole bit to enter the stock
  2. The bit will do a pecking operation in the Z direction descending in 3mm increments (0, 3, 6, 9, 10) until it gets down to 10mm. Depending on the bit and how deep you want the keyhole to descend into the stock this would need to be edited
  3. Once the Z axis has pecked to its full depth it will then move in the Y direction. The slot will be cut towards the front of the table and like the Z axis movement the bit will do a pecking like motion until it reaches the full length of the slot. In this example its 15mm
  4. The bit will then return to X=0, Y=0 and then proceed with pulling back out of the stock by 15mm and as the Z axis pecking operation went down 10mm this means at the end of the operation the keyhole bit will be 5mm above the stock.



G90			(G90 so these are absolute values meaning all X,Y,Z values are in reference to you absolute Zero (X=0, Y=0, Z=0 location)
G21			(Metric so measurements are in mm)
G0 Z5.000		(Move Z to 5mm above Z-Zero - should be high enough to clear clamps to be safe)
G0 X0.000 Y0.000	(Move to X=0 and Y=0 if not already there, this is the location that the keyhole bit will enter the stock)
G1 Z-3.000 F200.0	(Start Plunge/Pecking operation, if you want to adjust the plunge/feedrate change the number after 'F' in mm/minute)
Z-0.000			(Remove this line if you do not want to do the pecking operation in the Z direction)
Z-6.000			(Remove this line if you do not want to do the pecking operation in the Z direction)
Z-0.000			(Remove this line if you do not want to do the pecking operation in the Z direction)
Z-9.000			(Remove this line if you do not want to do the pecking operation in the Z direction)
Z-0.000			(Remove this line if you do not want to do the pecking operation in the Z direction)
Z-10.000		(End of Plunge/Pecking operation in the Z axis and change this Z value to the final depth you want the keyhole bit end up at in mm)
Y3.000			(From bottom of pocket currently -10mm start plunge/pecking in the Y direction in increments of 3mm Y=0,3,6,9,12,15)
Y0.000			(Remove this line if you do not want to do the pecking operation in the Y direction)
Y6.000			(Remove this line if you do not want to do the pecking operation in the Y direction)
Y0.000			(Remove this line if you do not want to do the pecking operation in the Y direction)
Y9.000			(Remove this line if you do not want to do the pecking operation in the Y direction)
Y0.000			(Remove this line if you do not want to do the pecking operation in the Y direction)
Y12.000			(Remove this line if you do not want to do the pecking operation in the Y direction)
Y0.000			(Remove this line if you do not want to do the pecking operation in the Y direction)
Y15.000			(End of pecking operation in the Y axis and chang this Y value to the final length you want your slot in mm)
Y0.000			(End of slot cutting in the Y direction and returning to X=0, Y=0)
Z5.000			(Retract from the pocket in the Z direction from where the keyhole bit first entered into the stock to Z=5mm)

This is meant as just a starting point, maybe someone that is well versed in GCODE can take a look at it and suggest changes to clean it up as needed.

(EDIT: I’m not 100% sure this would be run in mm and not in inches but like I said I’m just starting to look at GCode so help needed to confirm that part)

(EDIT: Also in addition to confirming this would run in mm’s you would also need to edit the plunge/feed rates to make sure this is correct for your tools. In this example it’s the F200.0 meaning 200mm/m I think…)


If we have a small GCode file to do the keyhole operation is this something that we can use in Carbide Motion as a macro/quick action and have it saved in a library of operations so it’s permanently there ready to run?

Some comments below. (in parentheses)
I’ve done similar with KeyHoles, but I used G91 mode, so I could just jog to the location I wanted the slot and run the code from there.

G0 X0.000 Y0.000
G0 Z0.0 F200.0 (G0 is a rapid move, feedrate not needed.  I wouldn't rapid to Z0 anyway)
G1 Z-3.000 F200.0
G1 Z-0.000 F200.0
G1 Z-6.000 F200.0
G1 Z-0.000 F200.0
G1 Z-9.000 F200.0
G1 Z-0.000 F200.0
G1 Z-10.000 F200.0
G1 X0.000 Y3.000 F200.0 (G1, X0, & F200 are redundant, but doesn't affect anything really)
G1 X0.000 Y0.000 F200.0	(Feed seems really slow?)
G1 X0.000 Y6.000 F200.0
G1 X0.000 Y0.000 F200.0
G1 X0.000 Y9.000 F200.0
G1 X0.000 Y0.000 F200.0
G1 X0.000 Y12.000 F200.0
G1 X0.000 Y0.000 F200.0
G1 X0.000 Y15.000 F200.0
G21 (not needed)
G90	(not needed)
G0 X0.000 Y0.000 (You're 15mm up the keyole.  I wouldn't rapid move here)
G1 Z15.000 F200.0 (This a retract to Z15, you mentioned you wanted to move to Z5)

It will run in mm mode as you set the G21 and never changed that.

1 Like

@neilferreri agree the feedrate of 200mm/m may be too slow and perhaps discolor/heat/burn their stock but in the event that someone just copy/paste into an .nc file and runs it I’d rather the feedrate be on the low side for their tool then something bad happen. Up to whoever decides to try it out to adjust the feedrate to what works best for them in their specific situation (material, tool, machine, …).

Thanks for your review/comments, I edited the GCODE above taking your comments into consideration. As for the redundant feedrates do I just need the one on the first G1 line and the rest are redundant?

1 Like

Yup. A G1 sets the movement to a linear move at the defined federate. That mode persists until it is explicitly changed to a G0 (rapid linear) or G2/G3 (arc) or on reset of the controller.
Feedrate only needs to be defined when you initially set it and when you change it.

1 Like