Skip to content

Commit

Permalink
Merge branch 'dev' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
phborba committed Oct 2, 2023
2 parents 5eac41c + 3162386 commit be1544d
Show file tree
Hide file tree
Showing 42 changed files with 2,921 additions and 375 deletions.
33 changes: 33 additions & 0 deletions CHANGELOG.md
Expand Up @@ -10,6 +10,38 @@ Correção de Bug:

- Correção de erro ao criar banco EDGV 3.0;

## 4.11.16 - dev



Novas Funcionalidades:

- Novo processo de corrigir erros de segmentação em linhas (barragem versus rodovias);
- Novo processo para validar a estrutura do banco de dados em relação ao masterfile;
- Novo processo de detectar as mudanças entre dois banco de dados, realizados em dias distintos;

Melhorias:

- O estado do Menu de classificação agora é salvo no projeto;
- Adiciona parâmetros opcionais na rotina de extração de pontos cotados;
- Melhoria de desempenho na extração de pontos cotados;
- O seletor genérico agora ignora camadas somente leitura;
- Melhoria de desempenho no processo Unir Linhas com Mesmo Conjunto de Atributos (Merge Lines With Same Attribute Set): Código refatorado para usar busca utilizando grafo. Além disso, o processo pega casos que não eram unidos anteriormente (linhas com mesmo conjunto de atributos e encadeadas);
- Melhoria de desempenho no processo Identify Unmerged Lines With Same Attribute Set: Código refatorado para usar busca utilizando grafo;

Correção de bug:

- Corrige bug de quando o usuário tenta reclassificar primitivas não compatíveis utilizando o menu de classificação;
- Corrige bug na rotina de extração de pontos cotados;
- Corrige bug de flags incorretas na rotina de identificar erros de segmentação em linhas (Identify Segment Errors Between Lines);
- Corrige bug de número de conexões ativas na ferramenta de setar estilo do banco (os métodos nativos do QGIS abrem conexão e não fecham, dessa forma derrubando todo mundo da produção por exceder o número máximo de conexões defindo no postgres.conf);
- Corrige bug no processo de verificar atributo unicode;
- Corrige bug no processo de identificar pontas soltas (retira distância mínima na busca, agora pega erro até no "mundo quântico");
- Corrige bug na ferramenta de inverter o sentido de linhas (flip lines) quando é uma camada não salva do banco de dados;
- Corrige bug na geração de moldura relativo a camada (Generate Systematic Grid Related to Layer) quando se usa memory layer (o memory layer não atualiza seu extent automaticamente, logo foi necessário colocar um layer.updateExtents() no código antes de calcular o extent);
- Corrige bug no processo de calcular azimute (estava sendo calculado com +90 graus);


## 4.10.0 - 2023-09-08

Novas Funcionalidades:
Expand All @@ -28,6 +60,7 @@ Novas Funcionalidades:
- Novo processo de ajustar parâmetros da ferramenta de aquisição com ângulos retos (integração com o FP/SAP);
- Novo processo de converter entre bancos de mesma modelagem, clipando com um polígono feito para integração com FP/SAP (ClipAndCopyFeaturesBetweenDatabasesAlgorithm);
- Novo processo de verificar ligação na moldura;
- Novo processo de cálculo do azimute;


Melhorias:
Expand Down
Expand Up @@ -2,7 +2,7 @@
from PyQt5 import QtCore, uic, QtWidgets, QtGui
from DsgTools.Modules.qgis.controllers.qgisCtrl import QgisCtrl
import json
from qgis.core import QgsWkbTypes
from qgis.core import QgsWkbTypes, QgsProject, QgsExpressionContextUtils
from qgis.utils import iface

class AcquisitionMenuCtrl:
Expand All @@ -14,6 +14,7 @@ def __init__(self, qgis=None, widgetFactory=None):
self.addMenuTab = None
self.addMenuButton = None
self.reclassifyDialog = None
self.menuConfigs = None
self.ignoreSignal = False
self.connectQgisSignals()

Expand All @@ -25,12 +26,43 @@ def connectQgisSignals(self):
self.qgis.connectSignal("ClickLayerTreeView", self.deactiveMenu)
self.qgis.connectSignal("AddLayerTreeView", self.deactiveMenu)
self.qgis.connectSignal("StartEditing", self.deactiveMenu)
self.qgis.connectSignal("ProjectSaved", self.saveStateOnProject)
self.qgis.connectSignal("ProjectRead", self.loadStateOnProject)

def disconnectQgisSignals(self):
self.qgis.disconnectSignal("StartAddFeature", self.deactiveMenu)
self.qgis.disconnectSignal("ClickLayerTreeView", self.deactiveMenu)
self.qgis.disconnectSignal("AddLayerTreeView", self.deactiveMenu)
self.qgis.disconnectSignal("StartEditing", self.deactiveMenu)
self.qgis.disconnectSignal("ProjectSaved", self.saveStateOnProject)
self.qgis.disconnectSignal("ProjectRead", self.loadStateOnProject)

def loadStateOnProject(self):
state = json.loads(
QgsExpressionContextUtils.projectScope(QgsProject.instance()).variable(
"dsgtools_menu_state"
)
or "{}"
)
if state == {}:
return
self.createMenuDock(state)

def saveStateOnProject(self):
if self.menuConfigs is None:
return
currentProject = QgsProject.instance()
currentProject.projectSaved.disconnect(self.saveStateOnProject)
QgsExpressionContextUtils.setProjectVariable(
currentProject,
"dsgtools_menu_state",
json.dumps(self.menuConfigs),
)
currentProject.blockSignals(True)
QgsProject.instance().write()
QgsProject.instance().projectSaved.connect(self.saveStateOnProject)
currentProject.blockSignals(False)


def openMenuEditor(self):
if not self.menuEditor:
Expand Down Expand Up @@ -159,6 +191,8 @@ def createMenuDock(self, menuConfigs):
self.menuDock.setMenuWidget(self.getMenuWidget())
self.menuDock.loadMenus(menuConfigs)
self.qgis.addDockWidget(self.menuDock)
self.menuConfigs = menuConfigs
self.saveStateOnProject()

def removeMenuDock(self):
self.qgis.removeDockWidget(self.menuDock) if self.menuDock else ""
Expand Down Expand Up @@ -209,6 +243,7 @@ def validLayersToReclassification(self, buttonConfig):
noActive = l.id() != iface.activeLayer().id()
if noActive:
raise Exception("Selecione somente feições da camada que está em uso!")


def reclassify(self, buttonConfig, reclassifyData):
destinatonLayerName = buttonConfig["buttonLayer"]
Expand All @@ -227,14 +262,14 @@ def reclassify(self, buttonConfig, reclassifyData):
def getLayersForReclassification(self, layerName, geometryType):
layers = self.qgis.getLoadedVectorLayers()
geometryFilterDict = {
QgsWkbTypes.PointGeometry: (QgsWkbTypes.PointGeometry,),
QgsWkbTypes.LineGeometry: (QgsWkbTypes.LineGeometry,),
QgsWkbTypes.PolygonGeometry: (QgsWkbTypes.PointGeometry, QgsWkbTypes.PolygonGeometry)
QgsWkbTypes.PointGeometry: (QgsWkbTypes.PointGeometry, QgsWkbTypes.PolygonGeometry),
QgsWkbTypes.LineGeometry: (QgsWkbTypes.LineGeometry, ),
QgsWkbTypes.PolygonGeometry: (QgsWkbTypes.PointGeometry, ),
}
return [
l
for l in layers
if l.selectedFeatureCount() > 0 and l.geometryType() in geometryFilterDict[l.geometryType()]
if l.selectedFeatureCount() > 0 and l.geometryType() in geometryFilterDict[geometryType]
]

def activeMenuButton(self, buttonConfig):
Expand Down
5 changes: 4 additions & 1 deletion DsgTools/Modules/qgis/controllers/qgisCtrl.py
Expand Up @@ -122,7 +122,8 @@ def getAcquisitionToolNames(self):
"Mão Livre": "FreeHand",
}

def addDockWidget(self, dockWidget, side=QtCore.Qt.LeftDockWidgetArea):
def addDockWidget(self, dockWidget, side=None):
side = side if side is not None else QtCore.Qt.LeftDockWidgetArea
iface.addDockWidget(side, dockWidget)

def removeDockWidget(self, dockWidget):
Expand Down Expand Up @@ -267,6 +268,8 @@ def getSignals(self):
"ClickLayerTreeView": iface.layerTreeView().clicked,
"AddLayerTreeView": core.QgsProject.instance().legendLayersAdded,
"StartEditing": iface.actionToggleEditing().triggered,
"ProjectSaved": core.QgsProject.instance().projectSaved,
"ProjectRead": iface.projectRead,
}

def suppressLayerForm(self, layer, suppress):
Expand Down
Expand Up @@ -204,6 +204,14 @@ def processAlgorithm(self, parameters, context, feedback):
return {}
if multiStepFeedback is not None:
multiStepFeedback.pushInfo(self.tr("Commiting changes"))
if len(outputLayerDict) > 0:
self.commitChanges(multiStepFeedback, outputLayerDict)
if not loadDestinationLayers:
for lyrName, lyr in outputLayerDict.items():
QgsProject.instance().removeMapLayer(lyr.id())
return {}

def commitChanges(self, multiStepFeedback, outputLayerDict):
stepSize = 100 / len(outputLayerDict)
for current, (lyrName, lyr) in enumerate(outputLayerDict.items()):
if multiStepFeedback is not None:
Expand All @@ -213,10 +221,6 @@ def processAlgorithm(self, parameters, context, feedback):
lyr.commitChanges()
if multiStepFeedback is not None:
multiStepFeedback.setProgress(current * stepSize)
if not loadDestinationLayers:
for lyrName, lyr in outputLayerDict.items():
QgsProject.instance().removeMapLayer(lyr.id())
return {}

def getLayersFromDbConnectionName(
self,
Expand Down Expand Up @@ -269,20 +273,28 @@ def clipInputLayerList(self, inputLayerList, geom, context, feedback):
if feedback is not None
else None
)
clipLayer = self.layerHandler.createMemoryLayerFromGeometry(
geom=geom, crs=QgsProject.instance().crs()
) if geom is not None else None
clipLayer = (
self.layerHandler.createMemoryLayerFromGeometry(
geom=geom, crs=QgsProject.instance().crs()
)
if geom is not None
else None
)
for currentIdx, lyr in enumerate(inputLayerList):
if multiStepFeedback is not None and multiStepFeedback.isCanceled():
return outputDict
if multiStepFeedback is not None:
multiStepFeedback.setCurrentStep(2 * currentIdx)
clippedLyr = self.algRunner.runClip(
inputLayer=lyr,
overlayLayer=clipLayer,
context=context,
feedback=multiStepFeedback,
) if clippedLyr is not None else lyr
clippedLyr = (
self.algRunner.runClip(
inputLayer=lyr,
overlayLayer=clipLayer,
context=context,
feedback=multiStepFeedback,
)
if clipLayer is not None
else lyr
)
if multiStepFeedback is not None:
multiStepFeedback.setCurrentStep(2 * currentIdx + 1)
outputDict[lyr.name()] = self.algRunner.runCreateFieldWithExpression(
Expand Down

0 comments on commit be1544d

Please sign in to comment.