OpenSCAD and STL code for hexagonal toy bricks.
Version of Wednesday 6 May 2020.
Dave Barber's other pages.

It is important to acknowledge Jeff Epler's earlier work in this area.

§1. Introduction. This page presents an implementation of the hexagonal toy brick system suitable for three-dimensional printers. People involved might be called laterculators; the process, laterculation.

 several OpenSCAD views of a simple brick, namely H1_S1_D0, drawn at the default scale figure 1A top upper lower bottom the coloring is artificial, in order to make the structure of the brick clearer

There are three systems: H-bricks, Y-bricks, and P-bricks. Bricks from one will fit the others, but they are very different in nature. (Audacious designers can produce hybrids, which are only glimpsed in this report.) Beginners, especially children, are urged to start with the H-bricks. Accordingly, the H-bricks will be explained first. The Y-bricks are explained later on this page, with the P-bricks after that.

A comprehensive and convenient notation for all possible bricks has yet to be found; see polyhex for a glimpse into the wealth of configurations. Still, the system described here is of benefit for simpler bricks, which are the ones most likely to be produced.

Each H-brick has a notation in the form Hh_Ss_Dd, where:

• h is the number of complete hexagonal chambers (shown in red in the images) on the bottom of the brick;
• s is the number of studs (shown in green) on the top of the brick;
• d, meaning "design", is an arbitrary number distinguishing bricks that would otherwise have the same Hh_Ss_Dd designation.
Special case: If two H-bricks are mirror images of each other, in other words a chiral pair, one of them will be denoted Hh_Ss_DdA and the other Hh_Ss_DdB, using all the same numbers. When that happens, that combination of h, s, and d numbers will not be used for any other H-brick.

The notation for Y-bricks is the same as for H-bricks, except to change the first letter: Yh_Ss_Dd. By the same token, P-bricks are designated Ph_Ss_Dd. A hybrid brick starts with M.

If an H- or P-brick's designation includes the subsymbol D0, all its complete hexagons lie in a straight line. For a Y-brick, the complete hexagons will lie in an "essentially" straight line.

§2. Some technical matters. OpenSCAD programs and their STL outputs can be downloaded for the bricks which appear in the schematic images below and on linked pages. Everyone is welcome to download the code, modify it, print lots of bricks, and redistribute the altered or unaltered code. Author's opinion: Open-source software is always to be encouraged.

Users who want to print the bricks without changes can send the .stl file directly to a slicer, while those who prefer to customize the brick can load the .scad files into OpenSCAD and modify them as desired. Everyone will benefit from examining file include_1.scad before producing any bricks.

With the default values:

• the width of H1_S1_D0 will be 24 mm across corners;
• the width of Y3_S1_D0 will be 24 mm across flats;
• the width of P1_S1_D0 will be 12 mm across flats;
• the height of any brick, not including the stud, will be 10 mm.
Bricks intended for very small children should probably be a larger size to prevent ingestion.

In general, the images on this page are not to scale, because the user can vary the dimensions of various aspects of the bricks over a wide range. Relationships among the x and y dimensions are critical, but the formulas in the OpenSCAD code will manage the calculations. By contrast, the z dimensions are quite flexible, and are independent of the x and y dimensions. For instance, it is entirely feasible that within a set of bricks some are be single-height and others double-height, everything fitting without complication.

Most of the images on these pages are schematic in the sense that in a real brick, the studs are on the top and the inner walls are on the bottom, so that both could not be fully viewed simultaneously. Color usage:

• yellow: overall footprint
• blue: outer wall
• red: inner walls
• light and dark green: studs
• black: x and y axes, shown for reference; the placement of the brick relative to the axes is arbitrary

• Each stud on an H- or P-brick has a hexagonal depression on its top, represented by a darker green color.
• Each stud on a Y-brick has a Y-shaped groove on its top, also represented by a darker green color.
This variation in stud shape, which does not affect functionality, makes the bricks easier to identify and use.

The hash marks on the axes represent units called x_step and y_step respectively, and they are not intended to be equal. They are the largest values for which the locations of nearly all components of nearly all bricks can be specified with integers. These two step values were chosen for the convenience of the OpenSCAD programmer. Still, locations can be specified with non-integers whenever desired.

Each diagram is the top rather than the bottom view of a brick; this distinction is essential for chiral pairs. The images' green and red backgrounds are explained later.

§3. Examples of H-bricks. H1_S1_D0 is known as the unit H-brick. Within the downloadable code, it is found in either of these files:

• H_bricks/H1/H1_S1_D0.stl
Other bricks have analogous file names.

some straight H-bricks figure 3A

 Observation. The three bricks labeled above as H1_S1_D0, H2_S2_D0, and H3_S3_D0 are quite enough to satisfy the needs of many beginners, allowing them to build structures with sturdy intersections (figure A-4a, figure A-8a). A separate but equivalent trio is H1_S1_D0, H3_S2_D0, and H5_S3_D0 (figure D-9). The situation for Y-bricks is more complicated, which is one reason why H-bricks are recommended for novices. Meanwhile, the P-brick equivalent is given in §7 below.

 figure 3B some chiral H-brick pairs with notes on rotational symmetry each of these bricks has180-degree rotational symmetry each of these bricks has120-degree rotational symmetry each of these bricks has180-degree rotational symmetry each of these brickslacks rotational symmetry

 some miscellaneous H-bricks figure 3C acute convexity acute concavity a hole in the middle right-angle bricks are possible

These H-bricks plus others are listed in lexicographical order.

Throughout these pages, those H-bricks that are equivalent to a tessellation of the unit H-brick are drawn on a green background. An example is H6_S5_D1A:

 figure 3D

Drawn on a red background are bricks that are not equivalent, such as H7_S5_D1A. Young children who are playing with H-bricks might benefit from a collection limited to the tessellables; they are often simpler to use than the others. On the other hand, advanced users might enjoy the variety that non-tessellables bring.

A gray background is used when tessellability is not established, as in images of partial bricks.

If a collection of tessellable bricks adjoin one another in the natural manner, it is almost inevitable that the hexagonal grid of inner walls will continue from one brick to the next in phase:

 figure 3E(studs omitted)

§4. The conservative subset. Among the possible H-bricks, those chosen for this implementation usually conform to these conservative criteria:

• If two inner-panel hexagons (red) share an edge, at least one of them will not be underneath a stud (green).
• If two outer walls (blue) meet at a convex angle, there will be a stud in the hexagon they include.

some valid, but not conservative, H-bricks figure 4A

Many designers will be creative and do things entirely unanticipated by the present author; that is to be encouraged. The OpenSCAD programs provided here allow a stud to be placed, or omitted, over any hexagonal chamber (whence H-bricks and P-bricks); or over any junction of three inner walls (whence Y-bricks). Further, segments of inner or outer walls can be omitted, in some cases conveniently. In that case, the notational system outlined above will not suffice.

A chamber that is less than a full hexagon, such as that formed between inner and outer walls, is not anticipated to have any use. Any stud that would fit it is definitely non-conservative.

§5. OpenSCAD for H-bricks. In the OpenSCAD code, there are 32 render modules sufficient to conveniently form all the H-bricks in the diagrams above, and many others. In that code, letters are often used to represent directions in the xy plane. Their meanings:

 figure 5A

Figure 5B contains the unit H-brick drawn both normally and exploded, with the relevant OpenSCAD code — the complete file — to give an idea of how the render components fit (and slightly overlap) one another:

file H_bricks/H1/H1_S1_D0.scad file H_bricks/H1/H1_S1_D0_exp.scad figure 5B ```include <../../include_1.scad> render_IA (-1, +1); render_GK (+1, +1); render_KC (-2, 0); render_T ( 0, 0, 1, 1); render_S ( 0, 0, 0); render_EI (+2, 0); render_AE (-1, -1); render_CG (+1, -1);``` ```include <../../include_1.scad> render_IA (-1.5, +1.5); render_GK (+1.5, +1.5); render_KC (-3.0, 0.0); render_T ( 0.0, 0.0, 1, 1); render_S ( 0.0, 0.0, 0); render_EI (+3.0, 0.0); render_AE (-1.5, -1.5); render_CG (+1.5, -1.5);```

Normally, integers will suffice as arguments to the render modules, but the values are permitted to be non-integers for special purposes, such as exploded diagrams.

Note that a simple brick such as these can be achieved with only nine lines of code. Complicated bricks may require several dozen, but in any case the code is little more than a list of render calls, which themselves can be transformed with OpenSCAD directives such as translate, rotate, and mirror.

§6. Examples of Y-bricks. The key feature of Y-bricks is that a stud is centered of the junction of three inner walls, as distinguished from H-bricks where the stud is centered over a hexagonal chamber of inner walls. The unit Y-brick is Y3_S1_D0, as shown in figure 6A, and the notion of tessellation follows without surprise.

 several OpenSCAD views of Y3_S1_D0 figure 6A top upper lower bottom

 some straight Y-bricks figure 6B compareH1_S1_D0 compareH2_S2_D0 compareH3_S2_D0 compareH5_S3_D0 compareH3_S3_D0

For Y-bricks, the concepts of chirality and rotational symmetry are in principle the same as for H-bricks. However, the relationship between the inner walls and the outer walls adds subtleties. Y-bricks Y9_S3_D1X and Y9_S3_D1Z in figure 6C provide an example. The pattern of their inner walls is chiral, even though their overall footprint, as indicated by their outer walls, is not. This is the reason for the X and Z suffixes on their names.

 figure 6C

Although Y-bricks Y9_S3_D2 and Y10_S3_D1 in figure 6D have the same overall shape, their inner-wall patterns are so different as to require distinct Y-numbers in their notations; in this case, the X and Z suffixes are not helpful. Together, the two bricks demonstrate how the Y-shaped depressions cut into the studs of Y-bricks can make them easier to use: a user viewing the top of the brick can infer where the walls underneath must be.

 figure 6D

Adding a stud in the center of each brick (figure 6E) is feasible, making a hybrid brick. Note that the extra stud defeats any strict definition of tessellability.

 figure 6E compare Y9_S3_D2 compare Y10_S3_D1

Figure 6F points out an important contrast between, on the one hand, the H-bricks and P-bricks; and on the other hand, the Y-bricks:

unit brick rotational symmetry figure 6F 60°: all parts 60°: outer wall; overall shape of stud 120°: inner wall; Y-groove in top of stud

Figure 6G shows how the rotation of a brick (Y3_S1_D0) can affect whether the hexagonal grid of its inner walls will be in phase with that of an adjoining brick (Y9_S3_D2):

Y9_S3_D2 and Y3_S1_D0 figure 6G

Figure 6H reveals various phase relationships between two like bricks, and between two almost-like bricks:

Y9_S3_D2 Y10_S3_D1 figure 6H inphase out ofphase

Designers will of course have differing opinions as to whether out-of-phase placements are a good or bad thing.

Lexicographical listings of some Y-bricks and M-bricks.

The render modules for Y-bricks. Their OpenSCAD code works the same as that for H-bricks.

An illustration of how Y-bricks are more complicated than H- or P-bricks.

§7. Examples of P-bricks. P-bricks are like H-bricks in that the stud is centered over a hexagonal chamber. However, with H-bricks, that chamber consists entirely of inner walls, while with P-bricks some of those walls may be outer.

The unit P-brick is P1_S1_D0 (figure 7A), and the notion of tessellation is almost automatic. In overall size, P-bricks tend to be smaller than H-bricks and Y-bricks, but the studs and the chambers they fit into are the same. Hence P-, H-, and Y-bricks can all be used together.

 several OpenSCAD views of P1_S1_D0 figure 7A top upper lower bottom

 some straight P-bricks figure 7B compareH1_S1_D0 compareH3_S3_D0 compareH3_S2_D0 compareH5_S3_D0 compareH7_S4_D0 compareH2_S2_D0 compareH4_S4_D0

 Observation. A simple set for beginners contains P1_S1_D0, P2_S2_D0, and P3_S3_D0. These three P-bricks can build an equivalent to anything that H1_S1_D0, H2_S2_D0, and H3_S3_D0 can.

some miscellaneous P-bricks figure 7C

A P-brick is saturated if every hexagonal chamber has a stud on top.

These and more P-bricks listed in lexicographical order.

The render modules for P-bricks. Their OpenSCAD code works the same as that for H- and Y-bricks.