Skip to content

Commit

Permalink
fix: formatting and cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
L10nhunter committed Dec 17, 2024
1 parent 521804f commit 1791cf3
Show file tree
Hide file tree
Showing 7 changed files with 105 additions and 44 deletions.
2 changes: 1 addition & 1 deletion client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
"cors": "^2.8.5",
"electron-squirrel-startup": "^1.0.1",
"file-saver": "^2.0.5",
"gcode-preview": "^2.13.0",
"gcode-preview": "^2.18.0",
"node": "^21.6.2",
"serve-handler": "^6.1.5",
"socket.io-client": "^4.7.4",
Expand Down
134 changes: 95 additions & 39 deletions client/src/components/GCode3DLiveViewer.vue
Original file line number Diff line number Diff line change
@@ -1,71 +1,127 @@
<script setup lang="ts">
import {ref, onMounted, onUnmounted, watch} from 'vue';
import {type Device} from '@/model/ports';
import { ref, onMounted, onUnmounted, watch } from 'vue';
import { type Device } from '@/model/ports';
import * as GCodePreview from 'gcode-preview';
import { withConsoleSuppression } from '@/model/gcodeWorker';
const figuredOutWorkers = false;
const props = defineProps<{ device: Device }>();
const canvas = ref<HTMLCanvasElement | undefined>(undefined);
let preview: GCodePreview.WebGLPreview | null = null;
let worker: Worker | null = null;
// Initialize rendering logic on mount
onMounted(async () => {
if (!canvas.value) {
console.error('Canvas not found');
return;
}
worker = new Worker(new URL('@/model/gcodeWorker.ts', import.meta.url), {type: 'module'});
worker.onmessage = (event) => {
const {type, error} = event.data;
if (type === 'error') console.error('Worker Error:', error);
};
const extrusionColor = getComputedStyle(document.documentElement).getPropertyValue('--primary-color').trim() || '#7561A9';
const offscreen: OffscreenCanvas = canvas.value.transferControlToOffscreen();
// Rendering settings
const settings = {
extrusionColor: getComputedStyle(document.documentElement).getPropertyValue('--primary-color').trim() || '#7561A9',
backgroundColor: 'black',
buildVolume: { x: 250, y: 210, z: 220 },
travelColor: 'limegreen',
lineWidth: 0.8,
lineHeight: 0.4,
extrusionWidth: 0.8,
renderExtrusion: true,
renderTravel: false,
renderTubes: true,
initialCameraPosition: [-200, 232, 200],
};
worker.postMessage({
type: 'init',
payload: {
canvas: offscreen,
extrusionColor: extrusionColor,
backgroundColor: 'black',
buildVolume: {x: 250, y: 210, z: 220},
travelColor: 'limegreen',
lineWidth: 1,
lineHeight: 1,
extrusionWidth: 1,
renderExtrusion: true,
renderTravel: false,
renderTubes: false
// Initialize worker or preview
if (figuredOutWorkers) {
const offscreen: OffscreenCanvas = canvas.value.transferControlToOffscreen();
worker = new Worker(new URL('@/model/gcodeWorker.ts', import.meta.url), { type: 'module' });
worker.onmessage = (event) => {
const { type, error } = event.data;
if (type === 'error') console.error('Worker Error:', error);
};
worker.postMessage(
{
type: 'init',
payload: {
canvas: offscreen,
...settings,
},
},
[offscreen]
);
} else {
if (preview) {
preview.clear();
}
}, [offscreen]);
const oldDebug = console.debug;
const oldInfo = console.info;
console.debug = () => {};
preview = GCodePreview.init({
canvas: canvas.value,
...settings,
});
preview.camera.lookAt(0, 0, 0);
console.debug = oldDebug;
console.info = oldInfo;
}
// Function to render GCode lines
const renderGCode = (gcode: string) => {
worker?.postMessage({
type: 'render',
payload: {gcode},
});
if (figuredOutWorkers) {
worker?.postMessage({
type: 'render',
payload: { gcode },
});
} else if (preview) {
if (preview.renderTubes) withConsoleSuppression(() => preview!.processGCode(gcode));
else preview.processGCode(gcode);
}
};
watch(() => props.device?.gcodeLines?.length!, () => {
renderGCode(props.device.gcodeLines!.slice(-1)[0]); // Render last 10 lines as a batch
});
// Watch for changes to GCode lines
watch(
() => props.device?.gcodeLines,
(newGCodeLines) => {
if (figuredOutWorkers) {
worker?.postMessage({ type: 'clear' });
} else {
preview?.clear();
preview?.render();
}
if (!newGCodeLines || newGCodeLines.length === 0) {
// Clear existing render data
return
}
// Render all lines
newGCodeLines.forEach((line) => renderGCode(line));
},
{ immediate: true }
);
const allLines = props.device?.gcodeLines;
if (allLines) {
for (let i = 0; i < allLines.length; i++) renderGCode(allLines[i]);
}
// Watch for additional lines being added
watch(
() => props.device?.gcodeLines?.length,
() => {
if (!props.device.gcodeLines ) return;
renderGCode(props.device.gcodeLines.slice(-1)[0]);
}
);
});
// Clean up resources on unmount
onUnmounted(() => {
if (worker) {
worker.terminate();
worker = null;
}
if (preview) {
preview.clear();
preview = null;
}
});
</script>

<template>
Expand All @@ -78,4 +134,4 @@ canvas {
height: 400px;
display: block;
}
</style>
</style>
2 changes: 1 addition & 1 deletion client/src/components/NavBar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ async function refreshServerConnection() {
}
socket.value.on('connect', () => {
console.log('Connected to socket');
console.debug('Connected to socket');
measurePing();
});
Expand Down
2 changes: 1 addition & 1 deletion client/src/model/gcodeWorker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ let preview: GCodePreview.WebGLPreview | null = null;
const originalConsoleWarn = console.warn;

// Utility to suppress warnings
function withConsoleSuppression<T>(fn: () => T): T {
export function withConsoleSuppression<T>(fn: () => T): T {
console.warn = () => {};
const result = fn();
console.warn = originalConsoleWarn;
Expand Down
1 change: 1 addition & 0 deletions client/src/views/MainView.vue
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@ const releasePrinter = async (jobToFind: Job | undefined, key: number, printerId
printer.bed_temp = 0;
printer.queue?.shift(); // Remove the first job in the queue
printer.consoles = [[],[],[],[],[]]
printer.gcodeLines = undefined
//TODO: marker
}
Expand Down
5 changes: 4 additions & 1 deletion server/Classes/Fabricators/Printers/Printer.py
Original file line number Diff line number Diff line change
Expand Up @@ -345,7 +345,10 @@ def extractIndex(self, gcode: bytes) -> str:
try:
temp = gcode.decode().split("S")[1].split("\n")[0]
except IndexError:
temp = None
try:
temp = gcode.decode().split("R")[1].split("\n")[0]
except IndexError:
temp = None
if temp:
if self.logger is not None: self.logger.info(f"Waiting for hotend temperature to stabilize at {temp}\u00B0C...")
current_app.socketio.emit("console_update",
Expand Down
3 changes: 2 additions & 1 deletion server/Classes/Fabricators/Printers/Prusa/PrusaPrinter.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,6 @@ def extractIndex(self, gcode: bytes) -> str:
hashIndex += ".01" if g29addon == "P1" else ".02"
except IndexError:
hashIndex += ".01"
current_app.socketio.emit("console_update", {"message": "Auto bed leveling...", "level": "info", "printerid": self.dbID})
if hashIndex == "G29.01":
current_app.socketio.emit("console_update", {"message": "Auto bed leveling...", "level": "info", "printerid": self.dbID})
return hashIndex

0 comments on commit 1791cf3

Please sign in to comment.