Full blind box joints in Carbide Create

Lastly we draw in the V endmills cutting the corners in the profile view:

6 passes will be necessary — one easy way to draw this is to stack up 6 copies of one-half of the endmill:

and scale the width of it to the stock thickness:

The bottoms of each may then be measured to determine the offset from the edge/top of stock, but the first thing which should happen is drawing in rectangles which are inset by stock thickness from the face rectangles and assigning a no-offset Contour toolpath to them at the top of the stock (well, 0.001mm below the top of stock — it’s not possible to assign a depth of zero to a toolpath):

This covers the case of the stock being thicker than expected.

The next two V contour toolpaths continue this, working down by first one quarter the distance, then to half the depth of the endmill diameter plus 10%:

For each successive layer, draw a rectangle of a size to match the desired depth/offset:

Node edit it to make it into an open polyline:

Then duplicate it in place, select the face rectangle and rotate the duplicate into position, repeating this to get each corner:

assign a toolpath to an appropriate depth and then duplicate and position for each face and repeat for each other depth/face:

Which previews as:

Need to check that everything connects as it should — hopefully test cut tomorrow, then once I have a working file, will upload.

1 Like

This topic was automatically closed after 30 days. New replies are no longer allowed.

Cutting went well:

Cube_45mm_Center_Bottom.c2d (308 KB)

2 Likes

And a very quick test-fit went well:

11 Likes

This topic was automatically closed after 13 days. New replies are no longer allowed.

Been working on this a bit more, and have automated it using OpenSCAD Graph Editor and the library I’ve been using, gcodepreview:

5 Likes

Revisiting this after completing:

and reviewing the above as well as the various linked projects and other efforts, some thoughts/considerations:

  • the new OpenPythonSCAD and the ability of gcodepreview to output open geometry in DXF works — if one opens in LibreCAD first and re-saves as SVG
  • directly tracing the tool outline where appropriate is simpler to calculate since one can just use a command which includes outputting the DXF code in addition to making the cut
  • where appropriate, one can always use a separate command to create arbitrary closed geometry which matches some aspect of a cut
  • it is easier to block out prototypes in BlockSCAD than it is to create finished designs in OpenSCAD Graph Editor — most likely because of the difficulty of repurposing chunks of code and ensuring that slight variations in code have differences in appearance which are suitably expressive — this probably warrants further experimentation
  • using 3 tools seems to be the best mix of ease-of-use and capabilities:
    • large V — note that if the library is set up to do this in one pass this will bound the maximum possible Stock Thickness — setting it to always make two passes seems expedient
    • small V — this needs to be a reasonable dimension, sufficiently smaller than the Stock Thickness that it will allow a reasonable size of Box Joint to be cut
    • small square — if doing this in a graphical tool it may be helpful to use a smaller diameter than the Small V (3mm vs. 3.175mm is one dimension pair which I considered and sourced tooling for), but if one is directly modeling toolpaths, having a direct correspondence is more straight-forward

Starting by roughing out the design in BlockSCAD we have a pretty standard set of parameters to begin:

stockXwidth = 0;
stockYheight = 0;
stockZthickness = 0;
Joint_Width = 0;
Number_of_Joints = 0;
Large_V_Diameter = 0;
Small_V_Diameter = 0;
Small_Square_Diameter = 0;
Joint_X_Position = 0;
Joint_Y_Position = 0;
Joint_Orientation = 0;
Joint_Side = 0;

Note that it will be possible to position a joint both in terms of XY and in orientation and to specify which side of a joint is to be modeled/cut, allowing arbitrary part orientation.

In setting up the initial values, the first question which arises is the number of pins — rather than doing the math, it is simple to just draw things up in Carbide Create:

draw a pair of grooves which will define the begin/end for a pin:

Scale them by 10% along the axis of the joint:

Done

then drawn in blocks for the miters:

position relative to one:

Then use Linear Array to make as many duplicates as are needed to (more than) fill the interstice:

delete the extra:

Then align:

and count:

then we fill in the other values:

and create a module:

and draw in the stock and set up an initial cut:

which has a simple analogue in Carbide Create:

The drawn-in rectangles indicate the material to be removed to define the pins of the joint:

and the cut through this is easily envisioned and drawn up by placing circles at each relevant point:

(using the Align tool to guide placement)

at which point the centers may be connected with a polyline:

which may then be duplicated

mirrored

and aligned:

then an array made:

and delete the extra piece:

and assign a No Offset Contour Toolpath:

A post was merged into an existing topic: How to best create CNC-friendly wood joinery

First, do the math to get the beginning point:

at which point one can just do a loop:

with a bit of a trick to do the other side:

Then make the cuts at the ends:

as discussed above, the cutting depth of the Large V diameter tool is a limiting factor, so it will be necessary to add additional cuts offset by some proportion of the Stock Thickness — which should be included at the appropriate if statements.

which just leaves the matter of working out how to get the pins to fit into the cut recesses which are necessarily rounded — one option would be to use a roundover tool working up the geometry of rounding each pin, but it is more expedient to make a V cut to the depth of the small tool and cut with a square tool in-between:

And to make a second version of all the code which supports the horizontal orientation…

1 Like

Duplicating and rearranging things we get: