Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
   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()