@geode/opengeodeweb-front 10.3.1 → 10.3.2-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/app/components/DragAndDrop.vue +16 -27
  2. package/app/components/FileUploader.vue +34 -17
  3. package/app/components/GlassCard.vue +50 -0
  4. package/app/components/HybridRenderingView.vue +1 -2
  5. package/app/components/RemoteRenderingView.vue +1 -1
  6. package/app/components/Screenshot.vue +47 -36
  7. package/app/components/Stepper.vue +44 -11
  8. package/app/components/Viewer/ContextMenuItem.vue +16 -5
  9. package/app/components/Viewer/EdgedCurve/SpecificEdgesOptions.vue +1 -11
  10. package/app/components/Viewer/Generic/Mesh/CellsOptions.vue +0 -4
  11. package/app/components/Viewer/Generic/Mesh/EdgesOptions.vue +60 -9
  12. package/app/components/Viewer/Generic/Mesh/PointsOptions.vue +32 -9
  13. package/app/components/Viewer/Generic/Mesh/PolygonsOptions.vue +68 -0
  14. package/app/components/Viewer/Generic/Mesh/PolyhedraOptions.vue +71 -0
  15. package/app/components/Viewer/Options/AttributeColorBar.vue +2 -0
  16. package/app/components/Viewer/Options/AttributeSelector.vue +112 -0
  17. package/app/components/Viewer/Options/ColoringTypeSelector.vue +31 -29
  18. package/app/components/Viewer/PointSet/SpecificPointsOptions.vue +1 -11
  19. package/app/components/Viewer/PolygonalSurface/SpecificPolygonsOptions.vue +0 -4
  20. package/app/components/Viewer/Solid/SpecificPolyhedraOptions.vue +0 -4
  21. package/app/components/Viewer/Tree/ObjectTree.vue +1 -0
  22. package/app/components/ZScaling.vue +47 -37
  23. package/internal/stores/data_style/mesh/cells/cell.js +20 -34
  24. package/internal/stores/data_style/mesh/cells/vertex.js +20 -34
  25. package/internal/stores/data_style/mesh/edges/edge.js +84 -86
  26. package/internal/stores/data_style/mesh/edges/vertex.js +20 -34
  27. package/internal/stores/data_style/mesh/points/vertex.js +20 -34
  28. package/internal/stores/data_style/mesh/polygons/polygon.js +23 -38
  29. package/internal/stores/data_style/mesh/polygons/vertex.js +20 -34
  30. package/internal/stores/data_style/mesh/polyhedra/polyhedron.js +19 -32
  31. package/internal/stores/data_style/mesh/polyhedra/vertex.js +20 -34
  32. package/package.json +3 -3
  33. package/tests/integration/microservices/viewer/requirements.txt +1 -1
  34. package/app/components/OptionCard.vue +0 -55
  35. package/app/components/Viewer/Options/CellAttributeSelector.vue +0 -87
  36. package/app/components/Viewer/Options/EdgeAttributeSelector.vue +0 -84
  37. package/app/components/Viewer/Options/PolygonAttributeSelector.vue +0 -85
  38. package/app/components/Viewer/Options/PolyhedronAttributeSelector.vue +0 -91
  39. package/app/components/Viewer/Options/VertexAttributeSelector.vue +0 -84
@@ -1,13 +1,7 @@
1
1
  <script setup>
2
- const {
3
- multiple,
4
- accept,
5
- loading,
6
- showExtensions,
7
- idleText,
8
- dropText,
9
- loadingText,
10
- } = defineProps({
2
+ import GlassCard from "@ogw_front/components/GlassCard"
3
+
4
+ const props = defineProps({
11
5
  multiple: { type: Boolean, default: false },
12
6
  accept: { type: String, default: "" },
13
7
  loading: { type: Boolean, default: false },
@@ -41,29 +35,26 @@
41
35
 
42
36
  <template>
43
37
  <v-hover v-slot="{ isHovering, props: hoverProps }">
44
- <v-card
38
+ <GlassCard
45
39
  v-bind="hoverProps"
46
- class="text-center cursor-pointer"
40
+ class="text-center cursor-pointer overflow-hidden border-opacity-10 border-white"
47
41
  :class="{
48
42
  'elevation-4': isHovering || isDragging,
49
43
  'elevation-0': !(isHovering || isDragging),
50
44
  }"
51
45
  :style="{
52
46
  position: 'relative',
53
- overflow: 'hidden',
54
- transition: 'all 0.3s ease',
47
+ transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',
55
48
  background:
56
49
  isHovering || isDragging
57
- ? 'rgba(var(--v-theme-primary), 0.05)'
58
- : 'rgba(0, 0, 0, 0.02)',
59
- border: `2px dashed ${
60
- isHovering || isDragging ? 'rgb(var(--v-theme-primary))' : '#e0e0e0'
61
- }`,
50
+ ? 'rgba(255, 255, 255, 0.08) !important'
51
+ : 'rgba(255, 255, 255, 0.03) !important',
62
52
  transform: isHovering || isDragging ? 'translateY(-2px)' : 'none',
63
53
  pointerEvents: loading ? 'none' : 'auto',
64
54
  opacity: loading ? 0.6 : 1,
65
55
  }"
66
- rounded="xl"
56
+ variant="panel"
57
+ padding="pa-0"
67
58
  @click="triggerFileDialog"
68
59
  @dragover.prevent="isDragging = true"
69
60
  @dragleave.prevent="isDragging = false"
@@ -72,8 +63,9 @@
72
63
  <v-card-text class="pa-8">
73
64
  <v-sheet
74
65
  class="mx-auto mb-6 d-flex align-center justify-center"
75
- :color="isHovering || isDragging ? 'primary' : 'grey-lighten-2'"
76
- :elevation="isHovering || isDragging ? 4 : 0"
66
+ :color="
67
+ isHovering || isDragging ? 'white' : 'rgba(255, 255, 255, 0.1)'
68
+ "
77
69
  rounded="circle"
78
70
  width="80"
79
71
  height="80"
@@ -82,16 +74,13 @@
82
74
  <v-icon
83
75
  :icon="loading ? 'mdi-loading' : 'mdi-cloud-upload'"
84
76
  size="40"
85
- :color="isHovering || isDragging ? 'white' : 'grey-darken-1'"
77
+ :color="isHovering || isDragging ? 'primary' : 'white'"
86
78
  :class="{ rotating: loading }"
87
79
  />
88
80
  </v-sheet>
89
81
 
90
82
  <v-card-title
91
- class="text-h6 font-weight-bold justify-center pa-0 mb-1"
92
- :class="
93
- isHovering || isDragging ? 'text-primary' : 'text-grey-darken-2'
94
- "
83
+ class="text-h6 font-weight-bold justify-center pa-0 mb-1 text-white"
95
84
  style="transition: color 0.3s ease"
96
85
  >
97
86
  {{ loading ? loadingText : isDragging ? dropText : idleText }}
@@ -110,7 +99,7 @@
110
99
  :accept="accept"
111
100
  @change="handleFileSelect"
112
101
  />
113
- </v-card>
102
+ </GlassCard>
114
103
  </v-hover>
115
104
  </template>
116
105
 
@@ -81,43 +81,60 @@
81
81
  @files-selected="processSelectedFiles"
82
82
  />
83
83
 
84
- <v-card-text v-if="internal_files.length" class="mt-4">
85
- <v-sheet class="d-flex align-center mb-3" color="transparent">
86
- <v-icon icon="mdi-file-check" class="mr-2" color="primary" />
87
- <span class="text-subtitle-2 font-weight-bold"> Selected Files </span>
88
- <v-chip size="x-small" class="ml-2" color="primary" variant="flat">
84
+ <v-card-text v-if="internal_files.length" class="mt-6">
85
+ <v-sheet class="d-flex align-center mb-4" color="transparent">
86
+ <v-icon icon="mdi-file-check" class="mr-3" color="primary" size="24" />
87
+ <span class="text-subtitle-1 font-weight-bold text-white">
88
+ Selected Files
89
+ </span>
90
+ <v-chip
91
+ size="small"
92
+ class="ml-3 bg-white-opacity-10"
93
+ color="white"
94
+ variant="flat"
95
+ >
89
96
  {{ internal_files.length }}
90
97
  </v-chip>
91
98
  </v-sheet>
92
99
 
93
- <v-sheet class="d-flex flex-wrap gap-2" color="transparent">
100
+ <v-sheet class="d-flex flex-wrap ga-2" color="transparent">
94
101
  <v-chip
95
102
  v-for="(file, index) in internal_files"
96
103
  :key="index"
97
104
  closable
98
- size="small"
99
- color="primary"
100
- variant="tonal"
101
- class="font-weight-medium"
105
+ size="default"
106
+ color="white"
107
+ variant="outlined"
108
+ class="font-weight-medium glass-ui border-opacity-10 px-4"
109
+ style="background: rgba(255, 255, 255, 0.05) !important"
102
110
  @click:close="removeFile(index)"
103
111
  >
104
- <v-icon start size="16">mdi-file-outline</v-icon>
105
- {{ file.name }}
112
+ <v-icon start size="18" color="primary">mdi-file-outline</v-icon>
113
+ <span class="text-white">{{ file.name }}</span>
114
+ <template #close>
115
+ <v-icon size="16" class="ml-2 opacity-60 hover-opacity-100"
116
+ >mdi-close-circle</v-icon
117
+ >
118
+ </template>
106
119
  </v-chip>
107
120
  </v-sheet>
108
121
  </v-card-text>
109
122
 
110
- <v-card-actions v-if="!auto_upload && internal_files.length > 0">
123
+ <v-card-actions
124
+ v-if="!auto_upload && internal_files.length"
125
+ class="mt-6 pa-0"
126
+ >
111
127
  <v-btn
112
128
  color="primary"
113
- variant="elevated"
129
+ variant="flat"
114
130
  size="large"
115
- rounded="lg"
131
+ rounded="xl"
116
132
  :loading="loading"
117
- class="text-none px-3 font-weight-bold"
133
+ class="text-none px-6 font-weight-bold custom-upload-btn"
134
+ block
118
135
  @click="upload_files"
119
136
  >
120
- <v-icon start size="20">mdi-cloud-upload-outline</v-icon>
137
+ <v-icon start size="22">mdi-cloud-upload</v-icon>
121
138
  Upload {{ internal_files.length }} file<span
122
139
  v-if="internal_files.length > 1"
123
140
  >s</span
@@ -0,0 +1,50 @@
1
+ <script setup>
2
+ defineProps({
3
+ variant: {
4
+ type: String,
5
+ default: "panel",
6
+ validator: (v) => ["panel", "ui"].includes(v),
7
+ },
8
+ rounded: { type: String, default: "xl" },
9
+ padding: { type: String, default: "pa-6" },
10
+ theme: { type: String, default: null },
11
+ })
12
+
13
+ const attrs = useAttrs()
14
+ const isInteractive = computed(() => !!attrs.onClick)
15
+ </script>
16
+
17
+ <template>
18
+ <v-card
19
+ v-bind="$attrs"
20
+ @mousedown.stop
21
+ @click.stop
22
+ @dblclick.stop
23
+ @wheel.stop
24
+ @contextmenu.stop
25
+ flat
26
+ :ripple="isInteractive"
27
+ :theme="theme || (variant === 'panel' ? 'dark' : undefined)"
28
+ :class="[
29
+ variant === 'panel' ? 'glass-panel' : 'glass-ui',
30
+ 'border-thin',
31
+ `rounded-${rounded}`,
32
+ padding,
33
+ { 'cursor-default': !isInteractive },
34
+ ]"
35
+ >
36
+ <template v-for="(_, name) in $slots" #[name]="slotProps">
37
+ <slot :name="name" v-bind="slotProps || {}" />
38
+ </template>
39
+ </v-card>
40
+ </template>
41
+
42
+ <style scoped>
43
+ .border-thin {
44
+ border-style: solid !important;
45
+ }
46
+
47
+ .cursor-default {
48
+ cursor: default !important;
49
+ }
50
+ </style>
@@ -1,6 +1,5 @@
1
1
  <script setup>
2
2
  import VeaseViewToolbar from "@ogw_front/components/VeaseViewToolbar"
3
-
4
3
  import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer"
5
4
  import { useViewerStore } from "@ogw_front/stores/viewer"
6
5
 
@@ -52,7 +51,7 @@
52
51
 
53
52
  <template>
54
53
  <ClientOnly>
55
- <div class="fill-height" style="position: relative">
54
+ <div class="fill-height" style="position: relative; height: 100%">
56
55
  <VeaseViewToolbar />
57
56
  <slot name="ui"></slot>
58
57
  <v-col
@@ -101,7 +101,7 @@
101
101
 
102
102
  <template>
103
103
  <ClientOnly>
104
- <div style="position: relative; width: 100%; height: calc(100vh - 80px)">
104
+ <div style="position: relative; width: 100%; height: 100%">
105
105
  <ViewToolbar />
106
106
  <slot name="ui"></slot>
107
107
  <v-col
@@ -1,5 +1,6 @@
1
1
  <script setup>
2
2
  import fileDownload from "js-file-download"
3
+ import GlassCard from "@ogw_front/components/GlassCard"
3
4
  import viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json"
4
5
 
5
6
  import { useViewerStore } from "@ogw_front/stores/viewer"
@@ -46,49 +47,59 @@
46
47
  })
47
48
  </script>
48
49
  <template>
49
- <OptionCard
50
+ <GlassCard
50
51
  v-if="show_dialog"
52
+ @click.stop
51
53
  title="Take a screenshot"
52
54
  :width="width"
53
- class="position-absolute"
55
+ :ripple="false"
56
+ variant="panel"
57
+ padding="pa-0"
58
+ class="position-absolute elevation-24"
54
59
  style="z-index: 2; top: 90px; right: 55px"
55
60
  >
56
- <v-container>
57
- <v-row>
58
- <v-col cols="8" class="py-0">
59
- <v-text-field v-model="filename" label="File name"></v-text-field>
60
- </v-col>
61
- <v-col cols="4" class="py-0">
62
- <v-select
63
- v-model="output_extension"
64
- :items="output_extensions"
65
- label="Extension"
66
- required
67
- />
68
- </v-col>
69
- </v-row>
61
+ <v-card-text class="pa-5">
62
+ <v-container>
63
+ <v-row>
64
+ <v-col cols="8" class="py-0">
65
+ <v-text-field v-model="filename" label="File name"></v-text-field>
66
+ </v-col>
67
+ <v-col cols="4" class="py-0">
68
+ <v-select
69
+ v-model="output_extension"
70
+ :items="output_extensions"
71
+ label="Extension"
72
+ required
73
+ />
74
+ </v-col>
75
+ </v-row>
70
76
 
71
- <v-row>
72
- <v-col cols="12" class="py-0">
73
- <v-switch
74
- v-model="include_background"
75
- :disabled="output_extension !== 'png'"
76
- label="Include background"
77
- inset
78
- ></v-switch>
79
- </v-col>
80
- </v-row>
81
- </v-container>
77
+ <v-row>
78
+ <v-col cols="12" class="py-0">
79
+ <v-switch
80
+ v-model="include_background"
81
+ :disabled="output_extension !== 'png'"
82
+ label="Include background"
83
+ inset
84
+ ></v-switch>
85
+ </v-col>
86
+ </v-row>
87
+ </v-container>
88
+ </v-card-text>
82
89
 
83
90
  <template #actions>
84
- <v-btn variant="text" color="white" @click="emit('close')">Close</v-btn>
85
- <v-btn
86
- variant="outlined"
87
- :disabled="!filename || !output_extension"
88
- color="white"
89
- @click="takeScreenshot()"
90
- >Screenshot</v-btn
91
- >
91
+ <v-card-actions class="justify-center pb-4">
92
+ <v-btn variant="text" color="primary" @click="emit('close')"
93
+ >Close</v-btn
94
+ >
95
+ <v-btn
96
+ variant="outlined"
97
+ :disabled="!filename || !output_extension"
98
+ color="primary"
99
+ @click="takeScreenshot()"
100
+ >Screenshot</v-btn
101
+ >
102
+ </v-card-actions>
92
103
  </template>
93
- </OptionCard>
104
+ </GlassCard>
94
105
  </template>
@@ -8,16 +8,19 @@
8
8
 
9
9
  <template>
10
10
  <v-card-item class="flex-shrink-0 pa-0">
11
- <v-card-title
12
- class="text-h4 text-primary px-8 pt-6 pb-4 font-weight-bold d-flex align-center"
13
- >
14
- <v-icon icon="mdi-file-upload-outline" class="mr-3" />
15
- Import Data
16
- </v-card-title>
17
-
18
- <v-card-subtitle class="px-8 pb-4 text-medium">
19
- Choose a file to import.
20
- </v-card-subtitle>
11
+ <div class="px-8 pt-8 pb-4">
12
+ <div class="d-flex align-center mb-2">
13
+ <v-icon
14
+ icon="mdi-file-upload-outline"
15
+ class="mr-3 title-text"
16
+ size="32"
17
+ />
18
+ <h2 class="title-text">Import Data</h2>
19
+ </div>
20
+ <p class="text-white text-body-1">
21
+ Select and configure your files for a seamless import.
22
+ </p>
23
+ </div>
21
24
  </v-card-item>
22
25
 
23
26
  <v-stepper-vertical
@@ -25,7 +28,7 @@
25
28
  @update:model-value="current_step_index = $event - 1"
26
29
  flat
27
30
  non-linear
28
- class="pa-0 ma-0 bg-white rounded-xl overflow-hidden"
31
+ class="pa-0 ma-0 bg-transparent rounded-xl overflow-hidden custom-stepper"
29
32
  >
30
33
  <Step
31
34
  v-for="(step, index) in steps"
@@ -35,3 +38,33 @@
35
38
  />
36
39
  </v-stepper-vertical>
37
40
  </template>
41
+
42
+ <style scoped>
43
+ .custom-stepper :deep(.v-stepper-vertical-item) {
44
+ background: transparent !important;
45
+ }
46
+
47
+ .custom-stepper :deep(.v-stepper-vertical-item__content) {
48
+ background: rgba(255, 255, 255, 0.03) !important;
49
+ border-radius: 12px;
50
+ margin: 8px 16px 16px 40px !important;
51
+ padding: 16px !important;
52
+ border: 1px solid rgba(255, 255, 255, 0.05);
53
+ }
54
+
55
+ .custom-stepper :deep(.v-avatar) {
56
+ border: 1px solid rgba(255, 255, 255, 0.2);
57
+ background: rgba(255, 255, 255, 0.1) !important;
58
+ color: white !important;
59
+ }
60
+
61
+ .custom-stepper :deep(.v-stepper-vertical-item--active .v-avatar) {
62
+ background: #3c9983 !important;
63
+ border-color: #3c9983;
64
+ color: #0a0f0e !important;
65
+ }
66
+
67
+ .custom-stepper :deep(.v-stepper-vertical-item__connector) {
68
+ border-color: rgba(255, 255, 255, 0.1) !important;
69
+ }
70
+ </style>
@@ -1,7 +1,7 @@
1
1
  <script setup>
2
- import { useElementSize } from "@vueuse/core"
3
- import { useMenuStore } from "@ogw_front/stores/menu"
2
+ import GlassCard from "@ogw_front/components/GlassCard"
4
3
  import { useTheme } from "vuetify"
4
+ import { useMenuStore } from "@ogw_front/stores/menu"
5
5
 
6
6
  const CARD_WIDTH = 320
7
7
  const CARD_HEIGHT = 500
@@ -99,9 +99,20 @@
99
99
  color="transparent"
100
100
  @click.stop
101
101
  >
102
- <OptionCard :title="tooltip" width="320" :max-height="maxCardHeight">
103
- <slot name="options" />
104
- </OptionCard>
102
+ <GlassCard
103
+ @click.stop
104
+ :title="tooltip"
105
+ width="320"
106
+ :max-height="maxCardHeight"
107
+ :ripple="false"
108
+ variant="panel"
109
+ padding="pa-0"
110
+ class="elevation-24"
111
+ >
112
+ <v-card-text class="pa-5">
113
+ <slot name="options" />
114
+ </v-card-text>
115
+ </GlassCard>
105
116
  </v-sheet>
106
117
  </v-sheet>
107
118
  </template>
@@ -48,7 +48,6 @@
48
48
  get: () => dataStyleStore.meshEdgesVertexAttributeName(id.value),
49
49
  set: async (newValue) => {
50
50
  await dataStyleStore.setMeshEdgesVertexAttributeName(id.value, newValue)
51
- await dataStyleStore.updateMeshEdgesVertexAttribute(id.value)
52
51
  hybridViewerStore.remoteRender()
53
52
  },
54
53
  })
@@ -60,7 +59,6 @@
60
59
  newValue[0],
61
60
  newValue[1],
62
61
  )
63
- await dataStyleStore.updateMeshEdgesVertexAttribute(id.value)
64
62
  hybridViewerStore.remoteRender()
65
63
  },
66
64
  })
@@ -115,15 +113,7 @@
115
113
  <v-icon size="30" icon="mdi-ruler" v-tooltip:left="'Width'" />
116
114
  </v-col>
117
115
  <v-col justify="center">
118
- <v-slider
119
- v-model="size"
120
- hide-details
121
- min="0"
122
- max="20"
123
- step="2"
124
- thumb-color="black"
125
- ticks
126
- />
116
+ <v-slider v-model="size" hide-details min="0" max="20" step="2" />
127
117
  </v-col>
128
118
  </v-row>
129
119
  <v-row>
@@ -49,7 +49,6 @@
49
49
  get: () => dataStyleStore.meshCellsVertexAttributeName(id.value),
50
50
  set: async (newValue) => {
51
51
  await dataStyleStore.setMeshCellsVertexAttributeName(id.value, newValue)
52
- await dataStyleStore.updateMeshCellsVertexAttribute(id.value)
53
52
  hybridViewerStore.remoteRender()
54
53
  },
55
54
  })
@@ -61,7 +60,6 @@
61
60
  newValue[0],
62
61
  newValue[1],
63
62
  )
64
- await dataStyleStore.updateMeshCellsVertexAttribute(id.value)
65
63
  hybridViewerStore.remoteRender()
66
64
  },
67
65
  })
@@ -79,7 +77,6 @@
79
77
  get: () => dataStyleStore.meshCellsCellAttributeName(id.value),
80
78
  set: async (newValue) => {
81
79
  await dataStyleStore.setMeshCellsCellAttributeName(id.value, newValue)
82
- await dataStyleStore.updateMeshCellsCellAttribute(id.value)
83
80
  hybridViewerStore.remoteRender()
84
81
  },
85
82
  })
@@ -91,7 +88,6 @@
91
88
  newValue[0],
92
89
  newValue[1],
93
90
  )
94
- await dataStyleStore.updateMeshCellsCellAttribute(id.value)
95
91
  hybridViewerStore.remoteRender()
96
92
  },
97
93
  })
@@ -44,6 +44,59 @@
44
44
  hybridViewerStore.remoteRender()
45
45
  },
46
46
  })
47
+ const vertex_attribute_name = computed({
48
+ get: () => dataStyleStore.meshEdgesVertexAttributeName(id.value),
49
+ set: async (newValue) => {
50
+ await dataStyleStore.setMeshEdgesVertexAttributeName(id.value, newValue)
51
+ hybridViewerStore.remoteRender()
52
+ },
53
+ })
54
+ const vertex_attribute_range = computed({
55
+ get: () => dataStyleStore.meshEdgesVertexAttributeRange(id.value),
56
+ set: async (newValue) => {
57
+ await dataStyleStore.setMeshEdgesVertexAttributeRange(
58
+ id.value,
59
+ newValue[0],
60
+ newValue[1],
61
+ )
62
+ hybridViewerStore.remoteRender()
63
+ },
64
+ })
65
+ const vertex_attribute_color_map = computed({
66
+ get: () => dataStyleStore.meshEdgesVertexAttributeColorMap(id.value),
67
+ set: async (newValue) => {
68
+ await dataStyleStore.setMeshEdgesVertexAttributeColorMap(
69
+ id.value,
70
+ newValue,
71
+ )
72
+ hybridViewerStore.remoteRender()
73
+ },
74
+ })
75
+ const edge_attribute_name = computed({
76
+ get: () => dataStyleStore.meshEdgesEdgeAttributeName(id.value),
77
+ set: async (newValue) => {
78
+ await dataStyleStore.setMeshEdgesEdgeAttributeName(id.value, newValue)
79
+ hybridViewerStore.remoteRender()
80
+ },
81
+ })
82
+ const edge_attribute_range = computed({
83
+ get: () => dataStyleStore.meshEdgesEdgeAttributeRange(id.value),
84
+ set: async (newValue) => {
85
+ await dataStyleStore.setMeshEdgesEdgeAttributeRange(
86
+ id.value,
87
+ newValue[0],
88
+ newValue[1],
89
+ )
90
+ hybridViewerStore.remoteRender()
91
+ },
92
+ })
93
+ const edge_attribute_color_map = computed({
94
+ get: () => dataStyleStore.meshEdgesEdgeAttributeColorMap(id.value),
95
+ set: async (newValue) => {
96
+ await dataStyleStore.setMeshEdgesEdgeAttributeColorMap(id.value, newValue)
97
+ hybridViewerStore.remoteRender()
98
+ },
99
+ })
47
100
  </script>
48
101
 
49
102
  <template>
@@ -61,15 +114,7 @@
61
114
  <v-icon size="30" icon="mdi-ruler" v-tooltip:left="'Width'" />
62
115
  </v-col>
63
116
  <v-col justify="center">
64
- <v-slider
65
- v-model="size"
66
- hide-details
67
- min="0"
68
- max="20"
69
- step="2"
70
- thumb-color="black"
71
- ticks
72
- />
117
+ <v-slider v-model="size" hide-details min="0" max="20" step="2" />
73
118
  </v-col>
74
119
  </v-row>
75
120
  <v-row>
@@ -78,6 +123,12 @@
78
123
  :id="id"
79
124
  v-model:coloring_style_key="coloring_style_key"
80
125
  v-model:color="color"
126
+ v-model:vertex_attribute_name="vertex_attribute_name"
127
+ v-model:vertex_attribute_range="vertex_attribute_range"
128
+ v-model:vertex_attribute_color_map="vertex_attribute_color_map"
129
+ v-model:edge_attribute_name="edge_attribute_name"
130
+ v-model:edge_attribute_range="edge_attribute_range"
131
+ v-model:edge_attribute_color_map="edge_attribute_color_map"
81
132
  />
82
133
  </v-col>
83
134
  </v-row>
@@ -44,6 +44,34 @@
44
44
  hybridViewerStore.remoteRender()
45
45
  },
46
46
  })
47
+ const vertex_attribute_name = computed({
48
+ get: () => dataStyleStore.meshPointsVertexAttributeName(id.value),
49
+ set: async (newValue) => {
50
+ await dataStyleStore.setMeshPointsVertexAttributeName(id.value, newValue)
51
+ hybridViewerStore.remoteRender()
52
+ },
53
+ })
54
+ const vertex_attribute_range = computed({
55
+ get: () => dataStyleStore.meshPointsVertexAttributeRange(id.value),
56
+ set: async (newValue) => {
57
+ await dataStyleStore.setMeshPointsVertexAttributeRange(
58
+ id.value,
59
+ newValue[0],
60
+ newValue[1],
61
+ )
62
+ hybridViewerStore.remoteRender()
63
+ },
64
+ })
65
+ const vertex_attribute_color_map = computed({
66
+ get: () => dataStyleStore.meshPointsVertexAttributeColorMap(id.value),
67
+ set: async (newValue) => {
68
+ await dataStyleStore.setMeshPointsVertexAttributeColorMap(
69
+ id.value,
70
+ newValue,
71
+ )
72
+ hybridViewerStore.remoteRender()
73
+ },
74
+ })
47
75
  </script>
48
76
 
49
77
  <template>
@@ -61,15 +89,7 @@
61
89
  <v-icon size="30" icon="mdi-ruler" v-tooltip:left="'Size'" />
62
90
  </v-col>
63
91
  <v-col justify="center">
64
- <v-slider
65
- v-model="size"
66
- hide-details
67
- min="0"
68
- max="20"
69
- step="2"
70
- thumb-color="black"
71
- ticks
72
- />
92
+ <v-slider v-model="size" hide-details min="0" max="20" step="2" />
73
93
  </v-col>
74
94
  </v-row>
75
95
  <v-row>
@@ -78,6 +98,9 @@
78
98
  :id="id"
79
99
  v-model:coloring_style_key="coloring_style_key"
80
100
  v-model:color="color"
101
+ v-model:vertex_attribute_name="vertex_attribute_name"
102
+ v-model:vertex_attribute_range="vertex_attribute_range"
103
+ v-model:vertex_attribute_color_map="vertex_attribute_color_map"
81
104
  />
82
105
  </v-col>
83
106
  </v-row>