@geode/opengeodeweb-front 9.9.0-rc.3 → 9.10.0-rc.1
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.
- package/assets/viewer_svgs/edged_curve_edges.svg +67 -0
- package/assets/viewer_svgs/edged_curve_points.svg +95 -0
- package/assets/viewer_svgs/grid_2d_cells.svg +78 -0
- package/assets/viewer_svgs/grid_2d_edges.svg +71 -0
- package/assets/viewer_svgs/grid_2d_points.svg +108 -0
- package/assets/viewer_svgs/grid_3d_cells.svg +76 -0
- package/assets/viewer_svgs/grid_3d_edges.svg +72 -0
- package/assets/viewer_svgs/grid_3d_facets.svg +102 -0
- package/assets/viewer_svgs/grid_3d_points.svg +172 -0
- package/assets/viewer_svgs/point_set_points.svg +86 -0
- package/assets/viewer_svgs/solid_edges.svg +96 -0
- package/assets/viewer_svgs/solid_facets.svg +119 -0
- package/assets/viewer_svgs/solid_points.svg +134 -0
- package/assets/viewer_svgs/solid_polyhedra.svg +103 -0
- package/assets/viewer_svgs/surface_edges.svg +73 -0
- package/assets/viewer_svgs/surface_points.svg +115 -0
- package/assets/viewer_svgs/surface_triangles.svg +92 -0
- package/components/ContextMenu.vue +123 -0
- package/components/ContextMenuItem.vue +90 -0
- package/components/EdgedCurve/EdgesOptions.vue +14 -0
- package/components/EdgedCurve/PointsOptions.vue +14 -0
- package/components/Generic/Mesh/EdgesOptions.vue +48 -0
- package/components/Generic/Mesh/PointsOptions.vue +73 -0
- package/components/Generic/Mesh/PolygonsOptions.vue +65 -0
- package/components/Generic/Mesh/PolyhedraOptions.vue +58 -0
- package/components/Generic/Model/EdgesOptions.vue +29 -0
- package/components/Generic/Model/PointsOptions.vue +53 -0
- package/components/Grid/2D/CellsOptions.vue +15 -0
- package/components/Grid/2D/EdgesOptions.vue +14 -0
- package/components/Grid/2D/PointsOptions.vue +14 -0
- package/components/Grid/3D/CellsOptions.vue +15 -0
- package/components/Grid/3D/EdgesOptions.vue +14 -0
- package/components/Grid/3D/FacetsOptions.vue +15 -0
- package/components/Grid/3D/PointsOptions.vue +14 -0
- package/components/HybridRenderingView.vue +41 -0
- package/components/HybridSolid/EdgesOptions.vue +14 -0
- package/components/HybridSolid/PointsOptions.vue +14 -0
- package/components/HybridSolid/PolygonsOptions.vue +14 -0
- package/components/HybridSolid/PolyhedraOptions.vue +14 -0
- package/components/Options/ColorPicker.vue +25 -0
- package/components/Options/ColoringTypeSelector.vue +125 -0
- package/components/Options/PolygonAttributeSelector.vue +59 -0
- package/components/Options/PolyhedronAttributeSelector.vue +63 -0
- package/components/Options/TextureItem.vue +116 -0
- package/components/Options/TexturesSelector.vue +67 -0
- package/components/Options/VertexAttributeSelector.vue +60 -0
- package/components/Options/VisibilitySwitch.vue +14 -0
- package/components/PointSet/PointsOptions.vue +14 -0
- package/components/PointSet/SpecificPointsOptions.vue +74 -0
- package/components/PolygonalSurface/EdgesOptions.vue +14 -0
- package/components/PolygonalSurface/PointsOptions.vue +14 -0
- package/components/PolygonalSurface/PolygonsOptions.vue +14 -0
- package/components/Solid/EdgesOptions.vue +14 -0
- package/components/Solid/PointsOptions.vue +14 -0
- package/components/Solid/PolygonsOptions.vue +14 -0
- package/components/Solid/PolyhedraOptions.vue +14 -0
- package/components/TetrahedralSolid/TetrahedraOptions.vue +15 -0
- package/components/TetrahedralSolid/TrianglesOptions.vue +15 -0
- package/components/TriangulatedSurface/EdgesOptions.vue +14 -0
- package/components/TriangulatedSurface/PointsOptions.vue +14 -0
- package/components/TriangulatedSurface/TrianglesOptions.vue +15 -0
- package/components/VeaseViewToolbar.vue +107 -0
- package/components/Viewer/BreadCrumb.vue +61 -0
- package/components/Viewer/Tree/ObjectTree.vue +170 -0
- package/components/Viewer/TreeComponent.vue +93 -0
- package/components/Viewer/TreeObject.vue +100 -0
- package/internal_stores/data_style_state.js +18 -0
- package/internal_stores/mesh/edges.js +106 -0
- package/internal_stores/mesh/index.js +50 -0
- package/internal_stores/mesh/points.js +131 -0
- package/internal_stores/mesh/polygons.js +159 -0
- package/internal_stores/mesh/polyhedra.js +136 -0
- package/internal_stores/model/blocks.js +60 -0
- package/internal_stores/model/corners.js +63 -0
- package/internal_stores/model/edges.js +47 -0
- package/internal_stores/model/index.js +154 -0
- package/internal_stores/model/lines.js +81 -0
- package/internal_stores/model/points.js +61 -0
- package/internal_stores/model/surfaces.js +60 -0
- package/package.json +1 -1
- package/stores/data_base.js +148 -0
- package/stores/data_style.js +57 -0
- package/stores/hybrid_viewer.js +193 -0
- package/stores/menu.js +182 -0
- package/stores/treeview.js +64 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<v-color-picker
|
|
3
|
+
ref="el"
|
|
4
|
+
v-model="color"
|
|
5
|
+
flat
|
|
6
|
+
canvas-height="100"
|
|
7
|
+
hide-inputs
|
|
8
|
+
width="100%"
|
|
9
|
+
mode="rgb"
|
|
10
|
+
/>
|
|
11
|
+
</template>
|
|
12
|
+
|
|
13
|
+
<script setup>
|
|
14
|
+
const el = useTemplateRef("el")
|
|
15
|
+
const model = defineModel()
|
|
16
|
+
const { pressed } = useMousePressed({ target: el })
|
|
17
|
+
|
|
18
|
+
const color = ref(model)
|
|
19
|
+
|
|
20
|
+
watch(pressed, (value) => {
|
|
21
|
+
if (!value) {
|
|
22
|
+
model.value = color.value
|
|
23
|
+
}
|
|
24
|
+
})
|
|
25
|
+
</script>
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<v-row justify="center" align="center">
|
|
3
|
+
<v-divider />
|
|
4
|
+
|
|
5
|
+
<v-col>
|
|
6
|
+
<v-row justify="center" align="center">
|
|
7
|
+
<v-col cols="auto">
|
|
8
|
+
<v-icon
|
|
9
|
+
size="30"
|
|
10
|
+
icon="mdi-format-color-fill"
|
|
11
|
+
v-tooltip:left="'Coloring'"
|
|
12
|
+
/>
|
|
13
|
+
</v-col>
|
|
14
|
+
<v-col>
|
|
15
|
+
<v-select
|
|
16
|
+
v-model="coloring_style_label"
|
|
17
|
+
:items="coloring_styles.labels"
|
|
18
|
+
label="Select a coloring style"
|
|
19
|
+
density="compact"
|
|
20
|
+
/>
|
|
21
|
+
</v-col>
|
|
22
|
+
</v-row>
|
|
23
|
+
<v-row>
|
|
24
|
+
<v-spacer />
|
|
25
|
+
<v-col cols="10">
|
|
26
|
+
<template v-if="coloring_style_key === color_dict['value']">
|
|
27
|
+
<ViewerOptionsColorPicker v-model="color" />
|
|
28
|
+
</template>
|
|
29
|
+
<template v-if="coloring_style_key === textures_dict['value']">
|
|
30
|
+
<ViewerOptionsTexturesSelector v-model="textures" :id="id" />
|
|
31
|
+
</template>
|
|
32
|
+
<template v-if="coloring_style_key === vertex_dict['value']">
|
|
33
|
+
<ViewerOptionsVertexAttributeSelector
|
|
34
|
+
v-model="vertex_attribute"
|
|
35
|
+
:id="id"
|
|
36
|
+
/>
|
|
37
|
+
</template>
|
|
38
|
+
<!-- <template v-if="coloring_style_key === edge_dict['value']">
|
|
39
|
+
<ViewerOptionsEdgeAttributeSelector v-model="edge_attribute" :id="id" />
|
|
40
|
+
</template> -->
|
|
41
|
+
<template v-if="coloring_style_key === polygon_dict['value']">
|
|
42
|
+
<ViewerOptionsPolygonAttributeSelector
|
|
43
|
+
v-model="polygon_attribute"
|
|
44
|
+
:id="id"
|
|
45
|
+
/>
|
|
46
|
+
</template>
|
|
47
|
+
<template v-if="coloring_style_key === polyhedron_dict['value']">
|
|
48
|
+
<ViewerOptionsPolyhedronAttributeSelector
|
|
49
|
+
v-model="polyhedron_attribute"
|
|
50
|
+
:id="id"
|
|
51
|
+
/>
|
|
52
|
+
</template>
|
|
53
|
+
</v-col>
|
|
54
|
+
</v-row>
|
|
55
|
+
</v-col>
|
|
56
|
+
</v-row>
|
|
57
|
+
</template>
|
|
58
|
+
|
|
59
|
+
<script setup>
|
|
60
|
+
const coloring_style_key = defineModel("coloring_style_key")
|
|
61
|
+
|
|
62
|
+
const color = defineModel("color")
|
|
63
|
+
const textures = defineModel("textures")
|
|
64
|
+
const vertex_attribute = defineModel("vertex_attribute")
|
|
65
|
+
// const edge_attribute = defineModel("edge_attribute");
|
|
66
|
+
const polygon_attribute = defineModel("polygon_attribute")
|
|
67
|
+
const polyhedron_attribute = defineModel("polyhedron_attribute")
|
|
68
|
+
|
|
69
|
+
const props = defineProps({
|
|
70
|
+
id: { type: String, required: true },
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
const has_color = computed(() => (color.value !== undefined ? true : false))
|
|
74
|
+
const has_textures = computed(() =>
|
|
75
|
+
textures.value !== undefined ? true : false,
|
|
76
|
+
)
|
|
77
|
+
const has_vertex = computed(() =>
|
|
78
|
+
vertex_attribute.value !== undefined ? true : false,
|
|
79
|
+
)
|
|
80
|
+
const has_polygons = computed(() =>
|
|
81
|
+
polygon_attribute.value !== undefined ? true : false,
|
|
82
|
+
)
|
|
83
|
+
const has_polyhedra = computed(() =>
|
|
84
|
+
polyhedron_attribute.value !== undefined ? true : false,
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
const color_dict = { name: "Color", value: "color" }
|
|
88
|
+
const textures_dict = { name: "Textures", value: "textures" }
|
|
89
|
+
const vertex_dict = { name: "Vertex attribute", value: "vertex" }
|
|
90
|
+
// const edge_dict = { name: "Edge attribute", value: "edge" };
|
|
91
|
+
const polygon_dict = { name: "Polygon attribute", value: "polygon" }
|
|
92
|
+
const polyhedron_dict = {
|
|
93
|
+
name: "Polyhedron attribute",
|
|
94
|
+
value: "polyhedron",
|
|
95
|
+
}
|
|
96
|
+
const coloring_styles = computed(() => {
|
|
97
|
+
let array = []
|
|
98
|
+
if (has_color.value) array.push(color_dict)
|
|
99
|
+
if (has_textures.value) array.push(textures_dict)
|
|
100
|
+
if (has_vertex.value) array.push(vertex_dict)
|
|
101
|
+
// if (has_edges.value) array.push(edge_dict);
|
|
102
|
+
if (has_polygons.value) array.push(polygon_dict)
|
|
103
|
+
if (has_polyhedra.value) array.push(polyhedron_dict)
|
|
104
|
+
|
|
105
|
+
const labels = array.map((coloring) => {
|
|
106
|
+
return coloring.name
|
|
107
|
+
})
|
|
108
|
+
const values = array.map((coloring) => {
|
|
109
|
+
return coloring.value
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
return { labels, values }
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
const coloring_style_label = ref(
|
|
116
|
+
coloring_styles.value.labels[
|
|
117
|
+
coloring_styles.value.values.indexOf(coloring_style_key.value)
|
|
118
|
+
],
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
watch(coloring_style_label, (value) => {
|
|
122
|
+
coloring_style_key.value =
|
|
123
|
+
coloring_styles.value.values[coloring_styles.value.labels.indexOf(value)]
|
|
124
|
+
})
|
|
125
|
+
</script>
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<v-select
|
|
3
|
+
v-model="polygon_attribute_name"
|
|
4
|
+
:items="polygon_attribute_names"
|
|
5
|
+
label="Select an attribute"
|
|
6
|
+
density="compact"
|
|
7
|
+
/>
|
|
8
|
+
</template>
|
|
9
|
+
|
|
10
|
+
<script setup>
|
|
11
|
+
import back_schemas from "@geode/opengeodeweb-back/opengeodeweb_back_schemas.json"
|
|
12
|
+
|
|
13
|
+
const dataBaseStore = useDataBaseStore()
|
|
14
|
+
|
|
15
|
+
const props = defineProps({
|
|
16
|
+
id: { type: String, required: true },
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
const model = defineModel()
|
|
20
|
+
const polygon_attribute_name = ref("")
|
|
21
|
+
const polygon_attribute_names = ref([])
|
|
22
|
+
const polygon_attribute = reactive({ name: polygon_attribute_name.value })
|
|
23
|
+
|
|
24
|
+
const meta_data = computed(() => {
|
|
25
|
+
return dataBaseStore.itemMetaDatas(props.id)
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
onMounted(() => {
|
|
29
|
+
if (model.value != null) {
|
|
30
|
+
polygon_attribute_name.value = model.value.name
|
|
31
|
+
}
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
watch(polygon_attribute_name, (value) => {
|
|
35
|
+
polygon_attribute.name = value
|
|
36
|
+
model.value = polygon_attribute
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
onMounted(() => {
|
|
40
|
+
getVertexAttributes()
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
function getVertexAttributes() {
|
|
44
|
+
api_fetch(
|
|
45
|
+
{
|
|
46
|
+
schema: back_schemas.opengeodeweb_back.polygon_attribute_names,
|
|
47
|
+
params: {
|
|
48
|
+
input_geode_object: meta_data.value.geode_object,
|
|
49
|
+
filename: meta_data.value.native_filename,
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
response_function: (response) => {
|
|
54
|
+
polygon_attribute_names.value = response._data.polygon_attribute_names
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
</script>
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<v-select
|
|
3
|
+
v-model="polyhedron_attribute_name"
|
|
4
|
+
:items="polyhedron_attribute_names"
|
|
5
|
+
label="Select an attribute"
|
|
6
|
+
density="compact"
|
|
7
|
+
/>
|
|
8
|
+
</template>
|
|
9
|
+
|
|
10
|
+
<script setup>
|
|
11
|
+
import back_schemas from "@geode/opengeodeweb-back/opengeodeweb_back_schemas.json"
|
|
12
|
+
|
|
13
|
+
const model = defineModel()
|
|
14
|
+
|
|
15
|
+
const polyhedron_attribute_name = ref("")
|
|
16
|
+
|
|
17
|
+
onMounted(() => {
|
|
18
|
+
if (model.value != null) {
|
|
19
|
+
polyhedron_attribute_name.value = model.value.name
|
|
20
|
+
}
|
|
21
|
+
})
|
|
22
|
+
const polyhedron_attribute = reactive({
|
|
23
|
+
name: polyhedron_attribute_name.value,
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
watch(polyhedron_attribute_name, (value) => {
|
|
27
|
+
polyhedron_attribute.name = value
|
|
28
|
+
model.value = polyhedron_attribute
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
const props = defineProps({
|
|
32
|
+
id: { type: String, required: true },
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
const dataBaseStore = useDataBaseStore()
|
|
36
|
+
|
|
37
|
+
const polyhedron_attribute_names = ref([])
|
|
38
|
+
const meta_data = computed(() => {
|
|
39
|
+
return dataBaseStore.itemMetaDatas(props.id)
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
onMounted(() => {
|
|
43
|
+
getVertexAttributes()
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
function getVertexAttributes() {
|
|
47
|
+
api_fetch(
|
|
48
|
+
{
|
|
49
|
+
schema: back_schemas.opengeodeweb_back.polyhedron_attribute_names,
|
|
50
|
+
params: {
|
|
51
|
+
input_geode_object: meta_data.value.geode_object,
|
|
52
|
+
filename: meta_data.value.native_filename,
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
response_function: (response) => {
|
|
57
|
+
polyhedron_attribute_names.value =
|
|
58
|
+
response._data.polyhedron_attribute_names
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
</script>
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<v-col cols="7" class="pa-1 ml-3">
|
|
3
|
+
<v-select
|
|
4
|
+
v-model="texture_name"
|
|
5
|
+
:items="texture_coordinates"
|
|
6
|
+
label="Select a texture"
|
|
7
|
+
density="compact"
|
|
8
|
+
/>
|
|
9
|
+
</v-col>
|
|
10
|
+
<v-badge
|
|
11
|
+
:model-value="texture_file_name != ''"
|
|
12
|
+
color="white"
|
|
13
|
+
floating
|
|
14
|
+
dot
|
|
15
|
+
offset-x="10"
|
|
16
|
+
offset-y="10"
|
|
17
|
+
>
|
|
18
|
+
<v-col cols="1" class="ma-1" justify="center" align="center">
|
|
19
|
+
<FileUploader
|
|
20
|
+
@files_uploaded="files_uploaded_event($event, index)"
|
|
21
|
+
:accept="['image/png', 'image/jpeg', 'image/bmp']"
|
|
22
|
+
:auto_upload="true"
|
|
23
|
+
:multiple="true"
|
|
24
|
+
:mini="true"
|
|
25
|
+
class="mt-2"
|
|
26
|
+
/>
|
|
27
|
+
</v-col>
|
|
28
|
+
</v-badge>
|
|
29
|
+
<v-col v-if="texture_name == '' || texture_file_name == ''" cols="1">
|
|
30
|
+
<v-icon
|
|
31
|
+
size="20"
|
|
32
|
+
icon="mdi-close-circle"
|
|
33
|
+
v-tooltip:bottom="'Invalid texture'"
|
|
34
|
+
/>
|
|
35
|
+
</v-col>
|
|
36
|
+
</template>
|
|
37
|
+
|
|
38
|
+
<script setup>
|
|
39
|
+
import back_schemas from "@geode/opengeodeweb-back/opengeodeweb_back_schemas.json"
|
|
40
|
+
|
|
41
|
+
const dataBaseStore = useDataBaseStore()
|
|
42
|
+
|
|
43
|
+
const emit = defineEmits(["update_value"])
|
|
44
|
+
|
|
45
|
+
const props = defineProps({
|
|
46
|
+
id: { type: String, required: true },
|
|
47
|
+
texture_name: { type: String, required: true },
|
|
48
|
+
texture_file_name: { type: String, required: true },
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
const texture_name = ref("")
|
|
52
|
+
texture_name.value = props.texture_name
|
|
53
|
+
|
|
54
|
+
const texture_file_name = ref("")
|
|
55
|
+
texture_file_name.value = props.texture_file_name
|
|
56
|
+
|
|
57
|
+
const texture_coordinates = ref([])
|
|
58
|
+
|
|
59
|
+
const meta_data = computed(() => {
|
|
60
|
+
return dataBaseStore.itemMetaDatas(props.id)
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
onMounted(() => {
|
|
64
|
+
getTextureCoordinates()
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
function getTextureCoordinates() {
|
|
68
|
+
api_fetch(
|
|
69
|
+
{
|
|
70
|
+
schema: back_schemas.opengeodeweb_back.texture_coordinates,
|
|
71
|
+
params: {
|
|
72
|
+
input_geode_object: meta_data.value.geode_object,
|
|
73
|
+
filename: meta_data.value.native_filename,
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
response_function: (response) => {
|
|
78
|
+
texture_coordinates.value = response._data.texture_coordinates
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
async function files_uploaded_event(value) {
|
|
85
|
+
if (value.length) {
|
|
86
|
+
await api_fetch(
|
|
87
|
+
{
|
|
88
|
+
schema: back_schemas.opengeodeweb_back.save_viewable_file,
|
|
89
|
+
params: {
|
|
90
|
+
input_geode_object: "RasterImage2D",
|
|
91
|
+
filename: value[0].name,
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
response_function: async (response) => {
|
|
96
|
+
texture_file_name.value = response._data.viewable_file_name
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
)
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
watch(texture_name, (value) => {
|
|
104
|
+
emit("update_value", { key: "texture_name", value })
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
watch(texture_file_name, (value) => {
|
|
108
|
+
emit("update_value", { key: "texture_file_name", value })
|
|
109
|
+
})
|
|
110
|
+
</script>
|
|
111
|
+
|
|
112
|
+
<style>
|
|
113
|
+
.v-input__details {
|
|
114
|
+
display: none;
|
|
115
|
+
}
|
|
116
|
+
</style>
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<v-row
|
|
3
|
+
v-for="(texture, index) in internal_textures"
|
|
4
|
+
:key="texture"
|
|
5
|
+
align="center"
|
|
6
|
+
>
|
|
7
|
+
<br />
|
|
8
|
+
|
|
9
|
+
<v-col cols="1" class="pa-0">
|
|
10
|
+
<v-icon
|
|
11
|
+
v-if="internal_textures.length > 1"
|
|
12
|
+
icon="mdi-minus"
|
|
13
|
+
size="20"
|
|
14
|
+
v-tooltip:bottom="'Remove texture'"
|
|
15
|
+
@click="internal_textures.splice(index, 1)"
|
|
16
|
+
/>
|
|
17
|
+
</v-col>
|
|
18
|
+
<ViewerOptionsTextureItem
|
|
19
|
+
:id="id"
|
|
20
|
+
:texture_name="internal_textures[index].texture_name"
|
|
21
|
+
:texture_file_name="internal_textures[index].texture_file_name"
|
|
22
|
+
@update_value="update_value_event($event, index)"
|
|
23
|
+
/>
|
|
24
|
+
</v-row>
|
|
25
|
+
<v-row>
|
|
26
|
+
<v-spacer />
|
|
27
|
+
<v-col cols="3">
|
|
28
|
+
<v-icon
|
|
29
|
+
v-if="internal_textures.length < 4"
|
|
30
|
+
icon="mdi-plus"
|
|
31
|
+
v-tooltip:bottom="'Add a texture'"
|
|
32
|
+
size="20"
|
|
33
|
+
@click="
|
|
34
|
+
internal_textures.push({ texture_name: '', texture_file_name: '' })
|
|
35
|
+
"
|
|
36
|
+
/>
|
|
37
|
+
</v-col>
|
|
38
|
+
</v-row>
|
|
39
|
+
</template>
|
|
40
|
+
|
|
41
|
+
<script setup>
|
|
42
|
+
const textures = defineModel()
|
|
43
|
+
|
|
44
|
+
const internal_textures = ref([])
|
|
45
|
+
|
|
46
|
+
const props = defineProps({
|
|
47
|
+
id: { type: String, required: true },
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
onMounted(() => {
|
|
51
|
+
if (textures.value != null) {
|
|
52
|
+
internal_textures.value = textures.value
|
|
53
|
+
} else {
|
|
54
|
+
internal_textures.value = [{ texture_name: "", texture_file_name: "" }]
|
|
55
|
+
}
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
function update_value_event($event, index) {
|
|
59
|
+
internal_textures.value[index][$event.key] = $event.value
|
|
60
|
+
const filtered = internal_textures.value.filter((texture) => {
|
|
61
|
+
return texture.texture_name != "" && texture.texture_file_name != ""
|
|
62
|
+
})
|
|
63
|
+
if (filtered.length != 0) {
|
|
64
|
+
textures.value = filtered
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
</script>
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<v-select
|
|
3
|
+
v-model="vertex_attribute_name"
|
|
4
|
+
:items="vertex_attribute_names"
|
|
5
|
+
label="Select an attribute"
|
|
6
|
+
density="compact"
|
|
7
|
+
/>
|
|
8
|
+
</template>
|
|
9
|
+
|
|
10
|
+
<script setup>
|
|
11
|
+
import back_schemas from "@geode/opengeodeweb-back/opengeodeweb_back_schemas.json"
|
|
12
|
+
|
|
13
|
+
const model = defineModel()
|
|
14
|
+
|
|
15
|
+
const vertex_attribute_name = ref("")
|
|
16
|
+
|
|
17
|
+
onMounted(() => {
|
|
18
|
+
if (model.value != null) {
|
|
19
|
+
vertex_attribute_name.value = model.value.name
|
|
20
|
+
}
|
|
21
|
+
})
|
|
22
|
+
const vertex_attribute = reactive({ name: vertex_attribute_name.value })
|
|
23
|
+
|
|
24
|
+
watch(vertex_attribute_name, (value) => {
|
|
25
|
+
vertex_attribute.name = value
|
|
26
|
+
model.value = vertex_attribute
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
const props = defineProps({
|
|
30
|
+
id: { type: String, required: true },
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
const dataBaseStore = useDataBaseStore()
|
|
34
|
+
|
|
35
|
+
const vertex_attribute_names = ref([])
|
|
36
|
+
const meta_data = computed(() => {
|
|
37
|
+
return dataBaseStore.itemMetaDatas(props.id)
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
onMounted(() => {
|
|
41
|
+
getVertexAttributes()
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
function getVertexAttributes() {
|
|
45
|
+
api_fetch(
|
|
46
|
+
{
|
|
47
|
+
schema: back_schemas.opengeodeweb_back.vertex_attribute_names,
|
|
48
|
+
params: {
|
|
49
|
+
input_geode_object: meta_data.value.geode_object,
|
|
50
|
+
filename: meta_data.value.native_filename,
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
response_function: (response) => {
|
|
55
|
+
vertex_attribute_names.value = response._data.vertex_attribute_names
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
)
|
|
59
|
+
}
|
|
60
|
+
</script>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<v-row class="pa-0" align="center">
|
|
3
|
+
<v-col cols="auto" justify="center">
|
|
4
|
+
<v-icon size="30" icon="mdi-eye" v-tooltip:left="'Visibility'" />
|
|
5
|
+
</v-col>
|
|
6
|
+
<v-col cols="auto" justify="center">
|
|
7
|
+
<v-switch v-model="visibility" inset hide-details />
|
|
8
|
+
</v-col>
|
|
9
|
+
</v-row>
|
|
10
|
+
</template>
|
|
11
|
+
|
|
12
|
+
<script setup>
|
|
13
|
+
const visibility = defineModel()
|
|
14
|
+
</script>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<ViewerPointSetSpecificPointsOptions
|
|
3
|
+
:itemProps="props.itemProps"
|
|
4
|
+
:btn_image="PointSetPoints"
|
|
5
|
+
/>
|
|
6
|
+
</template>
|
|
7
|
+
|
|
8
|
+
<script setup>
|
|
9
|
+
import PointSetPoints from "@ogw_f/assets/viewer_svgs/point_set_points.svg"
|
|
10
|
+
|
|
11
|
+
const props = defineProps({
|
|
12
|
+
itemProps: { type: Object, required: true },
|
|
13
|
+
})
|
|
14
|
+
</script>
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<ContextMenuItem
|
|
3
|
+
:itemProps="props.itemProps"
|
|
4
|
+
tooltip="Points options"
|
|
5
|
+
:btn_image="props.btn_image"
|
|
6
|
+
>
|
|
7
|
+
<template #options>
|
|
8
|
+
<ViewerOptionsVisibilitySwitch v-model="visibility" />
|
|
9
|
+
<template v-if="visibility">
|
|
10
|
+
<v-row class="pa-0" align="center">
|
|
11
|
+
<v-divider />
|
|
12
|
+
<v-col cols="auto" justify="center">
|
|
13
|
+
<v-icon size="30" icon="mdi-ruler" v-tooltip:left="'Size'" />
|
|
14
|
+
</v-col>
|
|
15
|
+
<v-col justify="center">
|
|
16
|
+
<v-slider
|
|
17
|
+
v-model="size"
|
|
18
|
+
hide-details
|
|
19
|
+
min="0"
|
|
20
|
+
max="20"
|
|
21
|
+
step="2"
|
|
22
|
+
thumb-color="black"
|
|
23
|
+
ticks
|
|
24
|
+
/>
|
|
25
|
+
</v-col>
|
|
26
|
+
</v-row>
|
|
27
|
+
<v-row>
|
|
28
|
+
<v-col>
|
|
29
|
+
<ViewerOptionsColoringTypeSelector
|
|
30
|
+
:id="id"
|
|
31
|
+
v-model:coloring_style_key="coloring_style_key"
|
|
32
|
+
v-model:color="color"
|
|
33
|
+
v-model:vertex_attribute="vertex_attribute"
|
|
34
|
+
/>
|
|
35
|
+
</v-col>
|
|
36
|
+
</v-row>
|
|
37
|
+
</template>
|
|
38
|
+
</template>
|
|
39
|
+
</ContextMenuItem>
|
|
40
|
+
</template>
|
|
41
|
+
|
|
42
|
+
<script setup>
|
|
43
|
+
const dataStyleStore = useDataStyleStore()
|
|
44
|
+
|
|
45
|
+
const props = defineProps({
|
|
46
|
+
itemProps: { type: Object, required: true },
|
|
47
|
+
btn_image: { type: String, required: true },
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
const id = toRef(() => props.itemProps.id)
|
|
51
|
+
|
|
52
|
+
const visibility = computed({
|
|
53
|
+
get: () => dataStyleStore.pointsVisibility(id.value),
|
|
54
|
+
set: (newValue) => dataStyleStore.setPointsVisibility(id.value, newValue),
|
|
55
|
+
})
|
|
56
|
+
const size = computed({
|
|
57
|
+
get: () => dataStyleStore.pointsSize(id.value),
|
|
58
|
+
set: (newValue) => dataStyleStore.setPointsSize(id.value, newValue),
|
|
59
|
+
})
|
|
60
|
+
const coloring_style_key = computed({
|
|
61
|
+
get: () => dataStyleStore.pointsActiveColoring(id.value),
|
|
62
|
+
set: (newValue) =>
|
|
63
|
+
dataStyleStore.setPointsActiveColoring(id.value, newValue),
|
|
64
|
+
})
|
|
65
|
+
const color = computed({
|
|
66
|
+
get: () => dataStyleStore.pointsColor(id.value),
|
|
67
|
+
set: (newValue) => dataStyleStore.setPointsColor(id.value, newValue),
|
|
68
|
+
})
|
|
69
|
+
const vertex_attribute = computed({
|
|
70
|
+
get: () => dataStyleStore.pointsVertexAttribute(id.value),
|
|
71
|
+
set: (newValue) =>
|
|
72
|
+
dataStyleStore.setPointsVertexAttribute(id.value, newValue),
|
|
73
|
+
})
|
|
74
|
+
</script>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<ViewerGenericMeshEdgesOptions
|
|
3
|
+
:itemProps="props.itemProps"
|
|
4
|
+
:btn_image="PolygonalSurfaceEdges"
|
|
5
|
+
/>
|
|
6
|
+
</template>
|
|
7
|
+
|
|
8
|
+
<script setup>
|
|
9
|
+
import PolygonalSurfaceEdges from "@ogw_f/assets/viewer_svgs/surface_edges.svg"
|
|
10
|
+
|
|
11
|
+
const props = defineProps({
|
|
12
|
+
itemProps: { type: Object, required: true },
|
|
13
|
+
})
|
|
14
|
+
</script>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<ViewerGenericMeshPointsOptions
|
|
3
|
+
:itemProps="props.itemProps"
|
|
4
|
+
:btn_image="PolygonalSurfacePoints"
|
|
5
|
+
/>
|
|
6
|
+
</template>
|
|
7
|
+
|
|
8
|
+
<script setup>
|
|
9
|
+
import PolygonalSurfacePoints from "@ogw_f/assets/viewer_svgs/surface_points.svg"
|
|
10
|
+
|
|
11
|
+
const props = defineProps({
|
|
12
|
+
itemProps: { type: Object, required: true },
|
|
13
|
+
})
|
|
14
|
+
</script>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<ViewerGenericMeshPolygonsOptions
|
|
3
|
+
:itemProps="props.itemProps"
|
|
4
|
+
:btn_image="PolygonalSurfacePolygons"
|
|
5
|
+
/>
|
|
6
|
+
</template>
|
|
7
|
+
|
|
8
|
+
<script setup>
|
|
9
|
+
import PolygonalSurfacePolygons from "@ogw_f/assets/viewer_svgs/surface_triangles.svg"
|
|
10
|
+
|
|
11
|
+
const props = defineProps({
|
|
12
|
+
itemProps: { type: Object, required: true },
|
|
13
|
+
})
|
|
14
|
+
</script>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<ViewerGenericMeshEdgesOptions
|
|
3
|
+
:itemProps="props.itemProps"
|
|
4
|
+
:btn_image="SolidEdges"
|
|
5
|
+
/>
|
|
6
|
+
</template>
|
|
7
|
+
|
|
8
|
+
<script setup>
|
|
9
|
+
import SolidEdges from "@ogw_f/assets/viewer_svgs/solid_edges.svg"
|
|
10
|
+
|
|
11
|
+
const props = defineProps({
|
|
12
|
+
itemProps: { type: Object, required: true },
|
|
13
|
+
})
|
|
14
|
+
</script>
|