Replicating Sol LeWitt's skeletal geometries

Sol LeWitt (1928 - 2007) was an American artist linked to various movements, including conceptual art and minimalism. He used lines, geometric solids, patterns, formulas and permutations to create his structures and wall paintings. Most of his works have a decidedly mathematical flavour. LeWitt's works are found in the most important museum collections worldwide.

For the art piece I want to reproduce with Mathematica, LeWitt was probably inspired by Leonardo da Vinci's illustrations for Luca Pacioli's 1509 book The Divine Proportion.

Images from the Mathematical Association of America

It is relatively easy to reproduce skeletal polyhedra if we use tubes:

Graphics3D[{MaterialShading["Bronze"], PolyhedronData[#, "Lines"]},
Boxed -> False,
ImageSize -> 200,
Lighting -> "ThreePoint"] /.
Line :> (Tube[#, 0.04] &) & /@ {{"Pyramid", 4}, "Cube", "Dodecahedron"} // Row


But it is much more difficult to replicate Leonardo's style with rectangular polygons. Fortunately, kglr showed how we can do it in his answer to this question:

Construction of a Fuller dome

Perforate[width_ : .3, thickness_ : .05][bmesh_] :=
MeshPrimitives[bmesh, 2] /.
Polygon[x_] :>
Module[{c = Mean @ x, p1 = Partition[x, 2, 1, {1, 1}], p2},
p2 = Map[Reverse] @ Partition[Map[(c + (1 - width) (# - c)) &, x], 2, 1, {1, 1}];
ReplaceAll[Polygon[y_] :> ConvexHullMesh[Join[y, (1 + thickness) y]]] @
MapThread[Polygon @* Join] @ {p1, p2}]

Graphics3D[
Perforate[0.2] @ PolyhedronData["GreatRhombicosidodecahedron", "BoundaryMeshRegion"],
Boxed -> False]


As Syed commented, there is also a repository function which might be useful: OutlinePolygons

Using this technique I started with my replica of LeWitt's Five Open Geometric Structures (1979):

The cube looked promising,

Graphics3D[{
MaterialShading[<|"BaseColor" -> White, "MetallicCoefficient" -> 1, "RoughnessCoefficient" -> 0.5|>],
Perforate[.2] @ PolyhedronData["Cube", "BoundaryMeshRegion"]},
Background -> GrayLevel[0.4],
Lighting -> {"Standard", GrayLevel[0.9]},
Boxed -> False]


Thanks to kglr's comment I could also produce the 4-sided pyramid:

center =
TransformedRegion[#,TranslationTransform[RegionCentroid[#]]] &;

Graphics3D[{
MaterialShading[<|"BaseColor" -> White, "MetallicCoefficient" -> 1, "RoughnessCoefficient" -> 0.5|>],
Perforate[.2] @ center @ PolyhedronData[{"Pyramid", 4}, "BoundaryMeshRegion"]},
Background -> GrayLevel[0.4],
Lighting -> {"Standard", GrayLevel[0.9]},
Boxed -> False]


But the cuboid failed miserably producing lots of "ConvexHullMesh" error messages. The evildoer:

Graphics3D[Perforate[.2] @ BoundaryMeshRegion[Cuboid[{0, 0, 0}, {1, 2, 3}]]];


My Question

How can we reproduce the Five Open Geometric Structures?

If it is too difficult to find a polygon-based solution, I would also accept tubes or even solids, if they are neatly placed next to each other on a board with the right ViewPoint and ViewAngle.

More Sol LeWitt on this tour of the Lisson Gallery:

Lisson Gallery

– Syed
Commented Dec 10, 2023 at 11:56
• Thank you, Syed, I will add the link to my question
– eldo
Commented Dec 10, 2023 at 12:08
• for a (partial) rehabilitation of Perforate, pre-process input mesh with centerAtOrigin = TransformedRegion[#, TranslationTransform[RegionCentroid[#]]] &?
– kglr
Commented Dec 10, 2023 at 12:26
• Thank you, kglr, with your addition I can now produce the 4-sided pyramid. Also the cuboid, but with some mistakes. The repository function suggested by Syed also perforates the cuboid, but with even more mistakes.
– eldo
Commented Dec 10, 2023 at 12:59

I found that if we replace ConvexHullMesh to ConvexHullRegion in the excellent code of @kglr, all of the thing is OK now.

Clear[Perforate];
Perforate[width_ : .3, thickness_ : .05][bmesh_] :=
MeshPrimitives[bmesh, 2] /.
Polygon[x_] :>
Module[{c = Mean@x, p1 = Partition[x, 2, 1, {1, 1}], p2},
p2 = Map[Reverse]@
Partition[Map[(c + (1 - width)  (# - c)) &, x], 2, 1, {1, 1}];
ReplaceAll[
Polygon[y_] :> ConvexHullRegion[Join[y, (1 + thickness)  y]]]@

{reg1, reg2, reg3,