Just a little update: I've thought a bit more about some possible extensions to this notation system (which may or may not be of much interest).
Cartesian productsSince Cartesian products are so useful in generating interesting higher-dimensional shapes, it makes sense to extend the notation to include them. The extension is very simple: the Cartesian product of two shapes with notations X and Y are written simply as XY. Note that Y cannot be in abbreviated form (the base object "." must be present, since otherwise the string XY may be misinterpreted as applying the operations Y to the object X). So, the duocylinder would be written .|O.|O, or simply |O.|O (note that the "." here is NOT a Cartesian product operator; it is the base object, ".", the point).
Polygonal operatorsSince polygons are so useful, it's nice to be able to denote them. For this, it is useful to add new operators that take the line segment .| and makes polygons out of them. For consistency with the rest of the operators, we still restrict ourselves to "tapering" operations: we simply scale the base object appropriately as we translate it along the new dimension. Since all (convex) polygons can be decomposed into a "stack of lines", it is possible to obtain them all this way.
Furthermore, we are really only interested in regular polygons currently, and it so happens that regular polygons allow us to uniformly scale the object at each offset along the new dimension (we don't need to translate it). To achieve this, we simply divide the desired polygon into two halves along any of its lines of symmetry, and the length of each "secant" orthogonal to the selected line of symmetry gives us the amount by which we need to scale the base object at that displacement.
For odd polygons, all lines of symmetry pass through exactly 1 vertex and bisect 1 edge. So, there is a unique way to derive the polygon from the line segment. This gives rise to a unique "tapering" operator that derives each odd polygon from the line segment. We may denote this operator by the degree of the polygon; hence, .|5 is the pentagon, and .|7 is the heptagon. This operator is general; we can apply it to higher-dimensional shapes to get objects made out of adjoined frustums and pyramids. For example, .||5 is the "pentagonization" of the square, which is a 3D solid made of a frustum adjoined with a square pyramid, such that it has a pentagonal cross-section along its axis of symmetry. To avoid ambiguity with multiple polygon operators in a sequence, we may delimit these numerical operators by writing (.|5)5 as .|[5>5. (The reason for writing [5> instead of <5> or [5] will be explained below.)
For even polygons, there are two different lines of symmetry: one which bisects two edges, and one which intersects with two vertices. So there are two ways of deriving the same polygon from the line segment. When the desired polygon is the square, we see that this corresponds with the difference between the cross polytope and the measure polytope: .|| is the measure, obtained by extruding .|, and .|X is the cross, obtained by bi-tapering .|. In 2D, these two classes of operators are equivalent; however, in 3D and above, they diverge. For example, the hexagon may be obtained either as a truncated bi-tapering (taper the object either way but stop before it reaches a point, resulting in 6 edges), or by an extrusion followed by a bi-tapering (extrude the object partway to obtain 2 of the hexagon's edges, then taper either side to a point to obtain 2 more edges on either side). We will denote the former as [6], and the latter as <6>. So, .|<6> and .|[6] are both the hexagon, but .||<6> is a solid made of a cube with square pyramids adjoined on two opposite faces, and .||[6] is a solid made of two frustums adjoined at their bases. Both have a hexagonal cross-section along their axis of symmetry.
Now the reason for writing the odd polygonal operators as <5] or [5> should be clear: the [ indicates edge bisection, and > corresponds with vertex intersection.
ExamplesWith these extensions to the notation, we can now create whole new families of objects.
All regular polygons are now available.
All the uniform prisms are also now available: .|A| (triangular prism, same as .|3 or .|[3> or .|<3]), .||| (square prism, same as cube, or diamond prism, .|X|), pentagonal prism (.|5|, or .|[5>|, or .|<5]|), hexagonal prism (.|6|, which refers to either .|[6]| or |<6>|), heptagonal prism (.|7|), etc.. Note that where unambiguous, we may dispense with the cumbersome bracketed notation and just write the degree of the polygon.
Polygonal pyramids are also now available: e.g., pentagonal pyramid, .|5A; hexagonal pyramid, .|6A. Polygonal bipyramids are also now available: e.g., heptagonal bipyramid, .|7X.
We can now have the general polygonal crind: e.g., heptagonal crind, .|7O or .|[7>O (to avoid confusion with .|70, a 70-gon).
Besides this, higher dimensional "polygonizations" are also now available: e.g., .||<6>, a cube (cuboid) with two square pyramids adjoined to two opposite ends; .|<5><6> (also written .|5<6>), a pentagonal prism with two adjoined pentagonal pyramids, .||[6], two adjoined square frustums (the shape of the face-first projection of the tetracube into 3D), .|5[6] (two adjoined pentagonal frustums), and so forth.
In 4D, we have things like .|||<6>: a tetracuboid with two adjoined cubical pyramids, .|||[6], two adjoined cubical hyper-frustums, .OOO5: a spherindrical frustum adjoined with a spherical cone, and many other such shapes.
The corresponding Cartesian products of these shapes are also now available, so all the duoprisms can now be generated, e.g., .|5.|7: the 5,7-duoprism; .|8.|3: the 8,3-duoprism, or .|O.|7: the heptagonal prismic cylinder (heptagon-circle Cartesian product). And what about .|<8>O.|| - the 5D (octagonal crind)-square Cartesian product? And what about (.|<8>O.||)[6], the edge-aligned hexagonalization of this object? (That's a 6D object consisting of two adjoined ((octagonal crind)-square Cartesian product)-al frustums.) The possibilities are endless.
(And we're
still only dealing with objects derived from "tapering", plus the Cartesian products. Still no way to derive the uniform polytopes or icosahedral polytopes.)