Merge branch 'master' of https://github.com/GridSpace/grid-apps into rel-4.5

This commit is contained in:
bakedpotatolord 2025-11-30 15:35:18 -07:00
commit 347dcfb3f9
26 changed files with 183 additions and 78 deletions

View file

@ -2,6 +2,8 @@ name: 'docs-publish'
on:
push:
branches: [ master ]
paths:
- 'docs/**'
workflow_dispatch:

View file

@ -3,6 +3,8 @@ name: Test Electron App Production Build
on:
# Runs on pushes targeting the default branch
push:
paths:
- '!docs/**'
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:

View file

@ -2,7 +2,7 @@ name: 'Docs Fomatting Check'
on:
push:
paths:
- './docs/**'
- 'docs/**'
workflow_dispatch:
jobs:

View file

@ -3,6 +3,8 @@ name: Test NPM Production Build
on:
# Runs on pushes targeting the default branch
push:
paths:
- '!docs/**'
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:

View file

@ -7,7 +7,28 @@ module.exports = {
favicon: 'img/gs-logo.png',
staticDirectories: ['./docs/static/'],
// ...
plugins: [require.resolve('docusaurus-lunr-search')],
plugins: [
require.resolve('docusaurus-lunr-search'),
['@docusaurus/plugin-client-redirects',
{
redirects: [
// /docs/oldDoc -> /docs/newDoc
{
to: '/kiri-moto',
from: '/projects/kiri-moto',
},
// Redirect from multiple old paths to the new path
{
to: '/gridbot',
from: '/projects/gridbot',
},
{
to: '/mesh-tool',
from: '/projects/mesh-tool',
},
],
}],
],
presets: [
[
'@docusaurus/preset-classic',

View file

@ -8,12 +8,12 @@ const config = {
useTabs: false,
bracketSpacing: true,
objectWrap: "preserve",
tabWidth: 4,
semi: false,
singleQuote: true,
tabWidth: 2,
semi: true,
singleQuote: false,
bracketSameLine: true,
arrowParens: "always",
endOfLine: "crlf"
endOfLine: "lf"
}
module.exports = config

View file

@ -0,0 +1,29 @@
---
description: Overview of CAM mode
---
import { ImageCarousel } from "@site/docs/src/components/carousel.js";
# Interface
The CAM interface is, in most respects, the same as the [general interface](/kiri-moto/interface). It is highly recommended to familiarize yourself with the general interface before using the CAM interface.
With that in mind, here are the key differences:
## Operation List
The Operation List defines the order in which operations are
performed on the model. Selecting the **plus** button will open a
popup menu for choosing an operation to add. The operations are
draggable, enabling easy re-ordering.
- An operation can be disabled by **Ctrl+clicking** it. Disabled operations will be skipped in the slice/preview/export process.
- The thin blue bar in the Operation List is also draggable. Moving the bar automatically disables all operations below it. This allows you to slice, preview, and export up to a specific point in the timeline.
<ImageCarousel base="/img/CAM/interface/" images="camInterface" sml />
## Origin Selection
Origin Selection (introduced in v4.3) enables automatically setting an origin to points of interest on the model, including corners and arc centers.
![](/img/CAM/interface/originSelect.png)

View file

@ -39,7 +39,6 @@ Customize how your G-code is formatted for your controller or post-processor:
- **Enable Laser** — Enables [Laser](./ops#laser-operations) operations (typically uses `M3/M5`; adjusts movement strategy)
- **File Extension** — Optional override for exported file type (e.g., `.nc`, `.ngc`, `.cnc`, `.cam`, `.gcode`, `.txt`)
---
## G-code Macros

View file

@ -1,29 +0,0 @@
---
description: A tour of Kiri:Moto's web-based interface
---
# Interface
Kiri:Moto's interface is designed for maximum access to the workspace and to present only the options that are necessary and relevant to the current action.
The left menus control workspace, work mode, and objects while.
The right menus control the behavior and settings for slicing, path routing, and path to code exports.
[OBJ](https://www.cs.cmu.edu/~mbz/personal/graphics/obj.html), [STL](<https://en.wikipedia.org/wiki/STL_(file_format)>), and [3MF](https://docs.fileformat.com/3d/3mf/) files import natively. [SVG](https://en.wikipedia.org/wiki/Scalable_Vector_Graphics), [JPG](https://en.wikipedia.org/wiki/JPEG_File_Interchange_Format), and [PNG](https://en.wikipedia.org/wiki/Portable_Network_Graphics) are auto-extruded into a 3D parts.
![A minimalist approach](/img/kiri-moto.png)
In CNC mode, there is an additional storyboard menu at the bottom where you can plan and re-order milling operations.
![](/img/kiri-moto-cnc.png)
The Setup menu offers access to Device selection and customization.&#x20;
![Device Dialog](/img/device-dialog.png)
Application preferences are mode-dependent. For example, CNC preferences show animation controls.
![CNC Mode Preferences](/img/preferences-cam.png)
![FDM Mode Preferences](/img/preferences-fdm.png)

View file

@ -0,0 +1,54 @@
---
description: A tour of Kiri:Moto's web-based interface
---
import { ImageCarousel } from "@site/docs/src/components/carousel.js";
# Interface
Kiri:Moto's interface is designed for maximum access to the workspace, showing only the options necessary and relevant to the current action.
[OBJ](https://www.cs.cmu.edu/~mbz/personal/graphics/obj.html), [STL](<https://en.wikipedia.org/wiki/STL_(file_format)>), and [3MF](https://docs.fileformat.com/3d/3mf/) files import natively. [SVG](https://en.wikipedia.org/wiki/Scalable_Vector_Graphics), [JPG](https://en.wikipedia.org/wiki/JPEG_File_Interchange_Format), and [PNG](https://en.wikipedia.org/wiki/Portable_Network_Graphics) files are auto-extruded into 3D parts.
For the CAM interface, click [here](/kiri-moto/CAM).
![A minimalist approach](/img/interface/main.png)
## Top Menu
- **Left:** Buttons to move through the `Arrange → Slice → Preview → Export` workflow. These steps are also available as [keyboard shortcuts](/kiri-moto/controls). Selecting an option here will automatically run prior steps as needed.
- **Center:** Clicking the [logo](/kiri-moto) opens a dialog with version selection, helpful links, and your current Kiri:Moto version. If you are unsure which version to use, check the [release notes](https://github.com/GridSpace/grid-apps/releases/) on GitHub.
- **Right:** Options for importing/exporting the workspace, manipulating the view, changing modes, and setting preferences. Kiri:Moto currently supports CAM, FDM, SLA, and LASER modes. Some other modes are extensions of the LASER workflow, but do not have first-class support. The [preferences menu](#preferences) will be covered later in this section.
- Changing the mode updates the left menu and enables/disables mode-specific options such as the `CAM Operation` menu and the `CAM Animate` step.
- Learn about K:M file types [here](/kiri-moto/faq#what-are-the-kmz-and-km-file-formats-short-for).
## Left Menu
The left menu contains options for the current mode. These vary widely:
- CAM has ample documentation on [Process Options](/kiri-moto/CAM/processOpts).
- Other modes are less documented but many options are self-explanatory if you're familiar with the manufacturing process.
- Hovering over an option provides tooltips. When in doubt, a quick search usually explains the option in detail.
## Right Menu
The right menu contains controls for objects in the workspace.
- Hovering over the arrow next to an object reveals options for deleting, renaming, disabling, or replacing it.
- Disabled objects remain visible but are ignored during slicing and exporting.
## Machines Dialog
![Device Dialog](/img/interface/CAMDevice.png)
The device dialog is accessed through the settings dropdown. It allows you to configure a device or select a predefined one.
- The dropdown only shows devices available for the current mode.
- Stock device settings are greyed out. To modify them, click `Customize`.
- Learn more about how K:M handles CAM devices [here](/kiri-moto/CAM/machines).
## Preferences
Application preferences are also accessed through the settings dropdown. These are mode-dependent but share many common options. For example, CNC preferences include animation controls.
<ImageCarousel base="/img/interface/" images="prefs" />

View file

@ -35,6 +35,7 @@ const sidebars = {
id: "kiri-moto/CAM/index",
},
items: [
"kiri-moto/CAM/interface",
"kiri-moto/CAM/processOpts",
"kiri-moto/CAM/machines",
"kiri-moto/CAM/tools",

View file

@ -4,59 +4,69 @@ import "react-responsive-carousel/lib/styles/carousel.min.css";
const imageDescripts = {
outline: [
["/1.png", "outline of a complex part"],
["/2.png", "outline of a non-flat part with inside holes"],
["/3.png", "outside-only outline"],
["/4.png", "inside-only outline"],
["/1.png", "Outline of a complex part"],
["/2.png", "Outline of a non-flat part with inside holes"],
["/3.png", "Outside-only outline"],
["/4.png", "Inside-only outline"],
],
level: [
["/1.png", "level of a large part"],
["/2.png", `level of a square part's stock`],
["/3.png", `level of a part with a non-uniform top surface`],
["/1.png", "Level of a large part"],
["/2.png", `Level of a square part's stock`],
["/3.png", `Level of a part with a non-uniform top surface`],
],
rough: [
["/1.png", "rough cut of two parts"],
["/2.png", "side-view of a rough cut"],
["/3.png", "rough cut of a part with a complex top surface"],
["/4.gif", "animate of complex rough cut"],
["/1.png", "Rough cut of two parts"],
["/2.png", "Side-view of a rough cut"],
["/3.png", "Rough cut of a part with a complex top surface"],
["/4.gif", "Animate of complex rough cut"],
],
contour: [
["/1.png", "close-up of a precise contour"],
["/2.png", "contour of multiple parts at once"],
["/3.png", "low precision contour"],
["/1.png", "Close-up of a precise contour"],
["/2.png", "Contour of multiple parts at once"],
["/3.png", "Low precision contour"],
],
register: [
["/1.png", "2-drill register"],
["/2.png", "3-drill register"],
["/3.png", "jigsaw register"],
["/3.png", "Jigsaw register"],
],
drill: [
["/1.png", "drills for a robot baseplate"],
["/2.png", "drills for a pegboard"],
["/3.png", "selecting only matching-size holes"],
["/1.png", "Drills for a robot baseplate"],
["/2.png", "Drills for a pegboard"],
["/3.png", "Selecting only matching-size holes"],
],
trace: [
["/1.png", "toolpath tracing a design into a part"],
["/2.png", "selecting loops to trace"],
["/3.png", "tracing edges for deburring"],
["/4.png", "trace to clear a pocket"],
["/5.png", "arbitrary offset outline"],
["/1.png", "Toolpath tracing a design into a part"],
["/2.png", "Selecting loops to trace"],
["/3.png", "Tracing edges for deburring"],
["/4.png", "Trace to clear a pocket"],
["/5.png", "Arbitrary offset outline"],
],
pocket: [
["/1.png", "selecting areas to pocket"],
["/2.png", "toolpath for pocket"],
["/3.gif", "pocket animation"],
["/4.png", "toolpath for v-bit carve"],
["/5.png", "many-pocketed part"],
["/1.png", "Selecting areas to pocket"],
["/2.png", "Toolpath for pocket"],
["/3.gif", "Pocket animation"],
["/4.png", "Toolpath for v-bit carve"],
["/5.png", "Many-pocketed part"],
],
gcode: [["/1.png", "the gcode editor popup"]],
gcode: [["/1.png", "The gcode editor popup"]],
laserOn: [],
laserOff: [],
index: [],
lathe: [],
tabs: [
["/1.png", "tabs added to part"],
["/2.png", "sliced part with tabs"],
["/1.png", "Tabs added to part"],
["/2.png", "Sliced part with tabs"],
],
camInterface: [
["/1.png", "Empty Ops list"],
["/2.png", "Sample Ops list"],
["/3.png", "Ops list with history bar"],
],
prefs: [
["/prefs-CAM.png", "Preferences in CAM mode"],
["/prefs-FDM.png", "Preferences in FDM mode"],
["/prefs-LASER.png", "Preferences in laser mode"],
],
};
@ -66,8 +76,9 @@ const imageDescripts = {
* @param {keyof typeof imageDescripts} images - The key to an array of images and descriptions.
* @returns {ReactElement} - A carousel of the given images.
*/
export function ImageCarousel({ base, images }) {
export function ImageCarousel({ base, images, sml }) {
return (
<div className={sml ? "carouselWrapper" : ""}>
<Carousel showThumbs={false}>
{imageDescripts[images].map(([image, caption], index) => (
<div>
@ -76,5 +87,6 @@ export function ImageCarousel({ base, images }) {
</div>
))}
</Carousel>
</div>
);
}

View file

@ -5,3 +5,14 @@
.navbar .navbar__items {
height: 4.5rem;
}
.carouselWrapper {
width: 100%;
display: flex;
justify-content: center;
}
.carouselWrapper .carousel-root {
width: fit-content;
max-width: 20rem;
}

BIN
docs/static/img/CAM/interface/1.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
docs/static/img/CAM/interface/2.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

BIN
docs/static/img/CAM/interface/3.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 232 KiB

BIN
docs/static/img/interface/CAMDevice.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
docs/static/img/interface/main.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 508 KiB

BIN
docs/static/img/interface/prefs-CAM.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
docs/static/img/interface/prefs-FDM.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

View file

@ -35,6 +35,7 @@
"node": ">=22.0.0"
},
"dependencies": {
"@docusaurus/plugin-client-redirects": "^3.9.0",
"@fortawesome/fontawesome-free": "^6.1.1",
"@gridspace/app-server": "^0.0.20",
"@gridspace/basic-ftp": "github:gridspace/basic-ftp#v5.0.5-gridspace",
@ -68,8 +69,8 @@
"ws": "^8.18.2"
},
"devDependencies": {
"@docusaurus/core": "^3.7.0",
"@docusaurus/preset-classic": "^3.7.0",
"@docusaurus/core": "^3.9.0",
"@docusaurus/preset-classic": "^3.9.0",
"@electron/notarize": "^3.0.0",
"copy-webpack-plugin": "^12.0.2",
"cross-env": "^10.1.0",