Add 3 point arc (#5722)

* bare minimum

* start of segment util added

* remove redundant handle

* some probably buggy handling of arc handles, can fix later

* probably bug implementation of update args, but data flow through is mostly there can fix bugs after

* fix update for arc

* fix math for center handle

* fix up length indicator

* tweak math

* stub out xState logic for arc

* more progress on adding point and click, implemented more of sketchLineHelper for arc

* small unrelated tweak

* fix up draft arc bugs

* fix arc last click

* fix draft segment animation and add comment

* add draft point snapping for arcs

* add helper stuff to arc

* clone arc point and click as base for arc-three-point

* rust change for arc three point

* can draw three point arc

* make arcTo editable

* can add new three point arc, so long as it continues existing profile

* get overlays working

* make snap to for continuing profile work for three point arcs

* add draft animation

* tangent issue fix

* action rename

* tmp test fix up

* fix silly bug

* fix couple problems causing tests to fail

* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)

* fix up

* add delet segment test for new segments

* update docs

* draft segments should look right

* add test for dragging new segment handles

* arc tools can be chained now

* make three point arc can start a new profile (not only extend existing paths)

* add test for equiping and unequiping the tool plus drawing with it

* fix console noise

* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)

* clean up

* update rust/docs

* put toolbar mode check into fixture

* do thing for lee

* use TEST_COLORSs

* fix colors

* don't await file write

* remove commented code

* remove unneeded template strings

* power to **2

* remove magic numbers

* more string templates

* some odd bits of clean up

* arc should be enable in dev

* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)

* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)

* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)

* add new simulation test

* fix test code from kwark migration

* issues Frank found

* fix deleting half complete ark

* fix

* small fix on dele index

* tsc post main merge

* fix up snaping to profile start

* add cross hari for three point arc

* block snapping if it's the only segment

* add tests for canceling arcTo halfway through

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
This commit is contained in:
Kurt Hutten
2025-03-18 11:14:12 +11:00
committed by GitHub
parent cb0470a31d
commit e17c6e272c
32 changed files with 20989 additions and 366 deletions

View File

@ -5,6 +5,7 @@ import {
onDragNumberCalculation,
hasLeadingZero,
hasDigitsLeftOfDecimal,
isClockwise,
} from './utils'
import { SourceRange, topLevelRange } from '../lang/wasm'
@ -1253,3 +1254,56 @@ describe('testing onDragNumberCalculation', () => {
})
})
})
describe('testing isClockwise', () => {
it('returns for counter clockwise points', () => {
// Points in clockwise order (rectangle)
const clockwisePoints: [number, number][] = [
[0, 0], // bottom-left
[10, 0], // bottom-right
[10, 10], // top-right
[0, 10], // top-left
]
expect(isClockwise(clockwisePoints)).toBe(false)
})
it('returns true for clockwise points', () => {
// Points in counter-clockwise order (rectangle)
const counterClockwisePoints: [number, number][] = [
[0, 0], // bottom-left
[0, 10], // top-left
[10, 10], // top-right
[10, 0], // bottom-right
]
expect(isClockwise(counterClockwisePoints)).toBe(true)
})
it('returns false for less than 3 points', () => {
expect(
isClockwise([
[0, 0],
[10, 10],
])
).toBe(false)
expect(isClockwise([[0, 0]])).toBe(false)
expect(isClockwise([])).toBe(false)
})
it('correctly identifies counter-clockwise triangle', () => {
const clockwiseTriangle: [number, number][] = [
[0, 0],
[10, 0],
[5, 10],
]
expect(isClockwise(clockwiseTriangle)).toBe(false)
})
it('correctly identifies clockwise triangle', () => {
const counterClockwiseTriangle: [number, number][] = [
[0, 0],
[5, 10],
[10, 0],
]
expect(isClockwise(counterClockwiseTriangle)).toBe(true)
})
})