mirror of
https://github.com/Nexoniarz/Fry3DX.git
synced 2026-11-03 04:24:26 +00:00
README and site: plug-ins, scripts kept in the .fry, your own materials, soft selection, bridge and push
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
3f23371eac
commit
707e0b62e5
3 changed files with 38 additions and 10 deletions
36
README.md
36
README.md
|
|
@ -49,11 +49,15 @@ Five tabs along the top: **Model**, **Paint**, **Layout**, **Render**, **Print**
|
||||||
where it is; Shift scales both sides at once. Ctrl snaps.
|
where it is; Shift scales both sides at once. Ctrl snaps.
|
||||||
- **Round, smooth, mirror** any object, changeable any time, baked in when you like.
|
- **Round, smooth, mirror** any object, changeable any time, baked in when you like.
|
||||||
- **Materials**: gold, chrome, steel, wood, ceramic, rubber and more, or how metal and rough it
|
- **Materials**: gold, chrome, steel, wood, ceramic, rubber and more, or how metal and rough it
|
||||||
is; shown in the view (Solid too), exported with it.
|
is; shown in the view (Solid too), exported with it. **Your own**: "Save its look as a
|
||||||
|
material" in the picker keeps one for every file.
|
||||||
|
|
||||||
**Editing the shape** (Tab, or double-click)
|
**Editing the shape** (Tab, or double-click)
|
||||||
- Points, edges, faces (1, 2, 3). Extrude (X), inset (I), round edges (B), loop cut (C), knife (K),
|
- Points, edges, faces (1, 2, 3). Extrude (X), inset (I), round edges (B), loop cut (C), knife (K),
|
||||||
cut in four, smooth, merge (M), make a face, flip, separate (P).
|
cut in four, smooth, merge (M), make a face, flip, separate (P), smooth points, push out /
|
||||||
|
pull in along the surface (Alt+S), **bridge** two faces with a tunnel.
|
||||||
|
- **Soft selection** (Shift+O): points near what you move follow it, less the further they are;
|
||||||
|
the wheel while dragging sets how far (Blender's proportional editing, Maya's soft select).
|
||||||
- **Hole** (O): round (M2–M8 screw sizes ready), rectangle, triangle or hexagon (M2–M8 nut
|
- **Hole** (O): round (M2–M8 screw sizes ready), rectangle, triangle or hexagon (M2–M8 nut
|
||||||
sizes, with room for prints); all the way through, a pocket, or only its outline as a new face.
|
sizes, with room for prints); all the way through, a pocket, or only its outline as a new face.
|
||||||
- **Selecting**: click, box, brush or lasso. Shift+click a whole loop, Shift+Ctrl+click an
|
- **Selecting**: click, box, brush or lasso. Shift+click a whole loop, Shift+Ctrl+click an
|
||||||
|
|
@ -65,7 +69,8 @@ Five tabs along the top: **Model**, **Paint**, **Layout**, **Render**, **Print**
|
||||||
- **Copies** in a row or round a circle; **make it thick** (a surface gets a back, a solid goes
|
- **Copies** in a row or round a circle; **make it thick** (a surface gets a back, a solid goes
|
||||||
hollow); join objects; join flat faces.
|
hollow); join objects; join flat faces.
|
||||||
- **Layers** with folders inside folders, drag and drop, hide and lock whole groups, and a button
|
- **Layers** with folders inside folders, drag and drop, hide and lock whole groups, and a button
|
||||||
on every row that brings the camera to it.
|
on every row that brings the camera to it. **Show only the selected** (/ or Shift+H; again:
|
||||||
|
everything).
|
||||||
|
|
||||||
**Sculpting** (the Paint tab's other side: Tab)
|
**Sculpting** (the Paint tab's other side: Tab)
|
||||||
- Raise, puff out, smooth, flatten, pinch and grab the surface (1 to 6); Ctrl goes the other way,
|
- Raise, puff out, smooth, flatten, pinch and grab the surface (1 to 6); Ctrl goes the other way,
|
||||||
|
|
@ -90,9 +95,28 @@ Five tabs along the top: **Model**, **Paint**, **Layout**, **Render**, **Print**
|
||||||
|
|
||||||
**Scripts** (the Script panel, F5)
|
**Scripts** (the Script panel, F5)
|
||||||
- Lua with a `fry` library: add shapes and change their settings, combine them, move points by a
|
- Lua with a `fry` library: add shapes and change their settings, combine them, move points by a
|
||||||
formula, sculpt, set the materials and the sun. One Ctrl+Z takes back all a script did; an error
|
formula, sculpt, set the materials and the sun, make your own materials (`fry.material{}`).
|
||||||
takes it back itself. Examples in Script > Examples; the **?** button lists every function.
|
One Ctrl+Z takes back all a script did; an error takes it back itself. Examples in
|
||||||
It can't reach anything outside the scene (no files, no programs).
|
Script > Examples; the **?** button lists every function. It can't reach anything outside the
|
||||||
|
scene (no files, no programs).
|
||||||
|
- **Kept in the file**: the Script panel lists the `.fry`'s scripts (new, examples, open,
|
||||||
|
duplicate, rename, remove); they're saved with the model.
|
||||||
|
|
||||||
|
**Plug-ins** (Script > Plug-ins)
|
||||||
|
- Scripts that stay loaded: put a `.lua` in the plug-ins folder and it can add **commands to the
|
||||||
|
Add, Object or Script menu** (`fry.command{name, menu, settings, run}`; the settings are asked
|
||||||
|
for in a small form first) and **materials** to the picker. Turn each on or off in the Plug-ins
|
||||||
|
window. Three come with it: stairs (straight and spiral), scatter copies, and more materials.
|
||||||
|
|
||||||
|
```lua
|
||||||
|
fry.plugin{name = "Shelves", about = "A bookcase from the Add menu"}
|
||||||
|
fry.command{name = "Bookcase", menu = "add", settings = {{"shelves", 5}, {"width", 0.8}},
|
||||||
|
run = function(s)
|
||||||
|
for i = 0, s.shelves - 1 do
|
||||||
|
fry.add("cube", {width = s.width, depth = 0.3, height = 0.02}).position = {0, 0, i * 0.35}
|
||||||
|
end
|
||||||
|
end}
|
||||||
|
```
|
||||||
|
|
||||||
**The look**: light or dark, or following the desktop (View > Appearance), in
|
**The look**: light or dark, or following the desktop (View > Appearance), in
|
||||||
[Niveus](https://github.com/Nexoniarz/niveus): keys that look like keys, fields set into the panel.
|
[Niveus](https://github.com/Nexoniarz/niveus): keys that look like keys, fields set into the panel.
|
||||||
|
|
|
||||||
|
|
@ -30,18 +30,19 @@ window.FRY = {
|
||||||
{ group: "make", icon: "cube", title: "Shapes that stay editable", text: "Cube, cylinder, sphere, torus, stairs, arch and more, plus starter models like a table, chair or barrel. Change their sizes any time in Properties." },
|
{ group: "make", icon: "cube", title: "Shapes that stay editable", text: "Cube, cylinder, sphere, torus, stairs, arch and more, plus starter models like a table, chair or barrel. Change their sizes any time in Properties." },
|
||||||
{ group: "make", icon: "pen", title: "Draw a shape anywhere", text: "Click an outline on the ground or straight on the face of another object: it becomes a new part, gets added to it, or cuts into it." },
|
{ group: "make", icon: "pen", title: "Draw a shape anywhere", text: "Click an outline on the ground or straight on the face of another object: it becomes a new part, gets added to it, or cuts into it." },
|
||||||
{ group: "make", icon: "combine", title: "Add, subtract, overlap", text: "Combine objects: add them together, take one out of another, or keep only where they overlap. The result is always closed and ready to print." },
|
{ group: "make", icon: "combine", title: "Add, subtract, overlap", text: "Combine objects: add them together, take one out of another, or keep only where they overlap. The result is always closed and ready to print." },
|
||||||
{ group: "make", icon: "points", title: "Real shape editing", text: "Points, edges and faces. Extrude, inset, round edges, loop cut, knife, merge. Shift+click picks a whole loop, Shift+Ctrl+click a ring." },
|
{ group: "make", icon: "points", title: "Real shape editing", text: "Points, edges and faces. Extrude, inset, round edges, loop cut, knife, bridge, push and pull. Soft selection as in Blender and Maya: near points follow (Shift+O)." },
|
||||||
{ group: "make", icon: "hole", title: "Holes for screws and nuts", text: "Round, rectangle, triangle or hexagon. M2 to M8 screw and nut sizes ready, with a little room added so the print actually fits." },
|
{ group: "make", icon: "hole", title: "Holes for screws and nuts", text: "Round, rectangle, triangle or hexagon. M2 to M8 screw and nut sizes ready, with a little room added so the print actually fits." },
|
||||||
{ group: "make", icon: "copies", title: "Copies and thickness", text: "Copies in a row or round in a circle. Make a surface thick, or a solid hollow with walls exactly as thick as you need." },
|
{ group: "make", icon: "copies", title: "Copies and thickness", text: "Copies in a row or round in a circle. Make a surface thick, or a solid hollow with walls exactly as thick as you need." },
|
||||||
{ group: "paint", icon: "sculpt", title: "Sculpt it like clay", text: "Raise, puff out, smooth, flatten, pinch and grab the surface with a brush, the same on both sides if you like. A shape with too few points is made finer first, keeping its shape." },
|
{ group: "paint", icon: "sculpt", title: "Sculpt it like clay", text: "Raise, puff out, smooth, flatten, pinch and grab the surface with a brush, the same on both sides if you like. A shape with too few points is made finer first, keeping its shape." },
|
||||||
{ group: "print", icon: "sphere", title: "Materials you can see", text: "Gold, chrome, brushed steel, wood, ceramic, rubber and more, or set how metal and rough it is yourself. Shown in the view, not only in the render, and exported with it." },
|
{ group: "print", icon: "sphere", title: "Materials you can see", text: "Gold, chrome, brushed steel, wood, ceramic, rubber and more, or set how metal and rough it is yourself; save a look as your own material for every file. Shown in the view, and exported with it." },
|
||||||
{ group: "paint", icon: "brush", title: "Paint and stickers", text: "Paint on the model or on its flat picture. Paste any picture (Ctrl+V) and it goes on like a sticker that bends over edges and corners." },
|
{ group: "paint", icon: "brush", title: "Paint and stickers", text: "Paint on the model or on its flat picture. Paste any picture (Ctrl+V) and it goes on like a sticker that bends over edges and corners." },
|
||||||
{ group: "paint", icon: "layout", title: "Layout tab", text: "Move, turn and size the flat frames of the surface by hand. The paint follows, so the model looks the same." },
|
{ group: "paint", icon: "layout", title: "Layout tab", text: "Move, turn and size the flat frames of the surface by hand. The paint follows, so the model looks the same." },
|
||||||
{ group: "print", icon: "print", title: "Made for 3D printing", text: "Your printer's plate in the view, sizes in millimetres, checks for holes and flipped faces with fix buttons, overhangs shown red, weight and filament." },
|
{ group: "print", icon: "print", title: "Made for 3D printing", text: "Your printer's plate in the view, sizes in millimetres, checks for holes and flipped faces with fix buttons, overhangs shown red, weight and filament." },
|
||||||
{ group: "print", icon: "sun", title: "See it rendered", text: "Solid view for modelling, a real renderer with sky, sun and soft shadows when you want to see it properly. Save a picture with F12." },
|
{ group: "print", icon: "sun", title: "See it rendered", text: "Solid view for modelling, a real renderer with sky, sun and soft shadows when you want to see it properly. Save a picture with F12." },
|
||||||
{ group: "work", icon: "folder", title: "Folders and groups", text: "Layers with folders inside folders, drag and drop, show/hide and lock whole groups, and a button on every row that brings the camera to it." },
|
{ group: "work", icon: "folder", title: "Folders and groups", text: "Layers with folders inside folders, drag and drop, show/hide and lock whole groups, and a button on every row that brings the camera to it." },
|
||||||
{ group: "work", icon: "phone", title: "On your phone too", text: "Not a viewer: the whole modeller. Big buttons, one finger turns the view, two move and pinch to zoom, holding still is a right-click. Files through the phone's own picker." },
|
{ group: "work", icon: "phone", title: "On your phone too", text: "Not a viewer: the whole modeller. Big buttons, one finger turns the view, two move and pinch to zoom, holding still is a right-click. Files through the phone's own picker." },
|
||||||
{ group: "work", icon: "code", title: "Scripts, if you want them", text: "Lua in a Script panel: build a town in a loop, turn a profile into a vase, move points by a formula. F5 runs it, Ctrl+Z takes it all back." },
|
{ group: "work", icon: "code", title: "Scripts, if you want them", text: "Lua in a Script panel: build a town in a loop, turn a profile into a vase, move points by a formula. Kept in the .fry with the model; F5 runs one, Ctrl+Z takes it all back." },
|
||||||
|
{ group: "work", icon: "plug", title: "Plug-ins", text: "A script in the plug-ins folder stays loaded: it adds commands to the Add, Object or Script menu (with a little form for their settings) and materials to the picker. Stairs, scatter and more materials come with it." },
|
||||||
{ group: "work", icon: "save", title: "Never lose work", text: "Its own packed .fry file, autosave in the background, recovery after a crash, and a Save / Don't save / Cancel when closing." },
|
{ group: "work", icon: "save", title: "Never lose work", text: "Its own packed .fry file, autosave in the background, recovery after a crash, and a Save / Don't save / Cancel when closing." },
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|
@ -68,6 +69,8 @@ window.FRY = {
|
||||||
"If it stops with an error, nothing it did is kept",
|
"If it stops with an error, nothing it did is kept",
|
||||||
"Examples to start from: stairs, a vase, a gear, a town, a box with a lid",
|
"Examples to start from: stairs, a vase, a gear, a town, a box with a lid",
|
||||||
"The ? button lists every function, right next to your script",
|
"The ? button lists every function, right next to your script",
|
||||||
|
"Scripts are saved in the .fry, a list of them per file",
|
||||||
|
"Plug-ins: a script in the plug-ins folder adds its own menu commands and materials",
|
||||||
],
|
],
|
||||||
file: "spiral_stairs.lua",
|
file: "spiral_stairs.lua",
|
||||||
code: `-- Spiral stairs round a pillar: change the numbers, press F5 again.
|
code: `-- Spiral stairs round a pillar: change the numbers, press F5 again.
|
||||||
|
|
@ -121,7 +124,7 @@ fry.frame()`,
|
||||||
},
|
},
|
||||||
|
|
||||||
versions: [
|
versions: [
|
||||||
{ v: "0.6", date: "2026-10-20", items: ["Sculpting, scripts and a Mac app", "Sculpting: raise, puff out, smooth, flatten, pinch and grab", "Materials shown in the view, sixteen to start from", "Scripts: Lua and a Script panel, with examples", "macOS: one app for Apple silicon and Intel", "A new look (Niveus): light and dark, following the desktop", "A new logo", "Drop a file on the window to open it"] },
|
{ v: "0.6", date: "2026-10-20", items: ["Sculpting, scripts and a Mac app", "Sculpting: raise, puff out, smooth, flatten, pinch and grab", "Materials shown in the view, sixteen to start from", "Scripts: Lua and a Script panel, with examples, kept in the .fry", "Plug-ins: menu commands and materials, three to start with", "Your own materials", "Soft selection, bridge, push / pull, smooth points, show only the selected", "macOS: one app for Apple silicon and Intel", "A new look (Niveus): light and dark, following the desktop", "A new logo", "Drop a file on the window to open it"] },
|
||||||
{ v: "0.5", date: "2026-10-19", items: ["Builds for Windows, Linux (AppImage) and Android", "A phone layout: big buttons, finger gestures, the phone's file picker", "Apache License 2.0"] },
|
{ v: "0.5", date: "2026-10-19", items: ["Builds for Windows, Linux (AppImage) and Android", "A phone layout: big buttons, finger gestures, the phone's file picker", "Apache License 2.0"] },
|
||||||
{ v: "0.4", date: "2026-10-19", items: ["Combine objects: add, subtract, overlap", "Draw shapes onto other objects", "Copies in a row or circle, thicken and hollow", "FBX export", "Folders and groups in Layers, go-to buttons", "Shift scales both sides, Shift+click loops and rings", "A crash screen of its own"] },
|
{ v: "0.4", date: "2026-10-19", items: ["Combine objects: add, subtract, overlap", "Draw shapes onto other objects", "Copies in a row or circle, thicken and hollow", "FBX export", "Folders and groups in Layers, go-to buttons", "Shift scales both sides, Shift+click loops and rings", "A crash screen of its own"] },
|
||||||
{ v: "0.3", date: "2026-10-19", items: ["Stickers that bend over edges, picture layers", "Packed .fry files, autosave and recovery", "Layout tab, Print tab, 3MF / STL / OBJ / PLY / GLB export", "Hole tool: hexagon nut pockets, rectangles, outlines"] },
|
{ v: "0.3", date: "2026-10-19", items: ["Stickers that bend over edges, picture layers", "Packed .fry files, autosave and recovery", "Layout tab, Print tab, 3MF / STL / OBJ / PLY / GLB export", "Hole tool: hexagon nut pockets, rectangles, outlines"] },
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@
|
||||||
save: '<path d="M4 12a8 8 0 1 0 2.4-5.7"/><path d="M4 4v4h4M12 8v4l3 2"/>',
|
save: '<path d="M4 12a8 8 0 1 0 2.4-5.7"/><path d="M4 4v4h4M12 8v4l3 2"/>',
|
||||||
code: '<path d="m8 7-5 5 5 5M16 7l5 5-5 5M13.5 4l-3 16"/>',
|
code: '<path d="m8 7-5 5 5 5M16 7l5 5-5 5M13.5 4l-3 16"/>',
|
||||||
sculpt: '<path d="M4 18c3-1 4-6 8-6s5 5 8 6"/><circle cx="12" cy="7" r="3"/>',
|
sculpt: '<path d="M4 18c3-1 4-6 8-6s5 5 8 6"/><circle cx="12" cy="7" r="3"/>',
|
||||||
|
plug: '<path d="M9 3v5M15 3v5M6.5 8h11v3a5.5 5.5 0 0 1-11 0zM12 16.5V21"/>',
|
||||||
sphere: '<circle cx="12" cy="12" r="8.5"/><path d="M3.5 12c2.5 2 14.5 2 17 0"/><circle cx="9" cy="8.5" r="1.5" fill="currentColor" stroke="none"/>',
|
sphere: '<circle cx="12" cy="12" r="8.5"/><path d="M3.5 12c2.5 2 14.5 2 17 0"/><circle cx="9" cy="8.5" r="1.5" fill="currentColor" stroke="none"/>',
|
||||||
};
|
};
|
||||||
const icon = (name) => {
|
const icon = (name) => {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue