Geometries¶
The complete, exact list, read from glyphviz_core/geometry_data.py:10-76 —
the single source shared by the GL renderer (glyphviz_gl/geometry.py) and
the Properties Panel's Geometry dropdown (GEO_NAMES, populated at
main_window.py:528-531, 767-770).
What geometry controls¶
Geometry is the shape assigned to an individual node — independent of topology, which governs how a parent arranges its children in space. A node's geometry answers "what does this one point in the hierarchy look like," while topology answers "how are this node's children laid out."
The full list¶
IDs 0–22 are commented in source as matching ANTz's kNPgeo* enum
(geometry_data.py:9); IDs 23–26 are explicitly marked as GlyphViz-only
extensions with no ANTz/GaiaViz equivalent.
| ID | Name (GEO_NAMES) |
Constant | Notes |
|---|---|---|---|
| 0 | Cube Wire | GEO_CUBE_WIRE |
Wireframe; solid pair is GEO_CUBE |
| 1 | Cube | GEO_CUBE |
|
| 2 | Sphere Wire | GEO_SPHERE_WIRE |
Wireframe; solid pair is GEO_SPHERE |
| 3 | Sphere | GEO_SPHERE |
|
| 4 | Cone Wire | GEO_CONE_WIRE |
Wireframe; solid pair is GEO_CONE |
| 5 | Cone | GEO_CONE |
|
| 6 | Torus Wire | GEO_TORUS_WIRE |
Wireframe; solid pair is GEO_TORUS |
| 7 | Torus | GEO_TORUS |
Shape driven by the node's ratio field (minor radius as a fraction of overall radius, default TORUS_DEFAULT_RATIO = 0.14) |
| 8 | Dodecahedron Wire | GEO_DODECA_WIRE |
Wireframe; solid pair is GEO_DODECA |
| 9 | Dodecahedron | GEO_DODECA |
|
| 10 | Octahedron Wire | GEO_OCTA_WIRE |
Wireframe; solid pair is GEO_OCTA |
| 11 | Octahedron | GEO_OCTA |
Default geometry for newly-created nodes (main_window.py:531) |
| 12 | Tetrahedron Wire | GEO_TETRA_WIRE |
Wireframe; solid pair is GEO_TETRA |
| 13 | Tetrahedron | GEO_TETRA |
|
| 14 | Icosahedron Wire | GEO_ICOSA_WIRE |
Wireframe; solid pair is GEO_ICOSA |
| 15 | Icosahedron | GEO_ICOSA |
|
| 16 | Pin | GEO_PIN |
ANTz's "ice-cream cone": a 10:1 cone standing on its apex at the node's own origin, shaft rising along +Z, domed at the top. Unlike the other glyphs it is not centred on its origin — that placement is what lets Pin-topology children ride the shaft (see Topologies) |
| 17 | Pin Wire | GEO_PIN_WIRE |
Wireframe pair — note the reversed solid/wire ID order vs. every other pair above |
| 18 | Cylinder Wire | GEO_CYLINDER_WIRE |
Wireframe; solid pair is GEO_CYLINDER |
| 19 | Cylinder | GEO_CYLINDER |
|
| 20 | Grid Wire | GEO_GRID_WIRE |
Wireframe; solid pair is GEO_GRID |
| 21 | Grid | GEO_GRID |
Flat square in the local XY plane, normal along +Z — matches ANTz's Grid node (topo=Plane, geometry=Square) |
| 22 | Point | GEO_POINT |
Fixed-pixel-size GL_POINTS sprite; size driven by the node's ratio field |
| 23 | Mesh (Imported) | GEO_MESH |
GlyphViz extension — arbitrary triangle mesh imported via glyphviz_core/mesh_loader.py (OBJ/STL/PLY/glTF), selected per-node by Node.mesh_id rather than a fixed shape. Each imported mesh gets its own entry in the geometry dropdowns ("Mesh 1: name", "Mesh 2: name", …); picking one sets both geometry and mesh_id |
| 24 | Circle | GEO_CIRCLE |
GlyphViz extension — flat 2-D marker, world-space plate (like Grid), compiled to display lists for scatter-plot-scale performance |
| 25 | Cross | GEO_CROSS |
GlyphViz extension — same idea as Circle |
| 26 | Star | GEO_STAR |
GlyphViz extension — same idea as Circle |
| 27 | Line | GEO_LINE |
GlyphViz extension, Link nodes only — the classic thin connector, and a Link's default. Width is ratio × 20 px |
| 28 | Prism (Textured) | GEO_LINE_PRISM |
GlyphViz extension, Link nodes only — a textured 4-sided tube between the two ends, scrollable via rotate_rate_z to show directed flow. ratio is its world-space half-width |
GEO_COUNT = 29 (geometry_data.py).
Geometry on a Link node¶
A Link (type=7) is an edge between two other nodes — its parent_id is
the A-end and its child_id the B-end — and its geometry picks how that
edge is drawn. All of the following are selected by the geometry field
alone, with no extra column, so a link's look travels with the CSV:
- 27 Line and 28 Prism (Textured) are the two line modes above.
- 22 Point also draws as a plain line: a fixed-pixel sprite has no extent to stretch along an axis, so there is no glyph reading of it.
- Every other ID renders that glyph stretched between the link's two ends. This is ANTz's own link behavior, and it is what lets an edge become a cylinder rod, a tapering cone (whose apex points at the B-end — a natural arrowhead for directed graphs), a wireframe cage, an imported mesh, or an arbitrarily distorted version of any other shape.
Three rules govern a glyph link's transform:
| Property | How it is set |
|---|---|
| Length | The distance between the two endpoints. The glyph's own local Z extent is mapped onto the A→B segment, so it starts on A and ends on B exactly — including Pin, whose apex sits at its local origin rather than being centred |
| Thickness | ratio, applied to both cross-axes. One field controls thickness whatever geometry the link carries — the same field the Line and Prism modes already use for their width |
| Orientation | Derived entirely from the two endpoints. A link has no independent pose, so its own translate, rotate, and scale fields play no part. Roll is gravity-referenced, so a link does not spin about its own axis as it swings around |
Press O / Shift+O with a link selected to cycle it through every geometry (Mesh and Point are skipped, as they are for ordinary nodes). A selected glyph link draws the usual yellow selection box; a Line or Prism link does not.
Two things worth knowing:
- On a Torus link,
ratiodoes double duty — it is both the thickness and the torus's own minor-radius proportion. Values above 1.0 make a degenerate torus. The result at sane ratios is a hollow tube running along the edge. - The flat geometries (Grid, Circle, Cross, Star) have no Z extent to stretch, so they render as a plate at the midpoint of the edge rather than spanning it.
Performance is left to you: a scene with thousands of solid glyph links draws thousands of glyphs. Drop back to Line where the edge is not the point.
Texture support¶
Setting a node's texture_id maps the image onto the solid geometries: Cube,
Sphere, Cone, Cylinder, Torus, Grid, Pin, the four Platonic solids, and the
flat markers Circle, Cross, and Star. Two geometries take no texture — the
11 wireframe variants (there is no surface to map onto), and Point,
whose fixed-pixel GL_POINTS sprite has no geometry to carry coordinates. In
both cases the node simply renders in its solid color; nothing errors.
The flat markers crop the image to their silhouette rather than stretching it to fit, using the same image window the Grid uses across its square. A Circle shows a circular crop of the picture, a Star a star-shaped one, and a Cross the picture's central vertical and horizontal strips. Being flat, they show their texture face-on and disappear to an edge when viewed side-on.
Picking behavior¶
The 11 wireframe geometries render as outlines, but for click-picking
purposes each is mapped to its solid equivalent in a dedicated pick pass
(WIRE_TO_SOLID, geometry_data.py:87-99) — so clicking anywhere inside a
wireframe shape's silhouette registers a hit, not just clicks landing
precisely on a visible wire.
Next step¶
See Topologies for how a parent node positions its children, or Properties Panel for where geometry is set in the GUI.