Skip to content

cycloidgen v7.5.0

Choose a tag to compare

@github-actions github-actions released this 14 Aug 17:49
· 7 commits to main since this release

Numbers — none.

Changed

  • The application icon is the disc it cuts, not the company logo. Every
    window, task bar button, Start menu entry, installer page, Dock tile and
    desktop launcher showed the Medinstech mark — which says who wrote the
    program and nothing whatever about what it does. Somebody scanning a task bar
    full of windows is looking for this application, and a vendor logo is the
    one thing on it that is also on everything else the vendor ships.

    It is a cycloidal disc now, and not a drawing of one: tools/make_icon.py
    renders the outline through
    disc_profile(),
    the same call the STEP export cuts the part with, with the pin radius taken
    as a fraction of critical_radius() so the lobes are a disc that could
    actually be manufactured rather than a flower. The icon cannot drift from the
    geometry: change the profile and it changes with it. tests/test_icon.py
    measures the committed images back against the equation — every point of the
    outline sits at exactly the pin radius from the pin-centre locus — and against
    what the tool draws today, so a hand-edited PNG fails.

    Each size is drawn at that size. A 256 px disc with eight lobes and six
    output holes resampled to 16 px is grey soup, so it is graded like an
    optical size instead: fewer lobes, deeper, and the holes come out, until at
    16 px it is six lobes and a bore. The .ico carries seven separately drawn
    images and Windows picks between them; the macOS .icns is built the same way
    at package time and now fills every slot up to 1024, where before it stopped
    at 256 and left Finder's largest view to blur one.

    The disc is cut out of a brand-blue tile, which is what lets one asset be
    legible on a light task bar and a dark one — the bare mark was the brand
    colour against whatever the desktop happened to be, and on a dark task bar
    that is 2.8:1.

    The installer's two panels show it too, drawn at the exact 40 px and 96 px
    those controls display rather than scaled down from the 256. The Medinstech
    wordmark stays on the welcome band, where it says who publishes this; the
    picture beside it is now the icon the shortcut will get, which is what
    somebody halfway through a setup wizard is being told about.

    It is not a trademark. cycloidgen.ico and icon-*.png carry no name or
    mark of Medinstech, they are Apache-2.0 with the rest of the source, and a
    fork may keep them — see NOTICE. The brand assets beside
    them are unchanged and still are not. The two generators are kept apart on
    purpose: tools/make_assets.py needs masters that are not in this repository
    and no longer writes the icon, so a brand refresh cannot quietly put the logo
    back.


Windows - cycloidgen_..._Setup.exe. It is unsigned, so
SmartScreen will warn on first run: More info -> Run anyway. A
signed build is planned.

Linux - cycloidgen-...-x86_64.AppImage. chmod +x and run it;
it needs glibc 2.35 or newer. If it will not start, the machine has no
FUSE 2: install libfuse2, or run the file with
--appimage-extract-and-run, which unpacks it instead of mounting it.

macOS - cycloidgen-...-arm64.dmg, Apple silicon. Drag it to
Applications, then run this before opening it:

xattr -dr com.apple.quarantine /Applications/cycloidgen.app

It is signed ad-hoc but not notarized, so Gatekeeper blocks the first
launch. On macOS 15 and later the dialog it raises defaults to
Move to Trash, which deletes the install - there is no Open
Anyway
in that dialog, it appears in System Settings only after a
launch has been blocked, and right-click -> Open no longer bypasses
it. Clearing the flag first avoids the dialog entirely. On an Intel
Mac, use pip.

Anywhere with Python 3.10-3.14: pip install cycloidgen, then
cycloidgen.

The numbers this produces are preliminary sizing estimates, not a
certification. Validate against a physical prototype before anything
load-bearing depends on them.