Pattern Preview
@@ -253,10 +199,22 @@ export function PatternCanvas({ pesData, sewingProgress, machineInfo, onPatternO
}}
>
{/* Background layer: grid, origin, hoop */}
-
+
+ {pesData && (
+ <>
+
+
+ {machineInfo && }
+ >
+ )}
+
{/* Pattern layer: draggable stitches and bounds */}
-
+
{pesData && (
{
const stage = e.target.getStage();
if (stage) stage.container().style.cursor = 'move';
@@ -273,14 +230,26 @@ export function PatternCanvas({ pesData, sewingProgress, machineInfo, onPatternO
const stage = e.target.getStage();
if (stage) stage.container().style.cursor = 'grab';
}}
- />
+ >
+
+
+
)}
{/* Current position layer */}
{pesData && sewingProgress && sewingProgress.currentStitch > 0 && (
-
+
+
+
)}
diff --git a/src/hooks/useBrotherMachine.ts b/src/hooks/useBrotherMachine.ts
index 3d6e490..1847c22 100644
--- a/src/hooks/useBrotherMachine.ts
+++ b/src/hooks/useBrotherMachine.ts
@@ -29,7 +29,7 @@ export function useBrotherMachine() {
const [isPolling, setIsPolling] = useState(false);
const [resumeAvailable, setResumeAvailable] = useState(false);
const [resumeFileName, setResumeFileName] = useState(null);
- const [resumedPattern, setResumedPattern] = useState(
+ const [resumedPattern, setResumedPattern] = useState<{ pesData: PesPatternData; patternOffset?: { x: number; y: number } } | null>(
null,
);
@@ -58,11 +58,11 @@ export function useBrotherMachine() {
const cached = PatternCacheService.getPatternByUUID(uuidStr);
if (cached) {
- console.log("[Resume] Pattern found in cache:", cached.fileName);
+ console.log("[Resume] Pattern found in cache:", cached.fileName, "Offset:", cached.patternOffset);
console.log("[Resume] Auto-loading cached pattern...");
setResumeAvailable(true);
setResumeFileName(cached.fileName);
- setResumedPattern(cached.pesData);
+ setResumedPattern({ pesData: cached.pesData, patternOffset: cached.patternOffset });
// Fetch pattern info from machine
try {
@@ -166,7 +166,7 @@ export function useBrotherMachine() {
}, [service, isConnected]);
const loadCachedPattern =
- useCallback(async (): Promise => {
+ useCallback(async (): Promise<{ pesData: PesPatternData; patternOffset?: { x: number; y: number } } | null> => {
if (!resumeAvailable) return null;
try {
@@ -177,10 +177,10 @@ export function useBrotherMachine() {
const cached = PatternCacheService.getPatternByUUID(uuidStr);
if (cached) {
- console.log("[Resume] Loading cached pattern:", cached.fileName);
+ console.log("[Resume] Loading cached pattern:", cached.fileName, "Offset:", cached.patternOffset);
// Refresh pattern info from machine
await refreshPatternInfo();
- return cached.pesData;
+ return { pesData: cached.pesData, patternOffset: cached.patternOffset };
}
return null;
@@ -212,10 +212,10 @@ export function useBrotherMachine() {
);
setUploadProgress(100);
- // Cache the pattern with its UUID
+ // Cache the pattern with its UUID and offset
const uuidStr = uuidToString(uuid);
- PatternCacheService.savePattern(uuidStr, pesData, fileName);
- console.log("[Cache] Saved pattern:", fileName, "with UUID:", uuidStr);
+ PatternCacheService.savePattern(uuidStr, pesData, fileName, patternOffset);
+ console.log("[Cache] Saved pattern:", fileName, "with UUID:", uuidStr, "Offset:", patternOffset);
// Clear resume state since we just uploaded
setResumeAvailable(false);
diff --git a/src/services/PatternCacheService.ts b/src/services/PatternCacheService.ts
index b12f5b6..bde64af 100644
--- a/src/services/PatternCacheService.ts
+++ b/src/services/PatternCacheService.ts
@@ -5,6 +5,7 @@ interface CachedPattern {
pesData: PesPatternData;
fileName: string;
timestamp: number;
+ patternOffset?: { x: number; y: number };
}
const CACHE_KEY = 'brother_pattern_cache';
@@ -34,7 +35,8 @@ export class PatternCacheService {
static savePattern(
uuid: string,
pesData: PesPatternData,
- fileName: string
+ fileName: string,
+ patternOffset?: { x: number; y: number }
): void {
try {
// Convert penData Uint8Array to array for JSON serialization
@@ -48,10 +50,11 @@ export class PatternCacheService {
pesData: pesDataWithArrayPenData,
fileName,
timestamp: Date.now(),
+ patternOffset,
};
localStorage.setItem(CACHE_KEY, JSON.stringify(cached));
- console.log('[PatternCache] Saved pattern:', fileName, 'UUID:', uuid);
+ console.log('[PatternCache] Saved pattern:', fileName, 'UUID:', uuid, 'Offset:', patternOffset);
} catch (err) {
console.error('[PatternCache] Failed to save pattern:', err);
// If quota exceeded, clear and try again