Improve editor manipulation flows
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
import {
|
||||
isFreshPlacementMetadata,
|
||||
type PlanarCursorPlacementMode,
|
||||
type PlanarPoint,
|
||||
resolvePlanarCursorPosition,
|
||||
} from '@pascal-app/editor'
|
||||
|
||||
type FloorplanCursorResolverOptions = {
|
||||
snap?: (value: number) => number
|
||||
}
|
||||
|
||||
export function createFloorplanCursorResolver(args: {
|
||||
original: readonly [number, number]
|
||||
metadata?: unknown
|
||||
mode?: PlanarCursorPlacementMode
|
||||
}) {
|
||||
const original: PlanarPoint = [args.original[0], args.original[1]]
|
||||
const mode = args.mode ?? (isFreshPlacementMetadata(args.metadata) ? 'absolute' : 'relative')
|
||||
let anchor: PlanarPoint | null = null
|
||||
|
||||
return (
|
||||
planPoint: readonly [number, number],
|
||||
options: FloorplanCursorResolverOptions = {},
|
||||
): PlanarPoint => {
|
||||
const resolved = resolvePlanarCursorPosition({
|
||||
cursor: [planPoint[0], planPoint[1]],
|
||||
original,
|
||||
anchor,
|
||||
mode,
|
||||
...(options.snap ? { snap: options.snap } : {}),
|
||||
})
|
||||
anchor = resolved.anchor
|
||||
return resolved.point
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user