Fry3DX 0.4: an easy 3D modeller

Shapes with live settings, shape editing, knife and hole tools, drawing
shapes onto other objects, combining objects (add / subtract / overlap),
copies, thickness, painting with stickers and layers, a Layout tab, a
Print tab with checks, packed .fry files with autosave, export to GLB,
glTF, FBX, OBJ, 3MF, STL and PLY, folders in Layers, its own crash
screen, and a website for GitHub Pages in docs/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NMSrd5oe1GpUD7E6d825KP
This commit is contained in:
Nexoniarz 2026-10-19 21:18:35 +02:00
commit f3e8eca87b
135 changed files with 23423 additions and 0 deletions

111
README.md Normal file
View file

@ -0,0 +1,111 @@
# Fry3DX — Frying 3D Extreme
**A 3D modeller that does what you'd expect: pick a tool, click, drag.**
Made by [Nexoniarz](https://github.com/Nexoniarz) · Website: https://nexoniarz.github.io/Fry3DX/
![Fry3DX](docs/img/model.webp)
## Why
Because the well-known modellers suck at being easy: a wall of panels, shortcuts nobody would
guess, modes inside modes. Fry3DX is built the way people think — a toolbox like GIMP's, plain
words on every button, tooltips everywhere — and keeps the useful parts (rounding, mirroring,
combining, holes for screws, checks for 3D printing) one click away.
## Build and run
Linux, a Vulkan graphics card, CMake, Ninja, a C++20 compiler, glslc (shaderc) and SDL3.
Everything else is downloaded while building. On NixOS `shell.nix` has it all:
git clone https://github.com/Nexoniarz/Fry3DX.git && cd Fry3DX
nix-shell --run 'cmake --preset release && cmake --build build/release'
build/release/bin/fry3dx [file.fry]
nix-shell --run 'cmake --build build/debug --target check' # tests
## What's in it (v0.4)
Five tabs at the top (Ctrl+1 to 5): **Model**, **Paint**, **Layout**, **Render**, **Print**.
- **Knife** (K, shape editing): click points along the cut (or drag a straight line; Ctrl for
45° steps), Enter or double-click cuts. Only what you see, or **right through**; then just the
edges, pieces of one object, each piece its own object, or the smaller piece deleted — the
inside **filled** (solid) or **left open** (hollow).
- **Hole** (O): press on a face, drag out the size (or type it in mm): round (any number of
sides, screw sizes M2-M8 ready), rectangle (width and height), triangle, or hexagon (nut sizes
M2-M8 ready, with a little room added for prints), turned as you like. All the way through, a
pocket of a set depth, or **only the outline**: cut into the face as a new face, picked, ready
to Extrude, Bevel or paint. Round edges then rounds its rim too.
- **Paint tab**: paint straight on the model (brush, eraser, fill, pick colour) or on its flat
picture beside it; the surface is laid out flat by itself. **Paste a picture** (Ctrl+V, copied
in GIMP or anywhere) or add one from a file, then drag its four corners to stretch and bend it
into place — you see it on the model as you go — and Enter places it. Pictures save beside the
.fry and go with the glTF export.
- **Pictures as layers**: a pasted picture goes onto the model as a **sticker** — drag it round
the model and over a corner or edge it bends onto the next face like a real one; its corners
size it (Shift stretches), the round handle turns it. Or put it on the flat picture and drag its
corners. **Enter locks** it as a layer (listed in Properties: hide, reorder, delete, paint in for
good); **clicking it in the Picture panel unlocks it** to move it again.
- **Files**: `.fry` is Fry3DX's own file — one file with the pictures and layers inside, packed
small (pictures as colour planes of predicted differences, then zstd). Old text `.fry` files
still open. **Autosave** (File > Autosave, every 2 minutes by default) keeps a highly packed
copy in the background; after a crash it offers it back. Closing, New or Open with changes asks:
**Save / Don't save / Cancel**.
- **Print tab** (Ctrl+5): your printer's plate drawn in the view (Prusa, Bambu, Creality,
Elegoo, Anycubic, or your own size), the size in millimetres (type one in: it keeps its shape),
fits or not, checks (holes, faces inside out, edges with more than two faces, faces with no
size) with buttons that fix them, overhangs shown red, weight and filament from the material
and infill, Measure (M), Lay flat on a face (L), Put on the bed (B), save 3MF / STL.
- **Object menu**: **add objects together, take one out of another, or keep only where they
overlap** (the last picked is kept; Ctrl+Shift+ / Ctrl+Shift-), always closed and printable;
**make copies** in a row or round in a circle (as objects or joined into one); **make it
thick** (a surface gets a back, a closed shape goes hollow); join flat faces side by side.
- **Layers panel**: **folders** (+ Folder, or Ctrl+G groups the picked ones; folders inside
folders; drag things onto them; a folder's eye and lock work on all in it; click it to pick all
of it), a **go-to button** at the end of every row bringing the camera to it, right-click for
rename, duplicate, show only this, move to a folder, delete.
- **Export** (Ctrl+E): GLB, glTF, **FBX** (Blender, Unity, Unreal, Maya; pictures inside), OBJ (+MTL), 3MF, STL (millimetres, for printing), PLY; painted
pictures and their layers go with it.
the sun (round, up, strength, colour), sky or a plain background, ground,
brightness, soft shadows, shade in corners, glow, colour; Save a picture (F12) saves just the
view, without panels or gizmos.
- **Toolbox like GIMP's**: picture buttons (hover for name and key), and *Tool options* under it.
- **Solid view** for modelling (plain grey room, studio light) and **Rendered** (real sky,
sun and shadows) — Z switches; Shift+Z wireframe; Alt+Z X-ray.
- **Shapes with settings you can change after adding** (+ in the toolbox, or Add): cube, rounded
cube, plane, circle, cylinder, tube, cone, pyramid, sphere, capsule, torus, wedge, stairs, arch;
**starter models**: table, chair, shelf, barrel, bottle, pillar, door frame, crate.
- **Draw shape** (D): click an outline on the ground, a side view's plane, or **straight on any
face of another object** → a new solid standing on it, added to it (raised), or cut into it.
- Move / Rotate / Scale (W/E/R): gizmos turn with the object (or the world's way, or — editing a
shape — out of the faces). Scale has a handle on each side; by default the other side stays put
(or the middle, the bottom, the origin); Shift scales both sides at once. Ctrl snaps.
- **Round, smooth, mirror** on any object, changeable any time: round every sharp edge, smooth it
out like clay (keeping sharp edges if you want), mirror across X/Y/Z. Bake them when you like.
- **Shape editing** (Tab or double-click): points / edges / faces (1/2/3); extrude (X), inset (I),
round edges (B), loop cut (C), cut in four, smooth, merge (M), make face, flip, separate (P).
- **Selecting**: click, box, brush or lasso; Shift+click (or Alt+click, double-click) a whole loop,
Shift+Ctrl+click an edge for the ring across it, Ctrl+click adds or takes one; more/less,
joined (L), invert, all/none.
- Join objects (Ctrl+J), reference pictures to trace over, layers (show, lock, rename).
- Undo / redo, `.fry` files, **export to glTF** (Ctrl+E), save a picture of the view (F12).
- F1 lists every key. If it ever crashes, its own crash screen offers to open it again, with the
last autosave offered back.
## Coming
Sculpting, materials (metal/rough shown in the view), scripting; animation later.
## Layout
- `engine/` — Fry3DX's engine: window, Vulkan/OpenGL renderer, UI, files.
- `src/mesh.*`, `src/tools.cpp` — polygon meshes and the edits on them (no window needed; tested).
- `src/shapes.*` — the shape library and starter models.
- `src/icons.*` — the toolbox pictures.
- `branding/` — the logo (SVG, and PNGs made from it with Inkscape).
- `src/scene.*` — objects, folders, `.fry` text; `src/package.cpp` the packed `.fry`.
- `src/export.cpp` — GLB/glTF/FBX/OBJ/3MF/STL/PLY; `src/print.cpp` — print checks.
- `src/boolean.cpp`, `src/modify.cpp` — combining shapes, thickness, joining flat faces.
- `docs/` — the website (GitHub Pages). Its text is all in `docs/content.js`.
- `src/app.cpp` — the app.