def splitPolygon(self, splitLine, createNewEntities): """ divide il poligono corrente usando una polilinea con i vertci in <plineVertices> in modo da generare o meno nuove entità """ layerList = [] layerList.append(self.poligonEntity.layer) splitLineTransformed = self.mapToLayerCoordinates( self.poligonEntity.layer, splitLine) f = self.poligonEntity.getFeature() geom = f.geometry() result, newGeoms, topologyTestPts = geom.splitGeometry( splitLineTransformed, False) if result <> 0 or len(newGeoms) == 0: self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False newfeatures = [] if createNewEntities: for newGeom in newGeoms: newfeature = QgsFeature(f) newfeature.setGeometry(newGeom) newfeatures.append(newfeature) else: for newGeom in newGeoms: # Riduco la geometria in point o polyline simplifiedGeoms = qad_utils.asPointOrPolyline(newGeom) for simplifiedGeom in simplifiedGeoms: points = simplifiedGeom.asPolyline() # vettore di punti res = geom.addPart(points) 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 len(newfeatures) > 0: # plugIn, layer, features, coordTransform, refresh, check_validity if qad_layer.addFeaturesToLayer(self.plugIn, self.poligonEntity.layer, newfeatures, None, False, False) == False: self.plugIn.destroyEditCommand() return self.plugIn.endEditCommand() self.nOperationsToUndo = self.nOperationsToUndo + 1 return True
def splitPolygon(self, splitLine, createNewEntities): """ divide il poligono corrente usando una polilinea con i vertci in <plineVertices> in modo da generare o meno nuove entità """ layerList = [] layerList.append(self.poligonEntity.layer) splitLineTransformed = self.mapToLayerCoordinates(self.poligonEntity.layer, splitLine) f = self.poligonEntity.getFeature() geom = f.geometry() result, newGeoms, topologyTestPts = geom.splitGeometry(splitLineTransformed, False) if result <> 0 or len(newGeoms) == 0: self.showMsg(QadMsg.translate("QAD", "Invalid object.")) return False newfeatures = [] if createNewEntities: for newGeom in newGeoms: newfeature = QgsFeature(f) newfeature.setGeometry(newGeom) newfeatures.append(newfeature) else: for newGeom in newGeoms: # Riduco la geometria in point o polyline simplifiedGeoms = qad_utils.asPointOrPolyline(newGeom) for simplifiedGeom in simplifiedGeoms: points = simplifiedGeom.asPolyline() # vettore di punti res = geom.addPart(points) 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 len(newfeatures) > 0: # plugIn, layer, features, coordTransform, refresh, check_validity if ( qad_layer.addFeaturesToLayer(self.plugIn, self.poligonEntity.layer, newfeatures, None, False, False) == False ): self.plugIn.destroyEditCommand() return self.plugIn.endEditCommand() self.nOperationsToUndo = self.nOperationsToUndo + 1 return True
def offsetGeoms(self, currLayer): featuresLayers = [] # lista di (layer, features) for f in self.featureCache: layer = f[0] feature = f[1] found = False for featuresLayer in featuresLayers: if featuresLayer[0].id() == layer.id(): found = True featuresLayer[1].append(feature) break # se non c'era ancora il layer if not found: featuresLayers.append([layer, [feature]]) layerList = [] for featuresLayer in featuresLayers: layerList.append(featuresLayer[0]) PointTempLayer = None LineTempLayer = None PolygonTempLayer = None self.plugIn.beginEditCommand("Feature offseted", layerList) for featuresLayer in featuresLayers: # filtro le features per tipo pointGeoms, lineGeoms, polygonGeoms = qad_utils.filterFeaturesByType(featuresLayer[1], \ currLayer.geometryType()) # aggiungo le features con geometria del tipo corretto if currLayer.geometryType() == QGis.Line: polygonToLines = [] # Riduco le geometrie in linee for g in polygonGeoms: lines = qad_utils.asPointOrPolyline(g) for l in lines: if l.type() == QGis.Line: polygonToLines.append(l) # plugIn, layer, geoms, coordTransform , refresh, check_validity if qad_layer.addGeomsToLayer(self.plugIn, currLayer, polygonToLines, None, False, False) == False: self.plugIn.destroyEditCommand() return del polygonGeoms[:] # svuoto la lista # plugIn, layer, features, coordTransform, refresh, check_validity if qad_layer.addFeaturesToLayer(self.plugIn, currLayer, featuresLayer[1], None, False, False) == False: self.plugIn.destroyEditCommand() return if pointGeoms is not None and len(pointGeoms) > 0 and PointTempLayer is None: PointTempLayer = qad_layer.createQADTempLayer(self.plugIn, QGis.Point) self.plugIn.addLayerToLastEditCommand("Feature offseted", PointTempLayer) if lineGeoms is not None and len(lineGeoms) > 0 and LineTempLayer is None: LineTempLayer = qad_layer.createQADTempLayer(self.plugIn, QGis.Line) self.plugIn.addLayerToLastEditCommand("Feature offseted", LineTempLayer) if polygonGeoms is not None and len(polygonGeoms) > 0 and PolygonTempLayer is None: PolygonTempLayer = qad_layer.createQADTempLayer(self.plugIn, QGis.Polygon) self.plugIn.addLayerToLastEditCommand("Feature offseted", PolygonTempLayer) # aggiungo gli scarti nei layer temporanei di QAD # trasformo la geometria in quella dei layer temporanei # plugIn, pointGeoms, lineGeoms, polygonGeoms, coord, refresh if qad_layer.addGeometriesToQADTempLayers(self.plugIn, pointGeoms, lineGeoms, polygonGeoms, \ featuresLayer[0].crs(), False) == False: self.plugIn.destroyEditCommand() return self.plugIn.endEditCommand()