Closes https://github.com/KittyCAD/engine/issues/3494. Thanks to @nadr0 for helping on the JS side.
If users set their units, the grid will stop auto scaling, and instead will be set to 10 of whatever unit they used.
If users set their units, and those units are metric, then it'll include a scale bar (see screenshot). Imperial units won't have that bar.
This behaviour is configurable via settings.
## Limitations
- The scale bar below the grid cannot be disabled in metric units, and cannot be enabled in imperial units
<img width="1690" alt="Screenshot 2025-06-05 at 7 51 41 PM" src="https://github.com/user-attachments/assets/c597087c-f96d-4c30-95f4-b3d8ba2b5567" />
* Add libm dependency
* Change to use libm for trig functions
* Remove redactions for floating point
* Update output
* Use clippy to prevent stdlib math sneaking back in
---------
Co-authored-by: Adam Chalmers <adam.chalmers@zoo.dev>
* Change to use deterministic artifact graph
* Update output to use the new order
* Fix to clear everything when scene is cleared
* Fix lots
* Update artifact graph output for the last time
* Delete unused sorting code
* Remove unneeded cfg
* Fix to preserve top-level artifacts when there's an error
* Update output after error fix
* Add better doc comments
* Remove duplicate global operations
* Update comments
* Update ignored tests that were flaky
* Update graph for new samples after rebase
* Fix test assertion message
* Change so that operations are stored per module
* Refactor so that all modeling commands go through ExecState
* Remove unneeded PartialOrd implementations
* Remove artifact_commands from KclError since it was only for debugging
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Add NodePath to operations
* Change to use nodePath to get pathToNode instead of sourceRange
* Add additional node path unit test
* Update output
* Fix import statement NodePaths
* Update output
* Factor into function
* Shuffle around function call code
Signed-off-by: Nick Cameron <nrc@ncameron.org>
* Refactor function calls to share more code
Signed-off-by: Nick Cameron <nrc@ncameron.org>
* Hack to leave the result of revolve as a singleton rather than array
Signed-off-by: Nick Cameron <nrc@ncameron.org>
---------
Signed-off-by: Nick Cameron <nrc@ncameron.org>
* Fix to add NodePaths to SketchOnFace and SketchOnPlane artifacts
* Fix to only compute the new part of the artifact graph
* Change to early-return sooner when in mock mode
* Add another test
* Fix to propagate NodePath for sketch on face
* Update output
* Display NodePath in artifact graph mermaid charts
* Update output
* Change node path display to be only comments
* Update output
* Update output after rebase
* Common edge faces into artifact graph
* clean up
* kingdom of tags
* add tests
* hook up tags with edge treatments
* update unit tests
* update e2e
* clean up
* more fix up after main merge
* fmt
* revolve fix
* fix new circular dependency
* fix revolve
* remove numbers from circ deps, makes diffs bad
* sim test updates
* try and get tests working
* update
* Fix tsc error
---------
Co-authored-by: max-mrgrsk <156543465+max-mrgrsk@users.noreply.github.com>
Co-authored-by: max <margorskyi@gmail.com>
Co-authored-by: Jonathan Tran <jonnytran@gmail.com>
* Declare std::offsetPlane in KCL
Signed-off-by: Nick Cameron <nrc@ncameron.org>
* Use two axes to define planes in KCL
Signed-off-by: Nick Cameron <nrc@ncameron.org>
---------
Signed-off-by: Nick Cameron <nrc@ncameron.org>
* Turn on uom checks
Signed-off-by: Nick Cameron <nrc@ncameron.org>
* Convert all lengths to mm for engine calls
Signed-off-by: Nick Cameron <nrc@ncameron.org>
---------
Signed-off-by: Nick Cameron <nrc@ncameron.org>
* wip
* sketch a bit more; going to pull this out of tests next
* wip
* lock start things
* this was a bad idea
* Revert "this was a bad idea"
This reverts commit a2092e7ed6.
* prepare prelude before spawning
* error
* poop
* yike
* :(
* ok
* Reapply "this was a bad idea"
This reverts commit fafdf41093.
* chip away more
* man this is bad
* fix rebase add feature flag
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* get rid of execution kind
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* clippy
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* logs
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* updates
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* no extra executes
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* race w batch
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* cluppy
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* no printlns
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* no printlns
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* fix source ranges
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* batch shit
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* fixes
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* updates
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* fix
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* fix some bugs
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* fix error
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* cut 1
* preserve mem
* re-ad deep_clone
the helper we were calling was pushing a new call, which was hanging
out. we can skip the middleman since we already have something properly
prepared, just without a stdlib in some cases.
* skip non-kcl
* clean up source range bug
* error message changed
the uuids also changed because the error is hit before execute even
starts.
* typo
* rensnapshot a few
* order things
* MAYBE REVERT LATER:
attempt at an ordering
* snapsnap
* Revert "snapsnap"
This reverts commit 7350b32c7d.
* Revert "MAYBE REVERT LATER:"
This reverts commit ab49f3e85f.
* ugh
* poop
* poop2
* lint
* tranche 1
* more
* more snaps
* snap
* more
* update
* MAYBE REVERT THIS
* cache multi-file
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* addd tests
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* set to false
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* add test outputs
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* clippy
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* kcl-py-bindings uses carwheel
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* update snapshots
Signed-off-by: Jess Frazelle <github@jessfraz.com>
* updates
Signed-off-by: Jess Frazelle <github@jessfraz.com>
---------
Signed-off-by: Jess Frazelle <github@jessfraz.com>
Co-authored-by: Paul R. Tagliamonte <paul@zoo.dev>
Co-authored-by: Paul Tagliamonte <paultag@gmail.com>
* More units of measure work
Signed-off-by: Nick Cameron <nrc@ncameron.org>
* Update CSG output since engine change
---------
Signed-off-by: Nick Cameron <nrc@ncameron.org>
Co-authored-by: Nick Cameron <nrc@ncameron.org>
* Support paths to names rather than just raw idents
Signed-off-by: Nick Cameron <nrc@ncameron.org>
* A snapshot a day keeps the bugs away! 📷🐛
* A snapshot a day keeps the bugs away! 📷🐛
* A snapshot a day keeps the bugs away! 📷🐛
* A snapshot a day keeps the bugs away! 📷🐛
---------
Signed-off-by: Nick Cameron <nrc@ncameron.org>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Improve snapshot testing
Signed-off-by: Nick Cameron <nrc@ncameron.org>
* A snapshot a day keeps the bugs away! 📷🐛
* A snapshot a day keeps the bugs away! 📷🐛
---------
Signed-off-by: Nick Cameron <nrc@ncameron.org>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Parse [T] instead of T[] for array types
Signed-off-by: Nick Cameron <nrc@ncameron.org>
* homogenous arrays, type coercion, remove solid set and sketch set, etc
Signed-off-by: Nick Cameron <nrc@ncameron.org>
---------
Signed-off-by: Nick Cameron <nrc@ncameron.org>
Previously, `xLine`, `xLineTo`, `yLine` and `yLineTo` used positional arguments. Now:
- `xLineTo` and `yLineTo` have been removed
- `xLine` and `yLine` both use keyword arguments:
- `length`, optional (i.e. a relative distance along the X or Y axis)
- `endAbsolute` optional (i.e. an absolute point along the X or Y axis)
- `tag` optional
- Exactly one of `length` or `endAbsolute` must be given. Not both, not neither.
For example:
```
// Old way
|> xLine(6.04, %)
|> yLineTo(20, %, $base)
// New way
|> xLine(length = 6.04)
|> yLine(endAbsolute = 20, tag = $base)
```
This also improves some of the general-purpose keyword arguments code in modeling app's TS codebase.
* Change to unzip
* Download kcl-samples as zip to public dir
* Fix fetch:samples, e2e electron still not working
* Change error message to be clearer
* Refactor so that input and output directories of sim tests can be different
* Add kcl samples test implementation
* Update output since adding kcl_samples tests
* Update kcl-samples branch
* Fix git-ignore pattern to only apply to the root
* Fix yarn install and yarn fetch:samples to work the first time
* Remove unneeded exists check
* Change to use kcl-samples in public directory
* Add kcl-samples
* Update output since updating kcl-samples
* Update output files
* Change to not fetch samples during yarn install
* Update output after merge
* Ignore kcl-samples in codespell
* WIP: Don't run e2e if only kcl-samples changed
* Conditionally run cargo tests
* Fix to round floating point values in program memory arrays
* Update output since merge and rounding numbers in memory
* Fix memory redaction for floating point to find more values
* Fix float redaction pattern
* Update output since rounding floating point numbers
* Add center to floating point pattern
* Fix trigger to use picomatch syntax
* Update output since rounding center
* Remove kcl-samples github workflows
* Enable Rust backtrace
* Update output after re-running
* Update output after changing order of post-extrude commands
* Fix to have deterministic order of commands
* Update output after reverting ordering changes
* Update kcl-samples
* Update output after updating samples
* Fix error messages to show the names of all samples that failed
* Change cargo test command to match current one
* Update kcl-samples
* Update output since updating kcl-samples
* Add generate manifest workflow and yarn script
* Fix error check to actually work
* Change util function to be what we actually need
* Move new files after merge
* Fix paths since directory move
* Add dependabot updates for kcl-samples
* Add GitHub workflow to make PR to kcl-samples repo
* Add GitHub workflow to check kcl-samples header comments
* Fix worfklow to change to the right directory
* Add auto-commit simulation test output changes
* Add permissions to workflows
* Fix to run git commit step
* Install just if needed
* Fix directory of justfile
* Add installation of cargo-insta
* Fix to use underscore
* Fix to allow just command failure
* Change to always install CLI tools and cache them
* Trying to fix overwrite failing
* Combine commands
* Change reviewer
* Change to PR targeting the next branch
* Change git commands to not do unnecessary fetch
* Comment out trigger for creating a PR
* Update kcl-samples from next branch
* Update outputs after kcl-samples change
* Fix to use bash pipefail
* Add rust backtrace
* Print full env from sim tests
* Change command to use long option name
* Fix to use ci profile even when calling through just
* Add INSTA_UPDATE=always
* Fix git push by using an app token on checkout
* Add comments
* Fix to use bash options
* Change to echo when no changes are found
* Fix so that kcl-samples updates don't trigger full run
* Fix paths to reflect new crate location
* Fix path detection
* Fix e2e job to ignore kcl_samples simulation test output
* Fix the fetch logic for the KCL samples after vendoring (#5661)
Fixes the last 2 E2E tests for #5460.
---------
Co-authored-by: Pierre Jacquier <pierre@zoo.dev>
Co-authored-by: Pierre Jacquier <pierrejacquier39@gmail.com>
Co-authored-by: Frank Noirot <frank@zoo.dev>