From f9c59e1f26e5655df534fb988cba3db0fb2185ef Mon Sep 17 00:00:00 2001 From: Stefan Dej Date: Fri, 9 Feb 2024 23:14:21 +0100 Subject: [PATCH] refactor: refactor heightmap page (#1759) * refactor: refactor heightmap page Signed-off-by: Stefan Dej * refactor: remove unused import in printer/getters Signed-off-by: Stefan Dej --------- Signed-off-by: Stefan Dej --- src/components/charts/HeightmapChart.vue | 411 ++++++ .../dialogs/HeightmapCalibrateMeshDialog.vue | 88 ++ .../dialogs/HeightmapRemoveProfileDialog.vue | 50 + .../dialogs/HeightmapRenameProfileDialog.vue | 95 ++ src/components/mixins/bedmesh.ts | 62 + .../panels/Heightmap/HeightmapChartPanel.vue | 220 +++ .../HeightmapCurrentProfilePanel.vue | 142 ++ .../Heightmap/HeightmapProfilesPanel.vue | 35 + .../Heightmap/HeightmapProfilesPanelRow.vue | 148 ++ src/pages/Heightmap.vue | 1247 +---------------- src/store/printer/getters.ts | 33 - src/store/printer/types.ts | 34 +- 12 files changed, 1298 insertions(+), 1267 deletions(-) create mode 100644 src/components/charts/HeightmapChart.vue create mode 100644 src/components/dialogs/HeightmapCalibrateMeshDialog.vue create mode 100644 src/components/dialogs/HeightmapRemoveProfileDialog.vue create mode 100644 src/components/dialogs/HeightmapRenameProfileDialog.vue create mode 100644 src/components/mixins/bedmesh.ts create mode 100644 src/components/panels/Heightmap/HeightmapChartPanel.vue create mode 100644 src/components/panels/Heightmap/HeightmapCurrentProfilePanel.vue create mode 100644 src/components/panels/Heightmap/HeightmapProfilesPanel.vue create mode 100644 src/components/panels/Heightmap/HeightmapProfilesPanelRow.vue diff --git a/src/components/charts/HeightmapChart.vue b/src/components/charts/HeightmapChart.vue new file mode 100644 index 00000000..0d4e8190 --- /dev/null +++ b/src/components/charts/HeightmapChart.vue @@ -0,0 +1,411 @@ + + diff --git a/src/components/dialogs/HeightmapCalibrateMeshDialog.vue b/src/components/dialogs/HeightmapCalibrateMeshDialog.vue new file mode 100644 index 00000000..94d2faaf --- /dev/null +++ b/src/components/dialogs/HeightmapCalibrateMeshDialog.vue @@ -0,0 +1,88 @@ + + diff --git a/src/components/dialogs/HeightmapRemoveProfileDialog.vue b/src/components/dialogs/HeightmapRemoveProfileDialog.vue new file mode 100644 index 00000000..7b0c393a --- /dev/null +++ b/src/components/dialogs/HeightmapRemoveProfileDialog.vue @@ -0,0 +1,50 @@ + + diff --git a/src/components/dialogs/HeightmapRenameProfileDialog.vue b/src/components/dialogs/HeightmapRenameProfileDialog.vue new file mode 100644 index 00000000..969a4b15 --- /dev/null +++ b/src/components/dialogs/HeightmapRenameProfileDialog.vue @@ -0,0 +1,95 @@ + + diff --git a/src/components/mixins/bedmesh.ts b/src/components/mixins/bedmesh.ts new file mode 100644 index 00000000..36a4cbf1 --- /dev/null +++ b/src/components/mixins/bedmesh.ts @@ -0,0 +1,62 @@ +import Vue from 'vue' +import Component from 'vue-class-component' + +@Component +export default class BedmeshMixin extends Vue { + get bed_mesh() { + return this.$store.state.printer.bed_mesh ?? {} + } + + get profiles() { + return this.bed_mesh.profiles ?? {} + } + + get mesh_min() { + return this.bed_mesh.mesh_min ?? [0, 0] + } + + get mesh_max() { + return this.bed_mesh.mesh_max ?? [0, 0] + } + + get min() { + return Math.min(...this.points) + } + + get max() { + return Math.max(...this.points) + } + + get variance() { + return Math.abs(this.min - this.max).toFixed(3) + } + + get is_active() { + // if the current profile_mane is not empty, return true + if (this.bed_mesh.profile_name !== '') return true + + return this.mesh_min[0] !== 0 || this.mesh_min[1] !== 0 || this.mesh_max[0] !== 0 || this.mesh_max[1] !== 0 + } + + get name() { + if (this.bed_mesh.profile_name !== '') return this.bed_mesh.profile_name + + return 'Unknown' + } + + get probed_matrix() { + return this.bed_mesh.probed_matrix ?? [] + } + + get points() { + const points: number[] = [] + + for (let i = 0; i < this.probed_matrix.length; i++) { + for (let j = 0; j < this.probed_matrix[i].length; j++) { + points.push(this.probed_matrix[i][j]) + } + } + + return points + } +} diff --git a/src/components/panels/Heightmap/HeightmapChartPanel.vue b/src/components/panels/Heightmap/HeightmapChartPanel.vue new file mode 100644 index 00000000..a9dd9648 --- /dev/null +++ b/src/components/panels/Heightmap/HeightmapChartPanel.vue @@ -0,0 +1,220 @@ + + diff --git a/src/components/panels/Heightmap/HeightmapCurrentProfilePanel.vue b/src/components/panels/Heightmap/HeightmapCurrentProfilePanel.vue new file mode 100644 index 00000000..d60dfee6 --- /dev/null +++ b/src/components/panels/Heightmap/HeightmapCurrentProfilePanel.vue @@ -0,0 +1,142 @@ + + + + diff --git a/src/components/panels/Heightmap/HeightmapProfilesPanel.vue b/src/components/panels/Heightmap/HeightmapProfilesPanel.vue new file mode 100644 index 00000000..46e51cbb --- /dev/null +++ b/src/components/panels/Heightmap/HeightmapProfilesPanel.vue @@ -0,0 +1,35 @@ + + diff --git a/src/components/panels/Heightmap/HeightmapProfilesPanelRow.vue b/src/components/panels/Heightmap/HeightmapProfilesPanelRow.vue new file mode 100644 index 00000000..72aa6726 --- /dev/null +++ b/src/components/panels/Heightmap/HeightmapProfilesPanelRow.vue @@ -0,0 +1,148 @@ + + + + diff --git a/src/pages/Heightmap.vue b/src/pages/Heightmap.vue index c5101999..7885e740 100644 --- a/src/pages/Heightmap.vue +++ b/src/pages/Heightmap.vue @@ -1,1234 +1,43 @@ - - diff --git a/src/store/printer/getters.ts b/src/store/printer/getters.ts index ae86074d..24d5d71d 100644 --- a/src/store/printer/getters.ts +++ b/src/store/printer/getters.ts @@ -2,7 +2,6 @@ import { checkKlipperConfigModules } from '@/store/variables' import { GetterTree } from 'vuex' import { PrinterState, - PrinterStateBedMesh, PrinterStateExtruder, PrinterStateExtruderStepper, PrinterStateFan, @@ -526,38 +525,6 @@ export const getters: GetterTree = { return output }, - getBedMeshProfiles: (state) => { - const profiles: PrinterStateBedMesh[] = [] - let currentProfile = '' - if (state.bed_mesh) currentProfile = state.bed_mesh.profile_name - - if (state.bed_mesh && 'profiles' in state.bed_mesh) { - Object.keys(state.bed_mesh?.profiles).forEach((key) => { - const value: any = state.bed_mesh.profiles[key] - - let points: number[] = [] - value.points.forEach((row: number[]) => { - points = points.concat(row) - }) - - const min = Math.min(...points) - const max = Math.max(...points) - - profiles.push({ - name: key, - data: { ...value.mesh_params, points: value.points }, - points: points, - min: min, - max: max, - variance: Math.abs(min - max), - is_active: currentProfile === key, - }) - }) - } - - return caseInsensitiveSort(profiles, 'name') - }, - getExtruders: (state) => { const extruders: PrinterStateExtruder[] = [] if (state.configfile?.settings) { diff --git a/src/store/printer/types.ts b/src/store/printer/types.ts index 5c2665e8..e0ebe827 100644 --- a/src/store/printer/types.ts +++ b/src/store/printer/types.ts @@ -157,26 +157,30 @@ export interface PrinterStateFilamentSensors { } export interface PrinterStateBedMesh { - name: string - data: { - algo: string - max_x: number - max_y: number - mesh_x_pps: number - mesh_y_pps: number + profile_name: string + mesh_min: [number, number] + mesh_max: [number, number] + probed_matrix: number[][] + mesh_matrix: number[][] + profiles: { + [key: string]: PrinterStateBedMeshProfile + } +} + +export interface PrinterStateBedMeshProfile { + points: number[][] + mesh_params: { min_x: number + max_x: number min_y: number - points: { [key: number]: number[] } - tension: number - version: number + max_y: number x_count: number y_count: number + mesh_x_pps: number + mesh_y_pps: number + algo: 'bicubic' | 'lagrange' + tension: number } - points: number[] - min: number - max: number - variance: number - is_active: boolean } export interface PrinterStateMacroParam {