diff --git a/app/components/Viewer/Generic/Model/BlocksOptions.vue b/app/components/Viewer/Generic/Model/BlocksOptions.vue index 551b2d8b..b594b9f8 100644 --- a/app/components/Viewer/Generic/Model/BlocksOptions.vue +++ b/app/components/Viewer/Generic/Model/BlocksOptions.vue @@ -44,28 +44,24 @@ const blocksColor = computed({ const blockColor = computed({ get: () => dataStyleStore.modelBlockColor(modelId, blockId), set: async (color) => { - if (blockId) { - await dataStyleStore.setModelBlocksColor(modelId, [blockId], color); - hybridViewerStore.remoteRender(); - } + await dataStyleStore.setModelBlocksColor(modelId, [blockId], color); + hybridViewerStore.remoteRender(); }, }); -const blocksColorMode = computed({ - get: () => dataStyleStore.getModelComponentTypeColorMode(modelId, "Block"), - set: async (colorMode) => { - await dataStyleStore.setModelComponentTypeColorMode(modelId, "Block", colorMode); +const blocksActiveColoring = computed({ + get: () => dataStyleStore.getModelComponentTypeActiveColoring(modelId, "Block"), + set: async (coloringType) => { + await dataStyleStore.setModelComponentTypeActiveColoring(modelId, "Block", coloringType); hybridViewerStore.remoteRender(); }, }); -const blockColorMode = computed({ - get: () => dataStyleStore.modelBlockColorMode(modelId, blockId), - set: async (colorMode) => { - if (blockId) { - await dataStyleStore.setModelComponentColorMode(modelId, blockId, colorMode); - hybridViewerStore.remoteRender(); - } +const blockActiveColoring = computed({ + get: () => dataStyleStore.modelBlockActiveColoring(modelId, blockId), + set: async (coloringType) => { + await dataStyleStore.setModelBlocksActiveColoring(modelId, [blockId], coloringType); + hybridViewerStore.remoteRender(); }, }); @@ -211,7 +207,7 @@ const polyhedronSchema = back_schemas.opengeodeweb_back.model_component_polyhedr dataStyleStore.modelCornerColor(modelId, cornerId), set: async (color) => { - if (cornerId) { - await dataStyleStore.setModelCornersColor(modelId, [cornerId], color); - hybridViewerStore.remoteRender(); - } + await dataStyleStore.setModelCornersColor(modelId, [cornerId], color); + hybridViewerStore.remoteRender(); }, }); -const cornersColorMode = computed({ - get: () => dataStyleStore.getModelComponentTypeColorMode(modelId, "Corner"), - set: async (colorMode) => { - await dataStyleStore.setModelComponentTypeColorMode(modelId, "Corner", colorMode); +const cornersActiveColoring = computed({ + get: () => dataStyleStore.getModelComponentTypeActiveColoring(modelId, "Corner"), + set: async (coloringType) => { + await dataStyleStore.setModelComponentTypeActiveColoring(modelId, "Corner", coloringType); hybridViewerStore.remoteRender(); }, }); -const cornerColorMode = computed({ - get: () => dataStyleStore.modelCornerColorMode(modelId, cornerId), - set: async (colorMode) => { - if (cornerId) { - await dataStyleStore.setModelComponentColorMode(modelId, cornerId, colorMode); - hybridViewerStore.remoteRender(); - } +const cornerActiveColoring = computed({ + get: () => dataStyleStore.modelCornerActiveColoring(modelId, cornerId), + set: async (coloringType) => { + await dataStyleStore.setModelCornersActiveColoring(modelId, [cornerId], coloringType); + hybridViewerStore.remoteRender(); }, }); @@ -148,7 +144,7 @@ const vertexSchema = back_schemas.opengeodeweb_back.model_component_vertex_attri dataStyleStore.modelLineColor(modelId, lineId), set: async (color) => { - if (lineId) { - await dataStyleStore.setModelLinesColor(modelId, [lineId], color); - hybridViewerStore.remoteRender(); - } + await dataStyleStore.setModelLinesColor(modelId, [lineId], color); + hybridViewerStore.remoteRender(); }, }); -const linesColorMode = computed({ - get: () => dataStyleStore.getModelComponentTypeColorMode(modelId, "Line"), - set: async (colorMode) => { - await dataStyleStore.setModelComponentTypeColorMode(modelId, "Line", colorMode); +const linesActiveColoring = computed({ + get: () => dataStyleStore.getModelComponentTypeActiveColoring(modelId, "Line"), + set: async (coloringType) => { + await dataStyleStore.setModelComponentTypeActiveColoring(modelId, "Line", coloringType); hybridViewerStore.remoteRender(); }, }); -const lineColorMode = computed({ - get: () => dataStyleStore.modelLineColorMode(modelId, lineId), - set: async (colorMode) => { - if (lineId) { - await dataStyleStore.setModelComponentColorMode(modelId, lineId, colorMode); - hybridViewerStore.remoteRender(); - } +const lineActiveColoring = computed({ + get: () => dataStyleStore.modelLineActiveColoring(modelId, lineId), + set: async (coloringType) => { + await dataStyleStore.setModelLinesActiveColoring(modelId, [lineId], coloringType); + hybridViewerStore.remoteRender(); }, }); @@ -207,7 +203,7 @@ const edgeSchema = back_schemas.opengeodeweb_back.model_component_edge_attribute import OptionsSection from "@ogw_front/components/Viewer/Options/OptionsSection.vue"; -import ViewerOptionsColorPicker from "@ogw_front/components/Viewer/Options/ColorPicker.vue"; +import ViewerOptionsColoringTypeSelector from "@ogw_front/components/Viewer/Options/ColoringTypeSelector.vue"; import VisibilitySwitch from "@ogw_front/components/Viewer/Options/VisibilitySwitch.vue"; import { useDataStore } from "@ogw_front/stores/data"; import { useDataStyleStore } from "@ogw_front/stores/data_style"; @@ -86,43 +86,36 @@ const modelVisibility = computed({ }, }); -const colorModes = [ - { title: "Constant", value: "constant" }, - { title: "Random", value: "random" }, -]; - -const modelComponentsColorMode = ref("constant"); - -const modelComponentsColor = computed({ - get: () => { - if (selection.value.length > 0) { - return dataStyleStore.getModelComponentColor(modelId.value, selection.value[0]); - } - return { red: 255, green: 255, blue: 255 }; - }, - set: async (color) => { - if (selection.value.length > 0) { - await dataStyleStore.setModelComponentsColor( - modelId.value, - selection.value, - color, - modelComponentsColorMode.value, - ); - hybridViewerStore.remoteRender(); - } +const modelComponentsActiveColoring = computed({ + get: () => dataStyleStore.getModelActiveColoring(modelId.value), + set: async (coloringType) => { + await dataStyleStore.mutateStyle(modelId.value, { + coloring: { active: coloringType }, + }); + await dataStyleStore.setModelComponentsColor( + modelId.value, + selection.value, + modelComponentsColor.value, + coloringType, + ); + hybridViewerStore.remoteRender(); }, }); -watch(modelComponentsColorMode, async (colorMode) => { - if (colorMode === "random" && selection.value.length > 0) { +const modelComponentsColor = computed({ + get: () => dataStyleStore.getModelColor(modelId.value), + set: async (color) => { + await dataStyleStore.mutateStyle(modelId.value, { + coloring: { constant: color }, + }); await dataStyleStore.setModelComponentsColor( modelId.value, selection.value, - undefined, - colorMode, + color, + modelComponentsActiveColoring.value, ); hybridViewerStore.remoteRender(); - } + }, }); @@ -133,20 +126,13 @@ watch(modelComponentsColorMode, async (colorMode) => { - Color Mode - - - dataStyleStore.modelSurfaceColor(modelId, surfaceId), set: async (color) => { - if (surfaceId) { - await dataStyleStore.setModelSurfacesColor(modelId, [surfaceId], color); - hybridViewerStore.remoteRender(); - } + await dataStyleStore.setModelSurfacesColor(modelId, [surfaceId], color); + hybridViewerStore.remoteRender(); }, }); -const surfacesColorMode = computed({ - get: () => dataStyleStore.getModelComponentTypeColorMode(modelId, "Surface"), - set: async (colorMode) => { - await dataStyleStore.setModelComponentTypeColorMode(modelId, "Surface", colorMode); +const surfacesActiveColoring = computed({ + get: () => dataStyleStore.getModelComponentTypeActiveColoring(modelId, "Surface"), + set: async (coloringType) => { + await dataStyleStore.setModelComponentTypeActiveColoring(modelId, "Surface", coloringType); hybridViewerStore.remoteRender(); }, }); -const surfaceColorMode = computed({ - get: () => dataStyleStore.modelSurfaceColorMode(modelId, surfaceId), - set: async (colorMode) => { - if (surfaceId) { - await dataStyleStore.setModelComponentColorMode(modelId, surfaceId, colorMode); - hybridViewerStore.remoteRender(); - } +const surfaceActiveColoring = computed({ + get: () => dataStyleStore.modelSurfaceActiveColoring(modelId, surfaceId), + set: async (coloringType) => { + await dataStyleStore.setModelSurfacesActiveColoring(modelId, [surfaceId], coloringType); + hybridViewerStore.remoteRender(); }, }); @@ -215,7 +211,7 @@ const polygonSchema = back_schemas.opengeodeweb_back.model_component_polygon_att value ?? name.value, +}); + const range = defineModel("range", { type: Array }); const colorMap = defineModel("colorMap", { type: String }); diff --git a/app/components/Viewer/Options/ColoringTypeSelector.vue b/app/components/Viewer/Options/ColoringTypeSelector.vue index 4d4049ca..c9a70146 100644 --- a/app/components/Viewer/Options/ColoringTypeSelector.vue +++ b/app/components/Viewer/Options/ColoringTypeSelector.vue @@ -98,8 +98,8 @@ const has_polyhedra = computed( hasColorMap("polyhedron"), ); -const color_dict = { name: "Color", value: "color" }; -const random_dict = { name: "Random color", value: "random" }; +const color_dict = { name: "Constant", value: "constant" }; +const random_dict = { name: "Random", value: "random" }; const textures_dict = { name: "Textures", value: "textures" }; const vertex_dict = { name: "Vertex attribute", value: "vertex" }; const edge_dict = { name: "Edge attribute", value: "edge" }; @@ -144,13 +144,35 @@ const coloring_styles = computed(() => { const coloring_style_label = ref(""); -watch(coloring_style_label, (value) => { - const index = coloring_styles.value.labels.indexOf(value); - if (index !== -1) { - coloring_style_key.value = coloring_styles.value.values[index]; - } +const active_key = computed(() => { + const index = coloring_styles.value.labels.indexOf(coloring_style_label.value); + return index === -1 ? coloring_style_key.value : coloring_styles.value.values[index]; }); +watch( + [ + coloring_style_label, + vertex_attribute_name, + edge_attribute_name, + cell_attribute_name, + polygon_attribute_name, + polyhedron_attribute_name, + ], + () => { + const key = active_key.value; + const names = { + vertex: vertex_attribute_name.value, + edge: edge_attribute_name.value, + cell: cell_attribute_name.value, + polygon: polygon_attribute_name.value, + polyhedron: polyhedron_attribute_name.value, + }; + if (!(key in names) || names[key]) { + coloring_style_key.value = key; + } + }, +); + watch( coloring_style_key, (value) => { @@ -173,7 +195,7 @@ watch( data-testid="coloringStyleSelector" v-model="coloring_style_label" :items="coloring_styles.labels" - label="Select a coloring style" + label="Select coloring style" density="compact" hide-details /> @@ -181,13 +203,13 @@ watch( -