README

Diagram generators

One script per diagram whose coordinates are arithmetic rather than judgement.

cd "Bubbly Games/Workflows/3D Models/Characters/diagrams/make"
python make_hair_tiers_svg.py
python make_hair_card_anatomy_svg.py
python make_hair_channels_svg.py
python make_hair_atlas_svg.py

Each writes its .svg into the folder above and prints how many lines it wrote.
They take no arguments and overwrite in place.

Script Writes Why it is generated
make_hair_tiers_svg.py hair-tiers.svg Every card leaves the scalp along a radius and falls from there. Placed by hand it leaves the scalp at an angle the scalp does not have, on the one picture whose whole subject is how a card is attached.
make_hair_card_anatomy_svg.py hair-card-anatomy.svg The picture is two numbers compared along one bent line, and the claim is that R 0.50 is halfway. A tick placed by eye is a tick that says 0.50 somewhere that is not.
make_hair_channels_svg.py hair-channels.svg The argument is a count of wires: six arrivals from two channels, one from a third, none from the fourth. A wire drawn by hand lands near a box rather than on it, and then it cannot be counted.
make_hair_atlas_svg.py hair-atlas.svg Every edge is a strip boundary at an exact fraction of U, and two of them carry the picture: three cards inside one, one card across another. Drawn by hand, the good case and the error case differ by how steady the hand was.

Every script draws with the shared kit in Workflows/diagram-kit/, which owns
the palette, the type and the way labels point at things. A new picture gets a
script here too, even one whose every line is a judgement, so that it looks
like the others. → Diagram Style

They are not a build step

Nothing runs these. The .svg is the artefact, it is committed, and it is what
the notes embed. A change to a generator does nothing at all until somebody
runs it. That is on purpose, because a picture is reviewed by looking at it.

Two of the four carry copies of the rules. make_hair_channels_svg.py holds
mesh.hairCards.assignments (what R, G, B and A each mean), and its
top-right line holds the attribute, domain, dataType and space from
mesh.hairCards.settings. make_hair_atlas_svg.py holds texture.hairAtlas:
strips across U, cards along V, and the root at V = 1, which is the
one part of the convention a picture can state backwards without looking wrong.
If those change, these diagrams are stale and nothing will say so. Check
them against Asset Rules (Generated) > hairCards and
Asset Rules (Generated) > hairAtlas before believing them.

The other two copy nothing. The V values on hair-card-anatomy.svg are an
example of a long card and a short one, not a measurement of any asset.

Every word drawn on all four is a word in the lexicon (Card, Clump,
Scalp, Tip), because a picture that labels the scalp end Root teaches the
one mistake the vocabulary exists to stop.
→ Asset Rules (Generated) > Hair