diff --git a/.gitignore b/.gitignore
index cab3ca0..f6c20f7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
*\~
\#*#
.\#*
+*.pyproject
diff --git a/pzp/add_process.py b/pzp/add_process.py
index be6962b..a78e91f 100644
--- a/pzp/add_process.py
+++ b/pzp/add_process.py
@@ -3,8 +3,9 @@
from pzp_utils.processing import domains
from qgis.core import QgsExpressionContextUtils, QgsProject
+from qgis.gui import QgsFileWidget
from qgis.PyQt.QtCore import QVariant
-from qgis.PyQt.QtWidgets import QDialog, QDialogButtonBox
+from qgis.PyQt.QtWidgets import QDialog, QDialogButtonBox, QFileDialog, QMessageBox
from pzp.utils import utils
@@ -15,92 +16,168 @@ class AddProcessDialog(QDialog, FORM_CLASS):
def __init__(self, iface, parent=None):
QDialog.__init__(self, parent)
self.setupUi(self)
+
+ self._gpkg_path = str()
+ self._area_gpkg_layer = None
+
self.buttonBox.accepted.disconnect()
self.buttonBox.clicked.connect(self.button_box_clicked)
for process in domains.PROCESS_TYPES.items():
self.process_cbox.addItem(process[1], process[0])
- self.file_widget.setFilter("*.gpkg;;*.GPKG")
+ self.file_widget.setStorageMode(QgsFileWidget.GetDirectory)
+ self.file_widget.setOptions(QFileDialog.ShowDirsOnly)
def button_box_clicked(self, button):
- if self.buttonBox.buttonRole(button) == QDialogButtonBox.ApplyRole:
+ if self.buttonBox.buttonRole(button) == QDialogButtonBox.AcceptRole:
process_type = self.process_cbox.currentData()
- add_process(process_type, self.file_widget.filePath())
- elif self.buttonBox.buttonRole(button) == QDialogButtonBox.AcceptRole:
- process_type = self.process_cbox.currentData()
- add_process(process_type, self.file_widget.filePath())
- self.close()
- else:
- self.close()
+ try:
+ self._add_process(process_type, self.file_widget.filePath())
+ except Exception as exception:
+ QMessageBox.critical(self, "Errore durante l'aggiunta del processo", "Dettagli:\n{}".format(exception))
+ self.close()
-def add_process(process_type, gpkg_directory_path):
- # TODO: docstring process_type is the process code
- # TODO: manage different process_types
+ def _add_process(self, process_type, gpkg_directory_path):
+ # TODO: docstring process_type is the process code
+ # TODO: manage different process_types
- timestamp = datetime.now().strftime("%d%m%Y_%H%M%S")
- gpkg_path = os.path.join(gpkg_directory_path, f"data_{process_type}_{timestamp}.gpkg")
- group_name = domains.PROCESS_TYPES[process_type]
+ timestamp = datetime.now().strftime("%d%m%Y_%H%M%S")
+ self._gpkg_path = os.path.join(gpkg_directory_path, f"data_{process_type}_{timestamp}.gpkg")
+ group_name = domains.PROCESS_TYPES[process_type]
- project = QgsProject.instance()
+ project = QgsProject.instance()
- root = QgsProject.instance().layerTreeRoot()
+ root = QgsProject.instance().layerTreeRoot()
- group = utils.create_group(group_name, root)
+ group = utils.create_group(group_name, root)
- area_layer = utils.create_layer("Area di studio")
- QgsExpressionContextUtils.setLayerVariable(area_layer, "pzp_layer", "area")
- QgsExpressionContextUtils.setLayerVariable(area_layer, "pzp_process", process_type)
+ area_layer = utils.create_layer("Area di studio")
+ QgsExpressionContextUtils.setLayerVariable(area_layer, "pzp_layer", "area")
+ QgsExpressionContextUtils.setLayerVariable(area_layer, "pzp_process", process_type)
- utils.add_field_to_layer(area_layer, "commento", "Osservazione o ev. commento", QVariant.String)
+ utils.add_field_to_layer(area_layer, "commento", "Osservazione o ev. commento", QVariant.String)
- utils.add_field_to_layer(area_layer, "proc_parz", "Processo rappresentato TI", QVariant.Int)
- utils.set_value_map_to_field(area_layer, "proc_parz", domains.PROCESS_TYPES)
+ utils.add_field_to_layer(area_layer, "proc_parz", "Processo rappresentato TI", QVariant.Int)
+ utils.set_value_map_to_field(area_layer, "proc_parz", domains.PROCESS_TYPES)
- utils.add_field_to_layer(area_layer, "fonte_proc", "Fonte del processo (es. nome riale)", QVariant.String)
+ utils.add_field_to_layer(area_layer, "fonte_proc", "Fonte del processo (es. nome riale)", QVariant.String)
- utils.set_qml_style(area_layer, "area")
- utils.set_not_null_constraint_to_field(area_layer, "fonte_proc")
- utils.set_unique_constraint_to_field(area_layer, "fonte_proc")
- utils.set_default_value_to_field(area_layer, "proc_parz", "@pzp_process")
- utils.set_not_null_constraint_to_field(area_layer, "proc_parz")
- utils.remove_unique_constraint_to_field(area_layer, "proc_parz")
- utils.add_layer_to_gpkg(area_layer, gpkg_path)
- area_gpkg_layer = utils.load_gpkg_layer(area_layer.name(), gpkg_path)
- project.addMapLayer(area_gpkg_layer, False)
- group.addLayer(area_gpkg_layer)
- options = area_gpkg_layer.geometryOptions()
- options.setGeometryPrecision(0.001)
- options.setRemoveDuplicateNodes(True)
- options.setGeometryChecks(["QgsIsValidCheck"])
+ # For caduta sassi fonte_proc are multiple in separate layer
+ if process_type != 3000: # Caduta sassi
+ utils.set_qml_style(area_layer, "area")
- if process_type == 3000: # Caduta sassi
- propagation_layer = utils.create_layer("Probabilità di propagazione (tutti gli scenari)", "LineString")
+ utils.set_not_null_constraint_to_field(area_layer, "fonte_proc")
+ utils.set_unique_constraint_to_field(area_layer, "fonte_proc")
+ else:
+ utils.set_qml_style(area_layer, "area_caduta_sassi")
+
+ utils.set_default_value_to_field(area_layer, "proc_parz", "@pzp_process")
+ utils.set_not_null_constraint_to_field(area_layer, "proc_parz")
+ utils.remove_unique_constraint_to_field(area_layer, "proc_parz")
+ utils.add_layer_to_gpkg(area_layer, self._gpkg_path)
+ self._area_gpkg_layer = utils.load_gpkg_layer(area_layer.name(), self._gpkg_path)
+ project.addMapLayer(self._area_gpkg_layer, False)
+ group.addLayer(self._area_gpkg_layer)
+ options = self._area_gpkg_layer.geometryOptions()
+ options.setGeometryPrecision(0.001)
+ options.setRemoveDuplicateNodes(True)
+ options.setGeometryChecks(["QgsIsValidCheck"])
- utils.add_field_to_layer(propagation_layer, "osservazioni", "Osservazioni", QVariant.String)
- utils.add_field_to_layer(
- propagation_layer,
- "prob_propagazione",
- "Probabilità propagazione",
- QVariant.Int,
- )
- utils.add_field_to_layer(
- propagation_layer,
- "fonte_proc",
- "Fonte del processo (es. nome riale)",
- QVariant.String,
- )
- utils.add_field_to_layer(propagation_layer, "prob_rottura", "Probabilità di rottura", QVariant.Int)
- utils.set_qml_style(propagation_layer, "propagation")
- utils.set_not_null_constraint_to_field(propagation_layer, "fonte_proc")
- utils.remove_unique_constraint_to_field(propagation_layer, "fonte_proc")
- utils.set_value_relation_field(propagation_layer, "fonte_proc", area_gpkg_layer, "fonte_proc", "fonte_proc")
+ if process_type == 3000: # Caduta sassi
+ self._add_process_caduta_sassi(process_type, group)
- utils.add_layer_to_gpkg(propagation_layer, gpkg_path)
- propagation_gpkg_layer = utils.load_gpkg_layer(propagation_layer.name(), gpkg_path)
+ else:
+ intensity_layer = utils.create_layer("Intensità completa")
+
+ utils.add_field_to_layer(intensity_layer, "commento", "Osservazione o ev. commento", QVariant.String)
+ utils.add_field_to_layer(
+ intensity_layer,
+ "periodo_ritorno",
+ "Periodo di ritorno (es. 30, 100, 300, 99999)",
+ QVariant.Int,
+ )
+ utils.add_field_to_layer(
+ intensity_layer,
+ "classe_intensita",
+ "Intensità/impatto del processo",
+ QVariant.Int,
+ )
+ utils.add_field_to_layer(intensity_layer, "proc_parz", "Processo rappresentato TI", QVariant.Int)
+ utils.add_field_to_layer(
+ intensity_layer,
+ "fonte_proc",
+ "Fonte del processo (es. nome riale)",
+ QVariant.String,
+ )
- project.addMapLayer(propagation_gpkg_layer, False)
+ utils.set_qml_style(intensity_layer, "intensity")
+ utils.set_expression_constraint_to_field(intensity_layer, "periodo_ritorno", '"periodo_ritorno" > 0')
+ utils.set_value_map_to_field(intensity_layer, "classe_intensita", domains.INTENSITIES)
+ utils.set_not_null_constraint_to_field(intensity_layer, "classe_intensita")
+ utils.set_value_map_to_field(intensity_layer, "proc_parz", domains.PROCESS_TYPES)
+ utils.set_default_value_to_field(intensity_layer, "proc_parz", "@pzp_process")
+ utils.set_not_null_constraint_to_field(intensity_layer, "fonte_proc")
+
+ utils.set_value_relation_field(
+ intensity_layer, "fonte_proc", self._area_gpkg_layer, "fonte_proc", "fonte_proc"
+ )
+
+ utils.remove_unique_constraint_to_field(intensity_layer, "fonte_proc")
+ utils.remove_unique_constraint_to_field(intensity_layer, "classe_intensita")
+ utils.remove_unique_constraint_to_field(intensity_layer, "periodo_ritorno")
+
+ utils.add_layer_to_gpkg(intensity_layer, self._gpkg_path)
+ gpkg_layer = utils.load_gpkg_layer(intensity_layer.name(), self._gpkg_path)
+ project.addMapLayer(gpkg_layer, False)
+
+ QgsExpressionContextUtils.setLayerVariable(gpkg_layer, "pzp_layer", "intensity")
+ QgsExpressionContextUtils.setLayerVariable(gpkg_layer, "pzp_process", process_type)
+
+ group.addLayer(gpkg_layer)
+ options = gpkg_layer.geometryOptions()
+ options.setGeometryPrecision(0.001)
+ options.setRemoveDuplicateNodes(True)
+ options.setGeometryChecks(["QgsIsValidCheck"])
+
+ group_intensity_filtered = utils.create_group("Intensità (con filtri x visualizzazione scenari)", group)
+ group_intensity_filtered.setExpanded(True)
+
+ if process_type in [2001, 2002, 3000, 4100, 4200]:
+ filter_params = [
+ ("\"periodo_ritorno\"='30'", "T 30"),
+ ("\"periodo_ritorno\"='100'", "T 100"),
+ ("\"periodo_ritorno\"='300'", "T 300"),
+ ("\"periodo_ritorno\">'300'", "T >300"),
+ ]
+ else:
+ filter_params = [
+ ("\"periodo_ritorno\"='30'", "HQ 030"),
+ ("\"periodo_ritorno\"='100'", "HQ 100"),
+ ("\"periodo_ritorno\"='300'", "HQ 300"),
+ ("\"periodo_ritorno\">'300'", "HQ >300"),
+ ]
+
+ for param in filter_params:
+ gpkg_layer = utils.create_filtered_layer_from_gpkg(
+ intensity_layer.name(),
+ self._gpkg_path,
+ param[0],
+ param[1],
+ )
+
+ project.addMapLayer(gpkg_layer, False)
+ group_intensity_filtered.addLayer(gpkg_layer)
+ layer_node = group.findLayer(gpkg_layer.id())
+ layer_node.setExpanded(False)
+ layer_node.setItemVisibilityChecked(False)
+
+ def _add_process_caduta_sassi(self, process_type, group):
+ zone_di_stacco_gpkg_layer = self._add_process_caduta_sassi_zone_di_stacco()
+ group.addLayer(zone_di_stacco_gpkg_layer)
+
+ propagation_gpkg_layer = self._add_process_caduta_sassi_propagation(zone_di_stacco_gpkg_layer)
QgsExpressionContextUtils.setLayerVariable(propagation_gpkg_layer, "pzp_layer", "propagation")
QgsExpressionContextUtils.setLayerVariable(propagation_gpkg_layer, "pzp_process", process_type)
@@ -126,48 +203,19 @@ def add_process(process_type, gpkg_directory_path):
for param in filter_params:
gpkg_layer = utils.create_filtered_layer_from_gpkg(
- propagation_layer.name(),
- gpkg_path,
+ propagation_gpkg_layer.name(),
+ self._gpkg_path,
param[0],
param[1],
)
- project.addMapLayer(gpkg_layer, False)
+ QgsProject.instance().addMapLayer(gpkg_layer, False)
group_propagation_filtered.addLayer(gpkg_layer)
layer_node = group.findLayer(gpkg_layer.id())
layer_node.setExpanded(False)
layer_node.setItemVisibilityChecked(False)
- breaking_layer = utils.create_layer("Probabilità di rottura (tutti gli scenari)")
-
- utils.add_field_to_layer(breaking_layer, "osservazioni", "Osservazioni", QVariant.String)
-
- utils.add_field_to_layer(breaking_layer, "prob_rottura", "Probabilità di rottura", QVariant.Int)
-
- utils.add_field_to_layer(
- breaking_layer,
- "classe_intensita",
- "Intensità/impatto del processo",
- QVariant.Int,
- )
-
- utils.add_field_to_layer(
- breaking_layer,
- "fonte_proc",
- "Fonte del processo (es. nome riale)",
- QVariant.String,
- )
-
- utils.add_field_to_layer(breaking_layer, "proc_parz", "Processo rappresentato TI", QVariant.Int)
-
- utils.set_default_value_to_field(breaking_layer, "proc_parz", "@pzp_process")
-
- utils.set_qml_style(breaking_layer, "breaking")
- utils.set_value_relation_field(breaking_layer, "fonte_proc", area_gpkg_layer, "fonte_proc", "fonte_proc")
-
- utils.add_layer_to_gpkg(breaking_layer, gpkg_path)
- breaking_gpkg_layer = utils.load_gpkg_layer(breaking_layer.name(), gpkg_path)
- project.addMapLayer(breaking_gpkg_layer, False)
+ breaking_gpkg_layer = self._add_process_caduta_sassi_breaking(zone_di_stacco_gpkg_layer)
QgsExpressionContextUtils.setLayerVariable(breaking_gpkg_layer, "pzp_layer", "breaking")
QgsExpressionContextUtils.setLayerVariable(breaking_gpkg_layer, "pzp_process", process_type)
@@ -194,13 +242,13 @@ def add_process(process_type, gpkg_directory_path):
for param in filter_params:
gpkg_layer = utils.create_filtered_layer_from_gpkg(
- breaking_layer.name(),
- gpkg_path,
+ breaking_gpkg_layer.name(),
+ self._gpkg_path,
param[0],
param[1],
)
- added_layer = project.addMapLayer(gpkg_layer, False)
+ added_layer = QgsProject.instance().addMapLayer(gpkg_layer, False)
if param[2] is False:
utils.set_qml_style(added_layer, "breaking_without_no_impact")
group_breaking_filtered.addLayer(added_layer)
@@ -208,85 +256,76 @@ def add_process(process_type, gpkg_directory_path):
layer_node.setExpanded(False)
layer_node.setItemVisibilityChecked(False)
- else:
- intensity_layer = utils.create_layer("Intensità completa")
+ def _add_process_caduta_sassi_zone_di_stacco(self):
+ zone_di_stacco_layer = utils.create_layer("Zone di stacco")
- utils.add_field_to_layer(intensity_layer, "commento", "Osservazione o ev. commento", QVariant.String)
- utils.add_field_to_layer(
- intensity_layer,
- "periodo_ritorno",
- "Periodo di ritorno (es. 30, 100, 300, 99999)",
- QVariant.Int,
- )
+ utils.add_field_to_layer(zone_di_stacco_layer, "nome", "Nome", QVariant.String)
+ utils.add_field_to_layer(zone_di_stacco_layer, "osservazioni", "Tipo di scenario", QVariant.String)
+
+ utils.set_qml_style(zone_di_stacco_layer, "detachment_zone")
+
+ utils.add_layer_to_gpkg(zone_di_stacco_layer, self._gpkg_path)
+ zone_di_stacco_gpkg_layer = utils.load_gpkg_layer(zone_di_stacco_layer.name(), self._gpkg_path)
+
+ QgsProject.instance().addMapLayer(zone_di_stacco_gpkg_layer, False)
+ return zone_di_stacco_gpkg_layer
+
+ def _add_process_caduta_sassi_propagation(self, zone_di_stacco_gpkg_layer):
+ propagation_layer = utils.create_layer("Probabilità di propagazione (tutti gli scenari)", "LineString")
+
+ utils.add_field_to_layer(propagation_layer, "osservazioni", "Osservazioni", QVariant.String)
utils.add_field_to_layer(
- intensity_layer,
- "classe_intensita",
- "Intensità/impatto del processo",
+ propagation_layer,
+ "prob_propagazione",
+ "Probabilità propagazione",
QVariant.Int,
)
- utils.add_field_to_layer(intensity_layer, "proc_parz", "Processo rappresentato TI", QVariant.Int)
utils.add_field_to_layer(
- intensity_layer,
+ propagation_layer,
"fonte_proc",
- "Fonte del processo (es. nome riale)",
+ "Zona di stacco",
QVariant.String,
)
+ utils.add_field_to_layer(propagation_layer, "prob_rottura", "Probabilità di rottura", QVariant.Int)
+ utils.set_qml_style(propagation_layer, "propagation_caduta_sassi")
+ utils.set_not_null_constraint_to_field(propagation_layer, "fonte_proc")
+ utils.remove_unique_constraint_to_field(propagation_layer, "fonte_proc")
- utils.set_qml_style(intensity_layer, "intensity")
- utils.set_expression_constraint_to_field(intensity_layer, "periodo_ritorno", '"periodo_ritorno" > 0')
- utils.set_value_map_to_field(intensity_layer, "classe_intensita", domains.INTENSITIES)
- utils.set_not_null_constraint_to_field(intensity_layer, "classe_intensita")
- utils.set_value_map_to_field(intensity_layer, "proc_parz", domains.PROCESS_TYPES)
- utils.set_default_value_to_field(intensity_layer, "proc_parz", "@pzp_process")
- utils.set_not_null_constraint_to_field(intensity_layer, "fonte_proc")
+ utils.add_layer_to_gpkg(propagation_layer, self._gpkg_path)
+ propagation_gpkg_layer = utils.load_gpkg_layer(propagation_layer.name(), self._gpkg_path)
- utils.set_value_relation_field(intensity_layer, "fonte_proc", area_gpkg_layer, "fonte_proc", "fonte_proc")
+ QgsProject.instance().addMapLayer(propagation_gpkg_layer, False)
+ return propagation_gpkg_layer
- utils.remove_unique_constraint_to_field(intensity_layer, "fonte_proc")
- utils.remove_unique_constraint_to_field(intensity_layer, "classe_intensita")
- utils.remove_unique_constraint_to_field(intensity_layer, "periodo_ritorno")
+ def _add_process_caduta_sassi_breaking(self, zone_di_stacco_gpkg_layer):
+ breaking_layer = utils.create_layer("Probabilità di rottura (tutti gli scenari)")
- utils.add_layer_to_gpkg(intensity_layer, gpkg_path)
- gpkg_layer = utils.load_gpkg_layer(intensity_layer.name(), gpkg_path)
- project.addMapLayer(gpkg_layer, False)
+ utils.add_field_to_layer(breaking_layer, "osservazioni", "Osservazioni", QVariant.String)
- QgsExpressionContextUtils.setLayerVariable(gpkg_layer, "pzp_layer", "intensity")
- QgsExpressionContextUtils.setLayerVariable(gpkg_layer, "pzp_process", process_type)
+ utils.add_field_to_layer(breaking_layer, "prob_rottura", "Probabilità di rottura", QVariant.Int)
- group.addLayer(gpkg_layer)
- options = gpkg_layer.geometryOptions()
- options.setGeometryPrecision(0.001)
- options.setRemoveDuplicateNodes(True)
- options.setGeometryChecks(["QgsIsValidCheck"])
+ utils.add_field_to_layer(
+ breaking_layer,
+ "classe_intensita",
+ "Intensità/impatto del processo",
+ QVariant.Int,
+ )
- group_intensity_filtered = utils.create_group("Intensità (con filtri x visualizzazione scenari)", group)
- group_intensity_filtered.setExpanded(True)
+ utils.add_field_to_layer(
+ breaking_layer,
+ "fonte_proc",
+ "Zone di stacco",
+ QVariant.String,
+ )
- if process_type in [2001, 2002, 3000, 4100, 4200]:
- filter_params = [
- ("\"periodo_ritorno\"='30'", "T 30"),
- ("\"periodo_ritorno\"='100'", "T 100"),
- ("\"periodo_ritorno\"='300'", "T 300"),
- ("\"periodo_ritorno\">'300'", "T >300"),
- ]
- else:
- filter_params = [
- ("\"periodo_ritorno\"='30'", "HQ 030"),
- ("\"periodo_ritorno\"='100'", "HQ 100"),
- ("\"periodo_ritorno\"='300'", "HQ 300"),
- ("\"periodo_ritorno\">'300'", "HQ >300"),
- ]
+ utils.add_field_to_layer(breaking_layer, "proc_parz", "Processo rappresentato TI", QVariant.Int)
- for param in filter_params:
- gpkg_layer = utils.create_filtered_layer_from_gpkg(
- intensity_layer.name(),
- gpkg_path,
- param[0],
- param[1],
- )
+ utils.set_default_value_to_field(breaking_layer, "proc_parz", "@pzp_process")
- project.addMapLayer(gpkg_layer, False)
- group_intensity_filtered.addLayer(gpkg_layer)
- layer_node = group.findLayer(gpkg_layer.id())
- layer_node.setExpanded(False)
- layer_node.setItemVisibilityChecked(False)
+ utils.set_qml_style(breaking_layer, "breaking_caduta_sassi")
+
+ utils.add_layer_to_gpkg(breaking_layer, self._gpkg_path)
+ breaking_gpkg_layer = utils.load_gpkg_layer(breaking_layer.name(), self._gpkg_path)
+
+ QgsProject.instance().addMapLayer(breaking_gpkg_layer, False)
+ return breaking_gpkg_layer
diff --git a/pzp/qml/area_caduta_sassi.qml b/pzp/qml/area_caduta_sassi.qml
new file mode 100644
index 0000000..7b2c696
--- /dev/null
+++ b/pzp/qml/area_caduta_sassi.qml
@@ -0,0 +1,452 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+ 0
+ tablayout
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
diff --git a/pzp/qml/breaking_caduta_sassi.qml b/pzp/qml/breaking_caduta_sassi.qml
new file mode 100644
index 0000000..ed28b5c
--- /dev/null
+++ b/pzp/qml/breaking_caduta_sassi.qml
@@ -0,0 +1,620 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ /home/01_GeologiaValanghe/02_PZP/Capriasca_PZP/06_Estraz_dati/Dati inviati/Qgs/00_Pericoli naturali
+
+ 0
+ tablayout
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
diff --git a/pzp/qml/detachment_zone.qml b/pzp/qml/detachment_zone.qml
new file mode 100644
index 0000000..f0109cc
--- /dev/null
+++ b/pzp/qml/detachment_zone.qml
@@ -0,0 +1,325 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+ 0
+ tablayout
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
diff --git a/pzp/qml/propagation_caduta_sassi.qml b/pzp/qml/propagation_caduta_sassi.qml
new file mode 100644
index 0000000..8c7f984
--- /dev/null
+++ b/pzp/qml/propagation_caduta_sassi.qml
@@ -0,0 +1,826 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+ 0
+ tablayout
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
diff --git a/pzp/ui/add_process.ui b/pzp/ui/add_process.ui
index 84edbea..bbfeb46 100644
--- a/pzp/ui/add_process.ui
+++ b/pzp/ui/add_process.ui
@@ -6,12 +6,12 @@
0
0
- 427
+ 459
184
- Dialog
+ Aggiungi processo
-
@@ -32,14 +32,7 @@ Verrà creato un gruppo di layer per quel processo nel progetto corrente.
-
-
-
- QgsFileWidget::GetDirectory
-
-
- QFileDialog::ShowDirsOnly
-
-
+
-