Skip to content

Commit a4ec5b3

Browse files
authored
Merge pull request #309 from xyz-tools/refactor-to-class-export
Redefine the main class/init to extract many responsibilities out of the renderer
2 parents 1ec60b7 + 3088cb2 commit a4ec5b3

9 files changed

Lines changed: 879 additions & 306 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ Click to see the [full-fledged demo](https://gcode-preview.web.app/):
3333
### Quick start
3434

3535
```
36-
import * as GCodePreview from 'gcode-preview';
36+
import { GCodePreview } from 'gcode-preview';
3737
38-
const preview = GCodePreview.init({
38+
const preview = new GCodePreview({
3939
canvas: document.querySelector('canvas'),
4040
extrusionColor: 'hotpink'
4141
});

demo/js/app.js

Lines changed: 49 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { createApp, ref, watch, onMounted, watchEffect } from 'vue';
22
import { presets } from './presets.js';
3-
import * as GCodePreview from 'gcode-preview';
3+
import { GCodePreview } from 'gcode-preview';
44
import { defaultSettings } from './default-settings.js';
55
import { parseIntOrDefault } from './utils.js';
66

@@ -46,23 +46,22 @@ export const app = (window.app = createApp({
4646

4747
// Update UI with current preview settings
4848
const updateUI = async () => {
49+
const { parser, sceneManager, countLayers } = preview;
4950
const {
50-
parser,
51-
countLayers,
52-
extrusionColor,
5351
topLayerColor,
5452
lastSegmentColor,
5553
buildVolume,
56-
backgroundColor,
5754
singleLayerMode,
5855
renderTravel,
5956
travelColor,
6057
renderExtrusion,
6158
lineWidth,
6259
renderTubes,
6360
extrusionWidth,
64-
boundingBoxColor
65-
} = preview;
61+
boundingBoxColor,
62+
extrusionColor,
63+
backgroundColor
64+
} = sceneManager;
6665
const { thumbnails } = parser.metadata;
6766

6867
// thumbnail.value = thumbnails['220x124']?.src;
@@ -99,7 +98,7 @@ export const app = (window.app = createApp({
9998
};
10099
console.debug('app settings:', currentSettings);
101100
Object.assign(settings.value, currentSettings);
102-
preview.endLayer = countLayers;
101+
sceneManager.endLayer = countLayers;
103102

104103
applyDevMode(enableDevMode.value);
105104
};
@@ -117,12 +116,12 @@ export const app = (window.app = createApp({
117116
// preview.clear();
118117
preview.devMode = prevDevMode;
119118

120-
await preview.processGCode(gcodeStream, { render: false }); // rendering will be done reactively
119+
await preview.processGCodeStream(gcodeStream, { render: false }); // rendering will be done reactively
121120
};
122121

123122
const render = async () => {
124123
if (loadProgressive.value && preview.job.layers !== null) {
125-
await preview.renderAnimated();
124+
await preview.sceneManager.renderAnimated();
126125
} else {
127126
preview.render();
128127
}
@@ -153,11 +152,11 @@ export const app = (window.app = createApp({
153152
if (defaultSettings.devMode) defaultSettings.devMode.statsContainer = statsContainer();
154153
preview?.dispose();
155154

156-
window['_preview'] = preview = new GCodePreview.init(options);
155+
window['_preview'] = preview = new GCodePreview(options);
157156

158157
// resize preview on canvas resize (TODO: move to GCodePreview)
159158
if (observer) observer.disconnect();
160-
observer = new ResizeObserver(() => preview.resize());
159+
observer = new ResizeObserver(() => preview.sceneManager.resize());
161160
observer.observe(canvas);
162161

163162
applyDevMode(enableDevMode.value); // HACK: force dev mode to update UI
@@ -178,39 +177,47 @@ export const app = (window.app = createApp({
178177
await selectPreset(defaultPreset);
179178

180179
watchEffect(() => {
181-
preview.backgroundColor = settings.value.backgroundColor;
182-
183-
if (preview.buildVolume && settings.value.drawBuildVolume) {
184-
preview.buildVolume.smallGrid = settings.value.buildVolume.smallGrid;
185-
preview.buildVolume.x = +settings.value.buildVolume.x;
186-
preview.buildVolume.y = +settings.value.buildVolume.y;
187-
preview.buildVolume.z = +settings.value.buildVolume.z;
180+
if (!preview) return;
181+
preview.sceneManager.backgroundColor = settings.value.backgroundColor;
182+
183+
if (preview.sceneManager.buildVolume && settings.value.drawBuildVolume) {
184+
preview.sceneManager.buildVolume.smallGrid = settings.value.buildVolume.smallGrid;
185+
preview.sceneManager.buildVolume.x = +settings.value.buildVolume.x;
186+
preview.sceneManager.buildVolume.y = +settings.value.buildVolume.y;
187+
preview.sceneManager.buildVolume.z = +settings.value.buildVolume.z;
188188
}
189189

190-
if (!preview.buildVolume && settings.value.drawBuildVolume) {
191-
preview.buildVolume = {
190+
if (!preview.sceneManager.buildVolume && settings.value.drawBuildVolume) {
191+
preview.sceneManager.buildVolume = {
192192
x: +settings.value.buildVolume.x,
193193
y: +settings.value.buildVolume.y,
194194
z: +settings.value.buildVolume.z,
195195
smallGrid: settings.value.buildVolume.smallGrid
196196
};
197-
} else if (preview.buildVolume && !settings.value.drawBuildVolume) {
198-
preview.buildVolume = undefined;
197+
} else if (preview.sceneManager.buildVolume && !settings.value.drawBuildVolume) {
198+
preview.sceneManager.buildVolume = undefined;
199199
}
200-
preview.boundingBoxColor = drawBoundingBox.value ? (settings.value.boundingBoxColor ?? 'magenta') : undefined;
200+
preview.sceneManager.boundingBoxColor = drawBoundingBox.value
201+
? (settings.value.boundingBoxColor ?? 'magenta')
202+
: undefined;
201203
});
202204

203205
watchEffect(() => {
204-
preview.renderTravel = settings.value.renderTravel;
205-
preview.travelColor = settings.value.travelColor;
206-
preview.lineWidth = +settings.value.lineWidth;
207-
208-
preview.renderExtrusion = settings.value.renderExtrusion;
209-
preview.renderTubes = settings.value.renderTubes;
210-
preview.extrusionWidth = +settings.value.extrusionWidth;
211-
212-
preview.topLayerColor = settings.value.highlightTopLayer ? settings.value.topLayerColor : undefined;
213-
preview.lastSegmentColor = settings.value.highlightLastSegment ? settings.value.lastSegmentColor : undefined;
206+
if (!preview) return;
207+
preview.sceneManager.renderTravel = settings.value.renderTravel;
208+
preview.sceneManager.travelColor = settings.value.travelColor;
209+
preview.sceneManager.lineWidth = +settings.value.lineWidth;
210+
211+
preview.sceneManager.renderExtrusion = settings.value.renderExtrusion;
212+
preview.sceneManager.renderTubes = settings.value.renderTubes;
213+
preview.sceneManager.extrusionWidth = +settings.value.extrusionWidth;
214+
215+
preview.sceneManager.topLayerColor = settings.value.highlightTopLayer
216+
? settings.value.topLayerColor
217+
: undefined;
218+
preview.sceneManager.lastSegmentColor = settings.value.highlightLastSegment
219+
? settings.value.lastSegmentColor
220+
: undefined;
214221

215222
// run render after settings have been applied
216223
// this is needed to prevent reactivity attaching the render function
@@ -220,19 +227,23 @@ export const app = (window.app = createApp({
220227
});
221228

222229
watchEffect(() => {
230+
if (!preview) return;
223231
const startLayer = parseIntOrDefault(settings.value.startLayer, undefined);
224232
const endLayer = parseIntOrDefault(settings.value.endLayer, undefined);
225233

226-
preview.startLayer = settings.value.enableStartLayer ? startLayer : undefined;
227-
preview.endLayer = settings.value.enableEndLayer ? endLayer : undefined;
234+
preview.sceneManager.startLayer = settings.value.enableStartLayer ? startLayer : undefined;
235+
preview.sceneManager.endLayer = settings.value.enableEndLayer ? endLayer : undefined;
228236
});
229237

230238
watchEffect(() => {
231-
preview.singleLayerMode = settings.value.singleLayerMode;
239+
if (!preview) return;
240+
preview.sceneManager.singleLayerMode = settings.value.singleLayerMode;
232241
});
233242

234243
watchEffect(() => {
235-
preview.extrusionColor = settings.value.colors.length === 1 ? settings.value.colors[0] : settings.value.colors;
244+
if (!preview) return;
245+
preview.sceneManager.extrusionColor =
246+
settings.value.colors.length === 1 ? settings.value.colors[0] : settings.value.colors;
236247
});
237248
});
238249

0 commit comments

Comments
 (0)