-
+
+
+ {infoMessageId ? <> }/>> : null}
+
{
event.stopPropagation();
diff --git a/web/client/components/styleeditor/config/blocks.js b/web/client/components/styleeditor/config/blocks.js
index 1b1d2ad8ef..02c134b2d2 100644
--- a/web/client/components/styleeditor/config/blocks.js
+++ b/web/client/components/styleeditor/config/blocks.js
@@ -380,7 +380,8 @@ const getBlocks = ({
range: {
min: 1,
max: 10
- }
+ },
+ infoMessageId: 'styleeditor.pointCloudSizeInfo'
})
},
defaultProperties: {
diff --git a/web/client/components/styleeditor/config/property.js b/web/client/components/styleeditor/config/property.js
index 2ff391a4a6..8711d5f1f9 100644
--- a/web/client/components/styleeditor/config/property.js
+++ b/web/client/components/styleeditor/config/property.js
@@ -192,7 +192,7 @@ const property = {
},
isDisabled
}),
- size: ({ key = 'radius', label = 'Radius', range, fallbackValue = 1 }) => ({
+ size: ({ key = 'radius', label = 'Radius', range, fallbackValue = 1, infoMessageId }) => ({
type: 'input',
label,
config: {
@@ -201,7 +201,8 @@ const property = {
maxWidth: 105,
uom: 'px',
min: range?.min ?? 0,
- max: range?.max
+ max: range?.max,
+ infoMessageId
},
setValue: (value = 1) => {
return value === undefined ? fallbackValue : parseFloat(value);
diff --git a/web/client/themes/default/less/common.less b/web/client/themes/default/less/common.less
index 41a1512f0d..322d285115 100644
--- a/web/client/themes/default/less/common.less
+++ b/web/client/themes/default/less/common.less
@@ -76,6 +76,23 @@
.background-color-var(@theme-vars[main-bg]);
}
}
+ .form-group-flex {
+ &.has-success {
+ .Select-control {
+ .border-color-var(@theme-vars[success], true);
+ }
+ }
+ &.has-error {
+ .Select-control {
+ .border-color-var(@theme-vars[danger], true);
+ }
+ }
+ &.has-warning {
+ .Select-control {
+ .border-color-var(@theme-vars[warning], true);
+ }
+ }
+ }
}
// **************
@@ -396,3 +413,21 @@ div#sync-popover.popover {
float: unset;
}
+
+.form-group-flex {
+ display: flex;
+ align-items: center;
+ padding: 0 8px;
+ .checkbox,
+ .control-label {
+ flex: 1;
+ font-weight: normal;
+ }
+ .input-group {
+ flex: 1;
+ }
+ input {
+ z-index: 0;
+ }
+ margin-bottom: 8px;
+}
diff --git a/web/client/themes/default/less/react-select.less b/web/client/themes/default/less/react-select.less
index d1787121d4..c4d1de2c1e 100644
--- a/web/client/themes/default/less/react-select.less
+++ b/web/client/themes/default/less/react-select.less
@@ -195,3 +195,7 @@
margin-top: 3px;
}
}
+
+.Select.is-open {
+ z-index: 20;
+}
\ No newline at end of file
diff --git a/web/client/themes/default/less/wizard.less b/web/client/themes/default/less/wizard.less
index df81921d05..a51e44545d 100644
--- a/web/client/themes/default/less/wizard.less
+++ b/web/client/themes/default/less/wizard.less
@@ -179,4 +179,3 @@
}
}
}
-
diff --git a/web/client/translations/data.de-DE.json b/web/client/translations/data.de-DE.json
index 4358063988..99969375eb 100644
--- a/web/client/translations/data.de-DE.json
+++ b/web/client/translations/data.de-DE.json
@@ -156,6 +156,21 @@
"scale": "Maßstab",
"resolution": "Auflösung"
},
+ "3dTiles": {
+ "format": "Format",
+ "3dModel": "3D-Modell",
+ "pointCloud": "Punktwolke",
+ "pointCloudShading": {
+ "title": "Visualisierungsoptionen",
+ "attenuationInfo": "Punktabschwächung basierend auf der Entfernung vom aktuellen Blickpunkt durchführen",
+ "attenuation": "Dämpfung aktivieren",
+ "maximumAttenuation": "Maximale Dämpfung",
+ "eyeDomeLightingInfo": "Dies ermöglicht eine Augenkuppelbeleuchtung, um die Visualisierung der Punktwolke zu verbessern. Dies stellt nicht das echte Sonnenlicht dar",
+ "eyeDomeLighting": "Beleuchtung aktivieren",
+ "eyeDomeLightingStrength": "Lichtstärke",
+ "eyeDomeLightingRadius": "Beleuchtungsradius"
+ }
+ },
"tooltip": {
"label": "QuickInfo",
"title": "Titel",
@@ -2544,7 +2559,8 @@
"startPoint": "Startpunkt",
"endPoint": "Endpunkt",
"line": "Linie",
- "geodesicLine": "Geodätische Linie"
+ "geodesicLine": "Geodätische Linie",
+ "pointCloudSizeInfo": "Der Punktwolkenradius wird nur angewendet, wenn die Dämpfungsoptionen deaktiviert sind. Die Dämpfungsoption hat Vorrang vor dieser Eigenschaft."
},
"playback": {
"settings": {
diff --git a/web/client/translations/data.en-US.json b/web/client/translations/data.en-US.json
index 9995418617..7ce441daa3 100644
--- a/web/client/translations/data.en-US.json
+++ b/web/client/translations/data.en-US.json
@@ -156,6 +156,21 @@
"scale": "Scale",
"resolution": "Resolution"
},
+ "3dTiles": {
+ "format": "Format",
+ "3dModel": "3D Model",
+ "pointCloud": "Point Cloud",
+ "pointCloudShading": {
+ "title": "Visualization options",
+ "attenuationInfo": "Perform point attenuation based on the distance from the current view point",
+ "attenuation": "Enable attenuation",
+ "maximumAttenuation": "Maximum attenuation",
+ "eyeDomeLightingInfo": "This enable an eye dome lighting to improve visualization of the point cloud. This does not represent the real sun lighting",
+ "eyeDomeLighting": "Enable lighting",
+ "eyeDomeLightingStrength": "Lighting strength",
+ "eyeDomeLightingRadius": "Lighting radius"
+ }
+ },
"tooltip": {
"label": "Tooltip",
"title": "Title",
@@ -2517,7 +2532,8 @@
"startPoint": "Start point",
"endPoint": "End point",
"line": "Line",
- "geodesicLine": "Geodesic line"
+ "geodesicLine": "Geodesic line",
+ "pointCloudSizeInfo": "The point cloud radius is applied only when the attenuation options is disabled. The attenuation option takes precedence over this property."
},
"playback": {
"settings": {
diff --git a/web/client/translations/data.es-ES.json b/web/client/translations/data.es-ES.json
index 0b6d36d50f..866c7789d8 100644
--- a/web/client/translations/data.es-ES.json
+++ b/web/client/translations/data.es-ES.json
@@ -153,6 +153,21 @@
"scale": "Escala",
"resolution": "Resolución"
},
+ "3dTiles": {
+ "format": "Formato",
+ "3dModel": "Modelo 3D",
+ "pointCloud": "Nube de puntos",
+ "pointCloudShading": {
+ "title": "Opciones de visualización",
+ "attenuationInfo": "Realiza atenuación de puntos según la distancia desde el punto de vista actual",
+ "attenuation": "Habilitar atenuación",
+ "maximumAttenuation": "Atenuación máxima",
+ "eyeDomeLightingInfo": "Esto habilita una iluminación de domo ocular para mejorar la visualización de la nube de puntos. Esto no representa la iluminación solar real",
+ "eyeDomeLighting": "Habilitar iluminación",
+ "eyeDomeLightingStrength": "Intensidad de iluminación",
+ "eyeDomeLightingRadius": "Radio de iluminación"
+ }
+ },
"tooltip": {
"label": "Información sobre herramientas",
"title": "Título",
@@ -2507,7 +2522,8 @@
"startPoint": "Punto de inicio",
"endPoint": "Punto final",
"line": "Línea",
- "geodesicLine": "Línea geodésica"
+ "geodesicLine": "Línea geodésica",
+ "pointCloudSizeInfo": "El radio de la nube de puntos se aplica sólo cuando las opciones de atenuación están deshabilitadas. La opción de atenuación tiene prioridad sobre esta propiedad."
},
"playback": {
"settings": {
diff --git a/web/client/translations/data.fr-FR.json b/web/client/translations/data.fr-FR.json
index bca0accddb..326f872223 100644
--- a/web/client/translations/data.fr-FR.json
+++ b/web/client/translations/data.fr-FR.json
@@ -156,6 +156,21 @@
"scale": "Échelle",
"resolution": "Résolution"
},
+ "3dTiles": {
+ "format": "Formater",
+ "3dModel": "Modèle 3D",
+ "pointCloud": "Nuage de points",
+ "pointCloudShading": {
+ "title": "Options de visualisation",
+ "attenuationInfo": "Effectuer une atténuation de point en fonction de la distance du point de vue actuel",
+ "attenuation": "Activer l'atténuation",
+ "maximumAttenuation": "Atténuation maximale",
+ "eyeDomeLightingInfo": "Cela permet à un éclairage du dôme oculaire d'améliorer la visualisation du nuage de points. Cela ne représente pas l'éclairage réel du soleil",
+ "eyeDomeLighting": "Activer l'éclairage",
+ "eyeDomeLightingStrength": "Force d'éclairage",
+ "eyeDomeLightingRadius": "Rayon d'éclairage"
+ }
+ },
"tooltip": {
"label": "Infobulle",
"title": "Titre",
@@ -2507,7 +2522,8 @@
"startPoint": "Point de départ",
"endPoint": "Point final",
"line": "Ligne",
- "geodesicLine": "Ligne géodésique"
+ "geodesicLine": "Ligne géodésique",
+ "pointCloudSizeInfo": "Le rayon du nuage de points est appliqué uniquement lorsque les options d'atténuation sont désactivées. L'option d'atténuation est prioritaire sur cette propriété."
},
"playback": {
"settings": {
diff --git a/web/client/translations/data.it-IT.json b/web/client/translations/data.it-IT.json
index f978182b98..200cd4910a 100644
--- a/web/client/translations/data.it-IT.json
+++ b/web/client/translations/data.it-IT.json
@@ -156,6 +156,21 @@
"scale": "Scala",
"resolution": "Risoluzione"
},
+ "3dTiles": {
+ "format": "Formato",
+ "3dModel": "Modello 3D",
+ "pointCloud": "Nuvola di punti",
+ "pointCloudShading": {
+ "title": "Opzioni di visualizzazione",
+ "attenuationInfo": "Applica una attenuazione della nuvola di punti basata sul punto di vista corrente",
+ "attenuation": "Abilita attenuazione",
+ "maximumAttenuation": "Massima attenuazione",
+ "eyeDomeLightingInfo": "Abilita l'illuminazione di tipo eye dome per migliorare la visualizzazione della nuvola di punti. Questa non rappresenta l'attuale illuminazione del sole",
+ "eyeDomeLighting": "Abilita illuminazione",
+ "eyeDomeLightingStrength": "Intensità luminosa",
+ "eyeDomeLightingRadius": "Raggio di illuminazione"
+ }
+ },
"tooltip": {
"label": "Tooltip",
"title": "Titolo",
@@ -2508,7 +2523,8 @@
"startPoint": "Punto iniziale",
"endPoint": "Punto finale",
"line": "Linea",
- "geodesicLine": "Linea geodesica"
+ "geodesicLine": "Linea geodesica",
+ "pointCloudSizeInfo": "Il raggio della nuvola di punti viene applicato solo quando le opzioni di attenuazione sono disabilitate. L'opzione di attenuazione ha la precedenza su questa proprietà."
},
"playback": {
"settings": {
diff --git a/web/client/utils/LayersUtils.js b/web/client/utils/LayersUtils.js
index e57e396a5c..8cfca18d72 100644
--- a/web/client/utils/LayersUtils.js
+++ b/web/client/utils/LayersUtils.js
@@ -655,7 +655,8 @@ export const saveLayer = (layer) => {
layer.tileGridStrategy ? { tileGridStrategy: layer.tileGridStrategy } : {},
layer.tileGridCacheSupport ? { tileGridCacheSupport: layer.tileGridCacheSupport } : {},
!isNil(layer.forceProxy) ? { forceProxy: layer.forceProxy } : {},
- !isNil(layer.disableFeaturesEditing) ? { disableFeaturesEditing: layer.disableFeaturesEditing } : {});
+ !isNil(layer.disableFeaturesEditing) ? { disableFeaturesEditing: layer.disableFeaturesEditing } : {},
+ layer.pointCloudShading ? { pointCloudShading: layer.pointCloudShading } : {});
};
/**
diff --git a/web/client/utils/__tests__/LayersUtils-test.js b/web/client/utils/__tests__/LayersUtils-test.js
index 7e628fc827..4354ed5394 100644
--- a/web/client/utils/__tests__/LayersUtils-test.js
+++ b/web/client/utils/__tests__/LayersUtils-test.js
@@ -1246,6 +1246,20 @@ describe('LayersUtils', () => {
l => {
expect(l.disableFeaturesEditing).toBeTruthy();
}
+ ],
+ [
+ {
+ pointCloudShading: {
+ attenuation: true,
+ maximumAttenuation: 4,
+ eyeDomeLighting: true,
+ eyeDomeLightingStrength: 1,
+ eyeDomeLightingRadius: 1
+ }
+ },
+ l => {
+ expect(l.pointCloudShading).toBeTruthy();
+ }
]
];
layers.map(([layer, test]) => test(LayersUtils.saveLayer(layer)) );