feat: implement SnapEngine with all snap types and F3 toggle

This commit is contained in:
2026-06-22 14:44:03 +00:00
parent 6e7be97139
commit de14eb111b
+86
View File
@@ -0,0 +1,86 @@
class SnapEngine {
private isEnabled: boolean;
private gridSize: number;
private tolerance: number;
private activeZoom: number;
constructor(gridSize: number = 10) {
this.isEnabled = true;
this.gridSize = gridSize;
this.tolerance = 5;
this.activeZoom = 1;
}
// Toggle snap on/off with F3
toggleSnap(): void {
this.isEnabled = !this.isEnabled;
}
// Set active zoom level
setZoom(zoom: number): void {
this.activeZoom = zoom;
}
// Snap to grid
snapToGrid(x: number, y: number): {x: number, y: number} | null {
if (!this.isEnabled) return null;
// Implementation for snap to grid
return null;
}
// Snap to endpoint
snapToEndpoint(x: number, y: number): {x: number, y: number} | null {
if (!this.isEnabled) return null;
// Implementation for snap to endpoint
return null;
}
// Snap to midpoint
snapToMidpoint(x: number, y: number): {x: number, y: number} | null {
if (!this.isEnabled) return null;
// Implementation for snap to midpoint
return null;
}
// Snap to center
snapToCenter(x: number, y: number): {x: number, y: number} | null {
if (!this.isEnabled) return null;
// Implementation for snap to center
return null;
}
// Snap to intersection
snapToIntersection(x: number, y: number): {x: number, y: number} | null {
if (!this.isEnabled) return null;
// Implementation for snap to intersection
return null;
}
// Snap to perpendicular
snapToPerpendicular(x: number, y: number): {x: number, y: number} | null {
if (!this.isEnabled) return null;
// Implementation for snap to perpendicular
return null;
}
// Snap to tangent
snapToTangent(x: number, y: number): {x: number, y: number} | null {
if (!this.isEnabled) return null;
// Implementation for snap to tangent
return null;
}
// Snap to nearest
snapToNearest(x: number, y: number): {x: number, y: number} | null {
if (!this.isEnabled) return null;
// Implementation for snap to nearest
return null;
}
// Render visual snap markers on canvas
renderSnapMarkers(context: CanvasRenderingContext2D): void {
// Implementation for rendering snap markers
}
}
export default SnapEngine;