def run(self, msgMapTool=False, msg=None): #========================================================================= # RICHIESTA PRIMO PUNTO PER SELEZIONE OGGETTI if self.step == 0: # inizio del comando if self.SSGetClass.run(msgMapTool, msg) == True: # selezione terminata self.step = 1 return self.run(msgMapTool, msg) else: return False #========================================================================= # CANCELLAZIONE OGGETTI elif self.step == 1: self.plugIn.beginEditCommand( "Feature deleted", self.SSGetClass.entitySet.getLayerList()) for layerEntitySet in self.SSGetClass.entitySet.layerEntitySetList: # plugIn, layer, featureIds, refresh if qad_layer.deleteFeaturesToLayer(self.plugIn, layerEntitySet.layer, \ layerEntitySet.featureIds, False) == False: self.plugIn.destroyEditCommand() return self.plugIn.endEditCommand() return True # fine comando
def run(self, msgMapTool = False, msg = None): #========================================================================= # RICHIESTA PRIMO PUNTO PER SELEZIONE OGGETTI if self.step == 0: # inizio del comando if self.SSGetClass.run(msgMapTool, msg) == True: # selezione terminata self.step = 1 return self.run(msgMapTool, msg) else: return False #========================================================================= # CANCELLAZIONE OGGETTI elif self.step == 1: self.plugIn.beginEditCommand("Feature deleted", self.SSGetClass.entitySet.getLayerList()) for layerEntitySet in self.SSGetClass.entitySet.layerEntitySetList: # plugIn, layer, featureIds, refresh if qad_layer.deleteFeaturesToLayer(self.plugIn, layerEntitySet.layer, \ layerEntitySet.featureIds, False) == False: self.plugIn.destroyEditCommand() return self.plugIn.endEditCommand() return True # fine comando
def addEntitySetToPolyline(self, entitySet, removeOriginals = True): """ Aggiunge il set di entità alla polilinea da modificare """ geom = self.entity.getGeometry() layerList = [] layerList.append(self.entity.layer) for layerEntitySet in entitySet.layerEntitySetList: layer = layerEntitySet.layer if layer.geometryType() != QGis.Polygon and layer.geometryType() != QGis.Line: self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False if removeOriginals: layerList.append(layer) coordTransform = QgsCoordinateTransform(layer.crs(), self.entity.layer.crs()) for featureId in layerEntitySet.featureIds: # se la feature è quella di entity è errore if layer.id() == self.entity.layerId() and featureId == self.entity.featureId: self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False f = layerEntitySet.getFeature(featureId) # trasformo la geometria nel crs del layer dell'entità da modificare geomToAdd = f.geometry() geomToAdd.transform(coordTransform) # Riduco la geometria in point o polyline simplifiedGeoms = qad_utils.asPointOrPolyline(geomToAdd) for simplifiedGeom in simplifiedGeoms: points = simplifiedGeom.asPolyline() # vettore di punti # aggiungo una parte if geom.addPart(points) != 0: # 0 in case of success self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False f = self.entity.getFeature() f.setGeometry(geom) layerList = entitySet.getLayerList() layerList.append(self.entity.layer) self.plugIn.beginEditCommand("Feature edited", layerList) # plugIn, layer, feature, refresh, check_validity if qad_layer.updateFeatureToLayer(self.plugIn, self.entity.layer, f, False, False) == False: self.plugIn.destroyEditCommand() return False if removeOriginals: for layerEntitySet in entitySet.layerEntitySetList: if qad_layer.deleteFeaturesToLayer(self.plugIn, layerEntitySet.layer, layerEntitySet.featureIds, False) == False: self.plugIn.destroyEditCommand() return self.plugIn.endEditCommand() return True
def convexHullEntitySetToPolygon(self, entitySet, removeOriginals=False): """ modifica il poligono corrente in modo che includa tutti i punti delle geometrie di entitySet """ layerList = [] layerList.append(self.poligonEntity.layer) pointsForConvexHull = [] for layerEntitySet in entitySet.layerEntitySetList: layer = layerEntitySet.layer coordTransform = QgsCoordinateTransform(layer.crs(), self.poligonEntity.layer.crs()) for featureId in layerEntitySet.featureIds: f = layerEntitySet.getFeature(featureId) # trasformo la geometria nel crs del layer del poligono da modificare geom = f.geometry() geom.transform(coordTransform) # Riduco la geometria in point o polyline simplifiedGeoms = qad_utils.asPointOrPolyline(geom) for simplifiedGeom in simplifiedGeoms: if simplifiedGeom.wkbType() == QGis.WKBLineString: pointsForConvexHull.extend(simplifiedGeom.asPolyline()) else: pointsForConvexHull.append(simplifiedGeom.asPoint()) if removeOriginals and layer.id() != self.poligonEntity.layerId(): layerList.append(layer) geom = QgsGeometry.fromMultiPoint(pointsForConvexHull) geom = geom.convexHull() if geom is None: self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False f = self.poligonEntity.getFeature() f.setGeometry(geom) self.plugIn.beginEditCommand("Feature edited", layerList) # plugIn, layer, feature, refresh, check_validity if qad_layer.updateFeatureToLayer(self.plugIn, self.poligonEntity.layer, f, False, False) == False: self.plugIn.destroyEditCommand() return False if removeOriginals: for layerEntitySet in entitySet.layerEntitySetList: if ( qad_layer.deleteFeaturesToLayer(self.plugIn, layerEntitySet.layer, layerEntitySet.featureIds, False) == False ): self.plugIn.destroyEditCommand() return self.plugIn.endEditCommand() self.nOperationsToUndo = self.nOperationsToUndo + 1 return True
def convexHullEntitySetToPolygon(self, entitySet, removeOriginals = False): """ modifica il poligono corrente in modo che includa tutti i punti delle geometrie di entitySet """ layerList = [] layerList.append(self.poligonEntity.layer) pointsForConvexHull = [] for layerEntitySet in entitySet.layerEntitySetList: layer = layerEntitySet.layer coordTransform = QgsCoordinateTransform(layer.crs(), self.poligonEntity.layer.crs()) for featureId in layerEntitySet.featureIds: f = layerEntitySet.getFeature(featureId) # trasformo la geometria nel crs del layer del poligono da modificare geom = f.geometry() geom.transform(coordTransform) # Riduco la geometria in point o polyline simplifiedGeoms = qad_utils.asPointOrPolyline(geom) for simplifiedGeom in simplifiedGeoms: if simplifiedGeom.wkbType() == QGis.WKBLineString: pointsForConvexHull.extend(simplifiedGeom.asPolyline()) else: pointsForConvexHull.append(simplifiedGeom.asPoint()) if removeOriginals and layer.id() != self.poligonEntity.layerId(): layerList.append(layer) geom = QgsGeometry.fromMultiPoint(pointsForConvexHull) geom = geom.convexHull() if geom is None: self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False f = self.poligonEntity.getFeature() f.setGeometry(geom) self.plugIn.beginEditCommand("Feature edited", layerList) # plugIn, layer, feature, refresh, check_validity if qad_layer.updateFeatureToLayer(self.plugIn, self.poligonEntity.layer, f, False, False) == False: self.plugIn.destroyEditCommand() return False if removeOriginals: for layerEntitySet in entitySet.layerEntitySetList: if qad_layer.deleteFeaturesToLayer(self.plugIn, layerEntitySet.layer, layerEntitySet.featureIds, False) == False: self.plugIn.destroyEditCommand() return self.plugIn.endEditCommand() self.nOperationsToUndo = self.nOperationsToUndo + 1 return True
def addEntitySetToPolygon(self, entitySet, removeOriginals=True): """ Aggiunge il set di entità al poligono da modificare """ geom = self.entity.getGeometry() layerList = [] layerList.append(self.entity.layer) for layerEntitySet in entitySet.layerEntitySetList: layer = layerEntitySet.layer if layer.geometryType() != QGis.Polygon and layer.geometryType( ) != QGis.Line: self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False if removeOriginals: layerList.append(layer) coordTransform = QgsCoordinateTransform(layer.crs(), self.entity.layer.crs()) for featureId in layerEntitySet.featureIds: # se la feature è quella di entity è errore if layer.id() == self.entity.layerId( ) and featureId == self.entity.featureId: self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False f = layerEntitySet.getFeature(featureId) # trasformo la geometria nel crs del layer del poligono da modificare geomToAdd = f.geometry() geomToAdd.transform(coordTransform) # se il poligono è contenuto nella geometria da aggiungere if geomToAdd.contains(geom): # Riduco la geometria in point o polyline simplifiedGeoms = qad_utils.asPointOrPolyline(geom) # deve essere un poligono senza ring if len(simplifiedGeoms) != 1 or simplifiedGeoms[0].wkbType( ) != QGis.WKBLineString: self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False points = simplifiedGeoms[0].asPolyline( ) # vettore di punti # aggiungo un'isola if geomToAdd.addRing(points) != 0: # 0 in case of success self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False del geom geom = QgsGeometry.fromPolygon(geomToAdd.asPolygon()) else: # se il poligono non è contenuto nella geometria da aggiungere # Riduco la geometria in point o polyline simplifiedGeoms = qad_utils.asPointOrPolyline(geomToAdd) for simplifiedGeom in simplifiedGeoms: points = simplifiedGeom.asPolyline( ) # vettore di punti # se la geometria da aggiungere è contenuta nel poligono if geom.contains(QgsGeometry.fromPolyline(points)): # aggiungo un'isola if geom.addRing( points) != 0: # 0 in case of success self.showMsg( QadMsg.translate("QAD", "Invalid object.")) return False else: # aggiungo una parte if geom.addPart( points) != 0: # 0 in case of success self.showMsg( QadMsg.translate("QAD", "Invalid object.")) return False f = self.entity.getFeature() f.setGeometry(geom) layerList = entitySet.getLayerList() layerList.append(self.entity.layer) self.plugIn.beginEditCommand("Feature edited", layerList) # plugIn, layer, feature, refresh, check_validity if qad_layer.updateFeatureToLayer(self.plugIn, self.entity.layer, f, False, False) == False: self.plugIn.destroyEditCommand() return False if removeOriginals: for layerEntitySet in entitySet.layerEntitySetList: if qad_layer.deleteFeaturesToLayer(self.plugIn, layerEntitySet.layer, layerEntitySet.featureIds, False) == False: self.plugIn.destroyEditCommand() return self.plugIn.endEditCommand() return True
def addEntitySetToPoint(self, entitySet, removeOriginals=True): """ Aggiunge il set di entità al punto da modificare """ geom = self.entity.getGeometry() layerList = [] layerList.append(self.entity.layer) for layerEntitySet in entitySet.layerEntitySetList: layer = layerEntitySet.layer if layer.geometryType() != QGis.Point: self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False if removeOriginals: layerList.append(layer) coordTransform = QgsCoordinateTransform(layer.crs(), self.entity.layer.crs()) for featureId in layerEntitySet.featureIds: # se la feature è quella di entity è errore if layer.id() == self.entity.layerId( ) and featureId == self.entity.featureId: self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False f = layerEntitySet.getFeature(featureId) # trasformo la geometria nel crs del layer dell'entità da modificare geomToAdd = f.geometry() geomToAdd.transform(coordTransform) simplifiedGeoms = qad_utils.asPointOrPolyline(geomToAdd) for simplifiedGeom in simplifiedGeoms: point = simplifiedGeom.asPoint() # aggiungo una parte if geom.addPart([point]) != 0: # 0 in case of success self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False f = self.entity.getFeature() f.setGeometry(geom) layerList = entitySet.getLayerList() layerList.append(self.entity.layer) self.plugIn.beginEditCommand("Feature edited", layerList) # plugIn, layer, feature, refresh, check_validity if qad_layer.updateFeatureToLayer(self.plugIn, self.entity.layer, f, False, False) == False: self.plugIn.destroyEditCommand() return False if removeOriginals: for layerEntitySet in entitySet.layerEntitySetList: if qad_layer.deleteFeaturesToLayer(self.plugIn, layerEntitySet.layer, layerEntitySet.featureIds, False) == False: self.plugIn.destroyEditCommand() return self.plugIn.endEditCommand() return True
def unionIntersSubtractEntitySetToPolygon(self, entitySet, opType, removeOriginals = False): """ Unisce o interseca i poligoni di entitySet al poligono corrente """ geom = self.poligonEntity.getGeometry() layerList = [] layerList.append(self.poligonEntity.layer) geomList = [] geomList.append(geom) for layerEntitySet in entitySet.layerEntitySetList: del geomList[:] layer = layerEntitySet.layer coordTransform = QgsCoordinateTransform(layer.crs(), self.poligonEntity.layer.crs()) if layer.geometryType() == QGis.Polygon: for featureId in layerEntitySet.featureIds: # se la feature è quella di polygonEntity è errore if layer.id() == self.poligonEntity.layerId() and featureId == self.poligonEntity.featureId: self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False f = layerEntitySet.getFeature(featureId) # trasformo la geometria nel crs del layer del poligono da modificare geomToAdd = f.geometry() geomToAdd.transform(coordTransform) if opType == QadMAPMPEDITCommandOpTypeEnum.UNION: geom = geom.combine(geomToAdd) elif opType == QadMAPMPEDITCommandOpTypeEnum.INTERSECTION: geom = geom.intersection(geomToAdd) elif opType == QadMAPMPEDITCommandOpTypeEnum.DIFFERENCE: geom = geom.difference(geomToAdd) if geom is None: self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False if removeOriginals and layer.id() != self.poligonEntity.layerId(): layerList.append(layer) elif layer.geometryType() == QGis.Line: for featureId in layerEntitySet.featureIds: f = layerEntitySet.getFeature(featureId) # trasformo la geometria nel crs del layer del poligono da modificare geomToAdd = f.geometry() geomToAdd.transform(coordTransform) # Riduco la geometria in point o polyline simplifiedGeoms = qad_utils.asPointOrPolyline(geomToAdd) for simplifiedGeom in simplifiedGeoms: if simplifiedGeom.wkbType() != QGis.WKBLineString: self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False points = simplifiedGeom.asPolyline() # vettore di punti if len(points) < 4 or points[0] != points[-1]: # polilinea chiusa con almeno 4 punti (primo e ultimo uguali) self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False geomToAdd = QgsGeometry.fromPolygon([points]) if opType == QadMAPMPEDITCommandOpTypeEnum.UNION: geom = geom.combine(geomToAdd) elif opType == QadMAPMPEDITCommandOpTypeEnum.INTERSECTION: geom = geom.intersection(geomToAdd) elif opType == QadMAPMPEDITCommandOpTypeEnum.DIFFERENCE: geom = geom.difference(geomToAdd) if geom is None or geom.type() != QGis.Polygon: self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False if removeOriginals: layerList.append(layer) else: self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False f = self.poligonEntity.getFeature() f.setGeometry(geom) self.plugIn.beginEditCommand("Feature edited", layerList) # plugIn, layer, feature, refresh, check_validity if qad_layer.updateFeatureToLayer(self.plugIn, self.poligonEntity.layer, f, False, False) == False: self.plugIn.destroyEditCommand() return False if removeOriginals: for layerEntitySet in entitySet.layerEntitySetList: if qad_layer.deleteFeaturesToLayer(self.plugIn, layerEntitySet.layer, layerEntitySet.featureIds, False) == False: self.plugIn.destroyEditCommand() return self.plugIn.endEditCommand() self.nOperationsToUndo = self.nOperationsToUndo + 1 return True
def addEntitySetToPolygon(self, entitySet, removeOriginals = False): """ Aggiunge il set di entità al poligono da modificare """ geom = self.poligonEntity.getGeometry() layerList = [] layerList.append(self.poligonEntity.layer) for layerEntitySet in entitySet.layerEntitySetList: layer = layerEntitySet.layer if layer.geometryType() != QGis.Polygon and layer.geometryType() != QGis.Line: self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False if removeOriginals: layerList.append(layer) coordTransform = QgsCoordinateTransform(layer.crs(), self.poligonEntity.layer.crs()) for featureId in layerEntitySet.featureIds: # se la feature è quella di polygonEntity è errore if layer.id() == self.poligonEntity.layerId() and featureId == self.poligonEntity.featureId: self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False f = layerEntitySet.getFeature(featureId) # trasformo la geometria nel crs del layer del poligono da modificare geomToAdd = f.geometry() geomToAdd.transform(coordTransform) # se il poligono è contenuto nella geometria da aggiungere if geomToAdd.contains(geom): # Riduco la geometria in point o polyline simplifiedGeoms = qad_utils.asPointOrPolyline(geom) # deve essere un poligono senza ring if len(simplifiedGeoms) != 1 or simplifiedGeoms[0].wkbType() != QGis.WKBLineString: self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False points = simplifiedGeoms[0].asPolyline() # vettore di punti # aggiungo un'isola if geomToAdd.addRing(points) != 0: # 0 in case of success self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False del geom geom = QgsGeometry.fromPolygon(geomToAdd.asPolygon()) else: # se il poligono non è contenuto nella geometria da aggiungere # Riduco la geometria in point o polyline simplifiedGeoms = qad_utils.asPointOrPolyline(geomToAdd) for simplifiedGeom in simplifiedGeoms: points = simplifiedGeom.asPolyline() # vettore di punti # se la geometria da aggiungere è contenuta nel poligono if geom.contains(QgsGeometry.fromPolyline(points)): # aggiungo un'isola if geom.addRing(points) != 0: # 0 in case of success self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False else: # aggiungo una parte if geom.addPart(points) != 0: # 0 in case of success self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False f = self.poligonEntity.getFeature() f.setGeometry(geom) layerList = entitySet.getLayerList() layerList.append(self.poligonEntity.layer) self.plugIn.beginEditCommand("Feature edited", layerList) # plugIn, layer, feature, refresh, check_validity if qad_layer.updateFeatureToLayer(self.plugIn, self.poligonEntity.layer, f, False, False) == False: self.plugIn.destroyEditCommand() return False if removeOriginals: for layerEntitySet in entitySet.layerEntitySetList: if qad_layer.deleteFeaturesToLayer(self.plugIn, layerEntitySet.layer, layerEntitySet.featureIds, False) == False: self.plugIn.destroyEditCommand() return self.plugIn.endEditCommand() self.nOperationsToUndo = self.nOperationsToUndo + 1 return True