forked from 1b-agent/fieldcraft-upstream
* Native file pickers, background opening, drag and drop and recent files Open (models, SolidCraft designs and tagged meshes in one picker), Save, Save As, Write Deck and Recover go through the host's file pickers (rfd in the desktop app, injected as Services so the UI crate stays portable and tests answer them). Files open on a copy of the session in a worker thread and replace it only on success; files dropped on the window or named on the command line open the same way. A recent-files list, an unsaved-changes prompt, Cmd/Ctrl+O/S/Shift+S. Programmatic calls never open a picker: ui.start opens the form. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm * Samples and one-click Solve: results reachable from the window file.sample {name} opens a ready-to-run sample (the two parts, the cantilever with static and frequency steps, the bar impact) in place of the model; solve.run solves every step in order. Help > Samples, the empty viewport's start screen and the Tools > Samples entry open them (asking first over unsaved changes); Solve runs in the background like a file opening and the Results tab comes up. --sample [parts|cantilever|impact] on the command line. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm * The Craft-family shell: title bar, workspace ribbon, browser, context panel, timeline The window now follows SolidCraft's and VectorCraft's layout and themes: - title bar with the mark, quick actions (File menu, save, undo, redo, Solve, search, theme, help), the model's document tab and the version; integrated under the macOS traffic lights, own caption buttons and resize zones elsewhere (titlebar.rs); - workspaces (Prepare, Model, Analysis, Results) with their tabs, and panels of icon buttons whose labelled drop-downs list the whole catalogue, coming-soon entries greyed with their milestone; panels collapse, then go into a » menu, when narrow; - the browser: geometry and mesh with eye toggles, definitions with counts, results; - no permanent Commands list: command search (S, Cmd/Ctrl+K) and a command line; - the context panel on the right only with context: the command form, results controls, the selected definition's properties with Edit and Delete; - navigation bar and orientation gizmo in the viewport; the journal timeline at the bottom with undo positions; - SolidCraft's light and dark tokens; craft-ui (IconButton, Tab, WidgetPalette). Menus and the search are view state (ui.set {menu, palette}), so captures show them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm * Shell polish, docs and licences Menus painted as the family's (flat File menu with recent files, decks and samples), the legend sized to its text, two-line panel labels inside the ribbon, glyphs the UI font has, offscreen captures without fade-in, ui.start runs in-window file actions (samples, recover, solve) but never a native picker, ui.select. Control protocol, architecture, ROADMAP, AGENTS and ATTRIBUTION updated; THIRD-PARTY-LICENSES.txt with craft-ui and rfd. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm * Title bar mark from the application icon; fluid steps and domains in the shell The title bar draws the app icon's bracket (assets/app-icon/icon-small.svg's faces) as SolidCraft draws its mark; the window keeps its title-bar flags after the rebase. solve.run solves fluid steps too (solve.fluid); the browser lists fluid domains. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm * Simplify: cached per-frame data, one command per timeline roll, workspace setters - Icon textures are kept per pixel size (the shell draws several sizes a frame; the cache used to clear on every size change and rasterise again). - Opening a model or recovering one starts from an empty session instead of copying the current one; the replaced session is freed off the window thread. - Element counts, timeline items, search results and the selected definition's properties are cached until what they show changes; timeline tooltips are built on hover; long lists in properties are summarised. - edit.undo and edit.redo take a count: a timeline click is one command. - solve.run dispatches on the step's procedure (no string round trip) and reports its name. - The workspace and tab change together through UiState::select_tab/select_workspace (ui.set {workspace} alone now sticks); no per-frame syncing. - One busy guard, Kind::verbs, a fit flag for background jobs, ModelApp::home_view, the title bar's actions as an enum, dead code removed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm * Title bar: Solve and tools at the right end; no traffic-light inset in full screen The owner's feedback on the title bar: Solve, search, theme and help sit at its right end before the version; on macOS the left group (mark, name, quick actions) moves into the traffic lights' room in full screen, where there are none, and back when leaving it. The layout is a pure function (bar_layout) tested for both states, narrow windows and custom caption buttons. ui.fullscreen {on} for agents. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm * Caps labels in Inter SemiBold egui has no bold weight of its default font, so the ribbon's tabs and panel labels, the workspace switcher and its menu, menu headings, the browser header, the context panel's headers and the Solve label were thin, especially in the light theme. They now use a label font family: Inter SemiBold 4.1 (SIL OFL 1.1, unmodified, fonts/OFL.txt, ATTRIBUTION.md), with egui's fonts as fallback, installed with the theme on the live and offscreen contexts. theme::label_font falls back to the default font until the family is bound (fonts take effect from the next pass), so nothing can panic. Panels widen to their label's longest word. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm * docs: regenerate features.md after rebase Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm --------- Co-authored-by: jyviko <2501648+jyviko@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
162 lines
12 KiB
Markdown
162 lines
12 KiB
Markdown
# Features
|
||
|
||
Generated from the capability catalogue (`crates/engine/src/catalogue.rs`) by
|
||
`cargo run -p modelcraft-cli -- features > docs/features.md`; a test fails when it is out of date.
|
||
Every entry is a toolbar button. **Ready** entries run their command; **coming soon** entries are
|
||
shown greyed with the roadmap milestone that brings them (ROADMAP.md).
|
||
|
||
52 ready, 51 coming soon.
|
||
|
||
## Geometry
|
||
|
||
| Panel | Capability | Status | Command |
|
||
|---|---|---|---|
|
||
| Import | Open Design — Open a SolidCraft design: its bodies with persistent face names | ready | `geometry.open` |
|
||
| Import | Tagged Mesh — Read a face-tagged surface mesh (3MF) | ready | `geometry.import.mesh` |
|
||
| Inspect | Bodies — List the open design's bodies, volumes and named faces | ready | `geometry.bodies` |
|
||
| Inspect | Tessellate — Tessellate a body into a face-tagged boundary surface | ready | `geometry.tessellate` |
|
||
| Inspect | Check Surface — Weld, closed, manifold, orientation and self-intersection checks; feature edges | ready | `mesh.surface.check` |
|
||
| Prepare | Partition — Split bodies and faces as SolidCraft features | coming soon (M5) | |
|
||
| Prepare | Datum Plane — Construction planes for partitions | coming soon (M5) | |
|
||
| Prepare | Midsurface — Extract midsurfaces of thin parts for shell meshes | coming soon (M8) | |
|
||
|
||
## Mesh
|
||
|
||
| Panel | Capability | Status | Command |
|
||
|---|---|---|---|
|
||
| Size | Global Size — One element size for the whole part | coming soon (M2) | |
|
||
| Size | Seed Edges — Element counts, sizes and bias per edge and face | coming soon (M2) | |
|
||
| Size | Curvature — Refine by curvature and proximity | coming soon (M2) | |
|
||
| Tet | Tet Mesh — Constrained Delaunay tet mesh of a body: every boundary triangle kept, faces tagged (refinement comes next) | ready | `mesh.tet.generate` |
|
||
| Tet | Quadratic — Second-order elements with mid-side nodes on the geometry | coming soon (M2) | |
|
||
| Tet | Delaunay Points — Delaunay tetrahedralization of a point list (debugging aid) | ready | `mesh.delaunay.points` |
|
||
| 2D | 2D Mesh — Quad or triangle mesh of a planar face or polygon in the XY plane for plane stress, plane strain and axisymmetric models; edges tagged | ready | `mesh.planar` |
|
||
| Structured Hex | Quad Faces — All-quad meshes of faces on shared edge nodes | coming soon (M5) | |
|
||
| Structured Hex | Mapped Hex — Mapped hex mesh of six-sided regions | coming soon (M5) | |
|
||
| Structured Hex | Sweep Hex — Hex mesh swept along extrusions and revolutions | coming soon (M5) | |
|
||
| Structured Hex | Decompose — Find sweepable and mappable regions and propose the splits | coming soon (M5) | |
|
||
| Structured Hex | Transition — Conforming tet–hex interfaces with pyramids | coming soon (M5) | |
|
||
| Automatic Hex | All-Hex — Octree dual all-hex mesh of any part | coming soon (M6) | |
|
||
| Automatic Hex | Hex-Dominant — Hex-dominant mesh by recombining tets | coming soon (M6) | |
|
||
| Automatic Hex | Polycube — Polycube hex mesh of blocky parts | coming soon (M6) | |
|
||
| Improve | Smooth — Smooth node positions, keeping every element valid | coming soon (M6) | |
|
||
| Improve | Untangle — Repair inverted elements | coming soon (M6) | |
|
||
| Improve | Layers — Boundary padding and layers through thin walls | coming soon (M6) | |
|
||
| Edit | Node — Add a node | ready | `mesh.node.add`, `mesh.node.remove` |
|
||
| Edit | Element — Add an element on existing nodes, or a mapped block of them | ready | `mesh.element.add`, `mesh.element.remove`, `mesh.block` |
|
||
| Edit | Merge Nodes — Merge coincident nodes | coming soon (M6) | |
|
||
| Edit | Remesh Region — Remesh a region in place; split and collapse elements | coming soon (M6) | |
|
||
| Edit | Orphan Mesh — Import a mesh without geometry | coming soon (M6) | |
|
||
| Verify | Quality — Quality metrics and the certified validity check, failing elements listed | ready | `mesh.quality` |
|
||
| Verify | Verify Set — Quality and validity per set | coming soon (M2) | |
|
||
| Verify | Tag Geometry — Tag elements, faces, edges and nodes with the geometry they mesh | ready | `mesh.tag`, `mesh.tag.clear` |
|
||
|
||
## Properties
|
||
|
||
| Panel | Capability | Status | Command |
|
||
|---|---|---|---|
|
||
| Materials | Material — Elastic (isotropic, orthotropic) material with density | ready | `model.material.create`, `model.material.edit`, `model.material.delete` |
|
||
| Materials | Plasticity — Von Mises plasticity: bilinear, hardening table or Johnson–Cook | ready | `model.material.plasticity` |
|
||
| Materials | Hyperelastic — Hyperelastic material models | coming soon (M8) | |
|
||
| Materials | Damage — Johnson–Cook damage and element erosion | ready | `model.material.damage` |
|
||
| Materials | Thermal — Conductivity, specific heat and expansion | coming soon (M8) | |
|
||
| Materials | Equation of State — Polynomial, ideal gas, Mie–Grüneisen, JWL and tabulated equations of state | coming soon (M11) | |
|
||
| Sections | Section — Solid, shell, beam, rod or 2D (plane stress, plane strain, axisymmetric) section assigned to a set, with its element formulation | ready | `model.section.create`, `model.section.edit`, `model.section.delete` |
|
||
| Sections | Composite — Composite layups and continuum shells | coming soon (M8) | |
|
||
| Sections | Orientation — Material orientations | coming soon (M8) | |
|
||
| Sets | Set — A set of nodes, elements and faces, or of named geometry that survives remeshing | ready | `model.set.create`, `model.set.edit`, `model.set.delete`, `model.set.resolve` |
|
||
| Model | Units — The model's unit system (never converted) | ready | `model.units` |
|
||
|
||
## Assembly
|
||
|
||
| Panel | Capability | Status | Command |
|
||
|---|---|---|---|
|
||
| Instances | Instances — Part instances placed from SolidCraft occurrences | coming soon (M7) | |
|
||
|
||
## Steps
|
||
|
||
| Panel | Capability | Status | Command |
|
||
|---|---|---|---|
|
||
| Steps | Step — A linear static or frequency step with its output | ready | `model.step.create`, `model.step.edit`, `model.step.delete` |
|
||
| Steps | Activate — Choose which loads and boundary conditions act in a step | ready | `model.step.activate` |
|
||
| Steps | Step Table — The step by load and boundary condition table | ready | `model.activity` |
|
||
| Procedures | Amplitude — Time and frequency amplitudes | coming soon (M7) | |
|
||
| Procedures | Nonlinear — Nonlinear static steps | coming soon (M7) | |
|
||
| Procedures | Explicit — Explicit dynamic steps | coming soon (M8) | |
|
||
| Procedures | Heat Transfer — Heat transfer steps | coming soon (M8) | |
|
||
|
||
## Loads & BCs
|
||
|
||
| Panel | Capability | Status | Command |
|
||
|---|---|---|---|
|
||
| Boundary Conditions | Boundary Condition — Fixed, displacement or symmetry condition on a set or reference point | ready | `model.boundary_condition.create`, `model.boundary_condition.edit`, `model.boundary_condition.delete` |
|
||
| Loads | Load — Force, moment, pressure, traction, gravity or body force | ready | `model.load.create`, `model.load.edit`, `model.load.delete` |
|
||
| Flow | Fluid Domain — The box of fluid cells, its fluid, and the obstacle bodies voxelised from their face-tagged surfaces | ready | `model.fluid_domain.create`, `model.fluid_domain.edit`, `model.fluid_domain.delete` |
|
||
| Flow | Inlet & Outlet — Velocity inlets, pressure outlets, walls, moving and slip walls, periodic faces | ready | `model.fluid_domain.boundary` |
|
||
|
||
## Interactions
|
||
|
||
| Panel | Capability | Status | Command |
|
||
|---|---|---|---|
|
||
| Constraints | Reference Point — A reference point for couplings, loads and boundary conditions | ready | `model.reference_point.create`, `model.reference_point.edit`, `model.reference_point.delete` |
|
||
| Constraints | Coupling — Kinematic or distributing coupling of a set to a reference point | ready | `model.coupling.create`, `model.coupling.edit`, `model.coupling.delete` |
|
||
| Constraints | Tie — Tie non-matching meshes together | coming soon (M7) | |
|
||
| Contact | General Contact — Contact between everything that touches, with friction | coming soon (M7) | |
|
||
| Contact | Contact Pair — Contact between two surfaces | coming soon (M7) | |
|
||
| Contact | Find Contacts — Detect contact pairs automatically | coming soon (M7) | |
|
||
| Contact | Rigid Wall — Rigid walls for explicit dynamics | coming soon (M10) | |
|
||
| Connectors | Bolt Load — Bolt pretension | coming soon (M7) | |
|
||
| Connectors | Spring — Spring or dashpot to the ground or between two points, along a direction or their line | ready | `model.spring.create`, `model.spring.edit`, `model.spring.delete` |
|
||
| Connectors | Point Mass — Point mass and rotary inertia at nodes or a reference point | ready | `model.mass.create`, `model.mass.edit`, `model.mass.delete` |
|
||
| Connectors | Connector — Connector elements between points | coming soon (M7) | |
|
||
| Coupled | FSI Interface — The fluid–structure interface | coming soon (M13) | |
|
||
|
||
## Solve
|
||
|
||
| Panel | Capability | Status | Command |
|
||
|---|---|---|---|
|
||
| Run | Solve — Solve every step in order and show the results | ready | `solve.run` |
|
||
| Check | Check Model — Name every missing or bad definition before writing or solving | ready | `model.check` |
|
||
| Decks | Abaqus Input — Write an Abaqus input file (.inp) | ready | `deck.write {"format":"abaqus"}` |
|
||
| Decks | Nastran Deck — Write Nastran bulk data (SOL 101, 103) | ready | `deck.write {"format":"nastran"}` |
|
||
| Decks | LS-DYNA Deck — Write an LS-DYNA keyword file | ready | `deck.write {"format":"lsdyna"}` |
|
||
| Decks | Read Deck — Read a deck, keeping keywords ModelCraft does not know | coming soon (M9) | |
|
||
| Implicit | Static — Linear static solve of a step with ModelCraft's own solver | ready | `solve.static` |
|
||
| Implicit | Frequency — Natural frequencies and mode shapes of a frequency step | ready | `solve.frequency` |
|
||
| Explicit | Explicit — Transient dynamics of an explicit step by central differences (contact and erosion coming in M10) | ready | `solve.explicit` |
|
||
| Explicit | Blast & Impact — EOS-driven fluids with fluid–structure contact (ALE or SPH) | coming soon (M14) | |
|
||
| Fluids | Lattice Boltzmann — Lattice Boltzmann flow of a fluid step on the CPU, with wall forces | ready | `solve.fluid` |
|
||
| Fluids | Fluid–Structure — Coupled fluid and structure solve | coming soon (M13) | |
|
||
|
||
## Results
|
||
|
||
| Panel | Capability | Status | Command |
|
||
|---|---|---|---|
|
||
| Display | Deformed — The deformed shape of a solved step, to scale | ready | `results.deformed`, `results.clear` |
|
||
| Display | Contours — Contours of displacement and stress, with a legend | ready | `results.contour` |
|
||
| Display | Mode Shapes — Mode shapes and frequencies of a frequency step | ready | `results.modes` |
|
||
| Display | Animate — Animate the deformed shape, a mode or an explicit step's frames | ready | `results.animate`, `results.frame` |
|
||
| Query | Probe — Displacement, rotation, reaction and stress at nodes, element section forces, a mode shape, or an explicit field frame (or click the model) | ready | `solve.probe`, `solve.history` |
|
||
| Query | Reactions — Reaction force and moment sums per set | ready | `results.reactions` |
|
||
| Query | Free Body — Free-body forces across a cut | coming soon (M9) | |
|
||
| Plots | XY Plot — Plot a quantity against time or another | coming soon (M9) | |
|
||
| Plots | Path Plot — Plot a quantity along a path | coming soon (M9) | |
|
||
| Plots | Cut — Section cuts through the model | coming soon (M9) | |
|
||
| Plots | Display Group — Show and hide parts of the model | coming soon (M9) | |
|
||
| Plots | Streamlines — Streamlines and flow fields | coming soon (M12) | |
|
||
| Files | Read Results — Read results in public formats | coming soon (M9) | |
|
||
| Files | Convergence — Mesh convergence studies | coming soon (M9) | |
|
||
|
||
## Tools
|
||
|
||
| Panel | Capability | Status | Command |
|
||
|---|---|---|---|
|
||
| Model | Model Info — Node and element counts and the model summary | ready | `model.info` |
|
||
| File | Open Model — Open a .modelcraft model | ready | `file.open` |
|
||
| File | Samples — Open a sample model, ready to solve | ready | `file.sample` |
|
||
| File | Save — Save the model to its .modelcraft file | ready | `file.save` |
|
||
| File | Save As — Save the model to a new .modelcraft file | ready | `file.save_as` |
|
||
| File | Recover — Open a model autosaved by an app that crashed or closed with unsaved changes | ready | `file.recover`, `file.recovery.list`, `file.recovery.discard` |
|
||
| History | Undo — Undo the last command that changed the model | ready | `edit.undo` |
|
||
| History | Redo — Redo the command undone last | ready | `edit.redo` |
|