예제 #1
0
   def trimFeatures(self, geom, toExtend):
      # geom è in map coordinates
      tolerance2ApproxCurve = QadVariables.get(QadMsg.translate("Environment variables", "TOLERANCE2APPROXCURVE"))
      LineTempLayer = None
      self.plugIn.beginEditCommand("Feature extended" if toExtend else "Feature trimmed", \
                                   self.entitySet.getLayerList())
      
      for layerEntitySet in self.entitySet.layerEntitySetList:
         layer = layerEntitySet.layer

         for featureId in layerEntitySet.featureIds:
            f = qad_utils.getFeatureById(layer, featureId)
            if f is None:
               continue
            # trasformo la geometria nel crs del canvas per lavorare con coordinate piane xy
            f_geom = self.layerToMapCoordinates(layer, f.geometry())
            
            if geom.type() == QGis.Point:
               # ritorna una tupla (<The squared cartesian distance>,
               #                    <minDistPoint>
               #                    <afterVertex>
               #                    <leftOf>)
               dummy = qad_utils.closestSegmentWithContext(geom.asPoint(), f_geom)
               if dummy[1] is not None:
                  intPts = [dummy[1]]
            else:
               intPts = qad_utils.getIntersectionPoints(geom, f_geom)
               
            for intPt in intPts:               
               if toExtend:
                  newGeom = qad_utils.extendQgsGeometry(self.plugIn.canvas.mapRenderer().destinationCrs(), f_geom, intPt, \
                                                        self.limitEntitySet, self.edgeMode, \
                                                        tolerance2ApproxCurve)
                  if newGeom is not None:
                     # aggiorno la feature con la geometria estesa
                     extendedFeature = QgsFeature(f)
                     # trasformo la geometria nel crs del layer
                     extendedFeature.setGeometry(self.mapToLayerCoordinates(layer, newGeom))
                     # plugIn, layer, feature, refresh, check_validity
                     if qad_layer.updateFeatureToLayer(self.plugIn, layer, extendedFeature, False, False) == False:
                        self.plugIn.destroyEditCommand()
                        return
               else: # trim
                  result = qad_utils.trimQgsGeometry(self.plugIn.canvas.mapRenderer().destinationCrs(), f_geom, intPt, \
                                                     self.limitEntitySet, self.edgeMode, \
                                                     tolerance2ApproxCurve)                  
                  if result is not None:
                     line1 = result[0]
                     line2 = result[1]
                     atSubGeom = result[2]
                     if layer.geometryType() == QGis.Line:
                        updGeom = qad_utils.setSubGeom(f_geom, line1, atSubGeom)
                        if updGeom is None:
                           self.plugIn.destroyEditCommand()
                           return
                        trimmedFeature1 = QgsFeature(f)
                        # trasformo la geometria nel crs del layer
                        trimmedFeature1.setGeometry(self.mapToLayerCoordinates(layer, updGeom))
                        # plugIn, layer, feature, refresh, check_validity
                        if qad_layer.updateFeatureToLayer(self.plugIn, layer, trimmedFeature1, False, False) == False:
                           self.plugIn.destroyEditCommand()
                           return
                        if line2 is not None:
                           trimmedFeature2 = QgsFeature(f)      
                           # trasformo la geometria nel crs del layer
                           trimmedFeature2.setGeometry(self.mapToLayerCoordinates(layer, line2))
                           # plugIn, layer, feature, coordTransform, refresh, check_validity
                           if qad_layer.addFeatureToLayer(self.plugIn, layer, trimmedFeature2, None, False, False) == False:
                              self.plugIn.destroyEditCommand()
                              return                        
                     else:
                        # aggiungo le linee nei layer temporanei di QAD
                        if LineTempLayer is None:
                           LineTempLayer = qad_layer.createQADTempLayer(self.plugIn, QGis.Line)
                           self.plugIn.addLayerToLastEditCommand("Feature trimmed", LineTempLayer)
                        
                        lineGeoms = [line1]
                        if line2 is not None:
                           lineGeoms.append(line2)

                        # trasformo la geometria in quella dei layer temporanei
                        # plugIn, pointGeoms, lineGeoms, polygonGeoms, coord, refresh
                        if qad_layer.addGeometriesToQADTempLayers(self.plugIn, None, lineGeoms, None, None, False) == False:
                           self.plugIn.destroyEditCommand()
                           return
                                                      
                        updGeom = qad_utils.delSubGeom(f_geom, atSubGeom)
                        
                        if updGeom is None or updGeom.isGeosEmpty(): # da cancellare
                           # plugIn, layer, feature id, refresh
                           if qad_layer.deleteFeatureToLayer(self.plugIn, layer, f.id(), False) == False:
                              self.plugIn.destroyEditCommand()
                              return
                        else:
                           trimmedFeature1 = QgsFeature(f)
                           # trasformo la geometria nel crs del layer
                           trimmedFeature1.setGeometry(self.mapToLayerCoordinates(layer, updGeom))
                           # plugIn, layer, feature, refresh, check_validity
                           if qad_layer.updateFeatureToLayer(self.plugIn, layer, trimmedFeature1, False, False) == False:
                              self.plugIn.destroyEditCommand()
                              return

      self.plugIn.endEditCommand()
      self.nOperationsToUndo = self.nOperationsToUndo + 1
   def breakFeatures(self):
      f = self.entSelClass.entity.getFeature()
      if f is None:
         return
      
      layer = self.entSelClass.entity.layer
      LineTempLayer = None
      self.plugIn.beginEditCommand("Feature broken", layer)
      
      tolerance2ApproxCurve = QadVariables.get(QadMsg.translate("Environment variables", "TOLERANCE2APPROXCURVE"))                           

      # trasformo la geometria nel crs del canvas per lavorare con coordinate piane xy
      g = self.layerToMapCoordinates(layer, f.geometry())         
      result = qad_utils.breakQgsGeometry(g, self.firstPt, self.secondPt, \
                                          tolerance2ApproxCurve)                  
      if result is not None:
         line1 = result[0]
         line2 = result[1]
         atSubGeom = result[2]
         if layer.geometryType() == QGis.Line:
            if line1 is not None:
               updGeom = qad_utils.setSubGeom(g, line1, atSubGeom)
               if updGeom is None:
                  self.plugIn.destroyEditCommand()
                  return
               brokenFeature1 = QgsFeature(f)
               # trasformo la geometria nel crs del layer
               brokenFeature1.setGeometry(self.mapToLayerCoordinates(layer, updGeom))
               # plugIn, layer, feature, refresh, check_validity
               if qad_layer.updateFeatureToLayer(self.plugIn, layer, brokenFeature1, False, False) == False:
                  self.plugIn.destroyEditCommand()
                  return
            if line2 is not None:
               brokenFeature2 = QgsFeature(f)      
               # trasformo la geometria nel crs del layer
               brokenFeature2.setGeometry(self.mapToLayerCoordinates(layer, line2))
               # plugIn, layer, feature, coordTransform, refresh, check_validity
               if qad_layer.addFeatureToLayer(self.plugIn, layer, brokenFeature2, None, False, False) == False:
                  self.plugIn.destroyEditCommand()
                  return            
         else:
            # aggiungo le linee nei layer temporanei di QAD
            if LineTempLayer is None:
               LineTempLayer = qad_layer.createQADTempLayer(self.plugIn, QGis.Line)
               self.plugIn.addLayerToLastEditCommand("Feature broken", LineTempLayer)
            
            lineGeoms = []
            if line1 is not None:
               lineGeoms.append(line1)
            if line2 is not None:
               lineGeoms.append(line2)

            # trasformo la geometria in quella dei layer temporanei
            # plugIn, pointGeoms, lineGeoms, polygonGeoms, coord, refresh
            if qad_layer.addGeometriesToQADTempLayers(self.plugIn, None, lineGeoms, None, None, False) == False:
               self.plugIn.destroyEditCommand()
               return
            
            updGeom = qad_utils.delSubGeom(g, atSubGeom)

            if updGeom is None or updGeom.isGeosEmpty(): # da cancellare
               # plugIn, layer, feature id, refresh
               if qad_layer.deleteFeatureToLayer(self.plugIn, layer, f.id(), False) == False:
                  self.plugIn.destroyEditCommand()
                  return
            else:
               brokenFeature1 = QgsFeature(f)
               # trasformo la geometria nel crs del layer
               brokenFeature1.setGeometry(self.mapToLayerCoordinates(layer, updGeom))
               # plugIn, layer, feature, refresh, check_validity
               if qad_layer.updateFeatureToLayer(self.plugIn, layer, brokenFeature1, False, False) == False:
                  self.plugIn.destroyEditCommand()
                  return

      self.plugIn.endEditCommand()
예제 #3
0
    def AddGeoms(self, currLayer):
        bufferGeoms = []
        tolerance = QadVariables.get(
            QadMsg.translate("Environment variables", "TOLERANCE2APPROXCURVE"))

        for layerEntitySet in self.entitySet.layerEntitySetList:
            layer = layerEntitySet.layer
            geoms = layerEntitySet.getGeometryCollection()

            for geom in geoms:
                # trasformo la geometria nel crs del canvas per lavorare con coordinate piane xy
                newGeom = self.layerToMapCoordinates(layer, geom)
                g = qad_utils.ApproxCurvesOnGeom(newGeom.buffer(self.width, self.segments), \
                                                 self.segments, self.segments, \
                                                 tolerance)
                # trasformo la geometria nel crs del layer
                bufferGeoms.append(self.mapToLayerCoordinates(layer, g))

        self.plugIn.beginEditCommand("Feature buffered", currLayer)

        # filtro le features per tipo
        pointGeoms, lineGeoms, polygonGeoms = qad_utils.filterGeomsByType(bufferGeoms, \
                                                                          currLayer.geometryType())
        # aggiungo le geometrie 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, geoms, coordTransform , refresh, check_validity
        if qad_layer.addGeomsToLayer(self.plugIn, currLayer, bufferGeoms, None,
                                     False, False) == False:
            self.plugIn.destroyEditCommand()
            return

        if pointGeoms is not None and len(pointGeoms) > 0:
            PointTempLayer = qad_layer.createQADTempLayer(
                self.plugIn, QGis.Point)
            self.plugIn.addLayerToLastEditCommand("Feature buffered",
                                                  PointTempLayer)

        if lineGeoms is not None and len(lineGeoms) > 0:
            LineTempLayer = qad_layer.createQADTempLayer(
                self.plugIn, QGis.Line)
            self.plugIn.addLayerToLastEditCommand("Feature buffered",
                                                  LineTempLayer)

        if polygonGeoms is not None and len(polygonGeoms) > 0:
            PolygonTempLayer = qad_layer.createQADTempLayer(
                self.plugIn, QGis.Polygon)
            self.plugIn.addLayerToLastEditCommand("Feature buffered",
                                                  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, \
                                                  None, False) == False:
            self.plugIn.destroyEditCommand()
            return

        self.plugIn.endEditCommand()
예제 #4
0
    def breakFeatures(self):
        f = self.EntSelClass.entity.getFeature()
        if f is None:
            return

        layer = self.EntSelClass.entity.layer
        LineTempLayer = None
        self.plugIn.beginEditCommand("Feature broken", layer)

        tolerance2ApproxCurve = QadVariables.get(QadMsg.translate("Environment variables", "TOLERANCE2APPROXCURVE"))

        # trasformo la geometria nel crs del canvas per lavorare con coordinate piane xy
        g = self.layerToMapCoordinates(layer, f.geometry())
        result = qad_utils.breakQgsGeometry(g, self.firstPt, self.secondPt, tolerance2ApproxCurve)
        if result is not None:
            line1 = result[0]
            line2 = result[1]
            atSubGeom = result[2]
            if layer.geometryType() == QGis.Line:
                if line1 is not None:
                    updGeom = qad_utils.setSubGeom(g, line1, atSubGeom)
                    if updGeom is None:
                        self.plugIn.destroyEditCommand()
                        return
                    brokenFeature1 = QgsFeature(f)
                    # trasformo la geometria nel crs del layer
                    brokenFeature1.setGeometry(self.mapToLayerCoordinates(layer, updGeom))
                    # plugIn, layer, feature, refresh, check_validity
                    if qad_layer.updateFeatureToLayer(self.plugIn, layer, brokenFeature1, False, False) == False:
                        self.plugIn.destroyEditCommand()
                        return
                if line2 is not None:
                    brokenFeature2 = QgsFeature(f)
                    # trasformo la geometria nel crs del layer
                    brokenFeature2.setGeometry(self.mapToLayerCoordinates(layer, line2))
                    # plugIn, layer, feature, coordTransform, refresh, check_validity
                    if qad_layer.addFeatureToLayer(self.plugIn, layer, brokenFeature2, None, False, False) == False:
                        self.plugIn.destroyEditCommand()
                        return
            else:
                # aggiungo le linee nei layer temporanei di QAD
                if LineTempLayer is None:
                    LineTempLayer = qad_layer.createQADTempLayer(self.plugIn, QGis.Line)
                    self.plugIn.addLayerToLastEditCommand("Feature broken", LineTempLayer)

                lineGeoms = []
                if line1 is not None:
                    lineGeoms.append(line1)
                if line2 is not None:
                    lineGeoms.append(line2)

                # trasformo la geometria in quella dei layer temporanei
                # plugIn, pointGeoms, lineGeoms, polygonGeoms, coord, refresh
                if qad_layer.addGeometriesToQADTempLayers(self.plugIn, None, lineGeoms, None, None, False) == False:
                    self.plugIn.destroyEditCommand()
                    return

                updGeom = qad_utils.delSubGeom(g, atSubGeom)

                if updGeom is None or updGeom.isGeosEmpty():  # da cancellare
                    # plugIn, layer, feature id, refresh
                    if qad_layer.deleteFeatureToLayer(self.plugIn, layer, f.id(), False) == False:
                        self.plugIn.destroyEditCommand()
                        return
                else:
                    brokenFeature1 = QgsFeature(f)
                    # trasformo la geometria nel crs del layer
                    brokenFeature1.setGeometry(self.mapToLayerCoordinates(layer, updGeom))
                    # plugIn, layer, feature, refresh, check_validity
                    if qad_layer.updateFeatureToLayer(self.plugIn, layer, brokenFeature1, False, False) == False:
                        self.plugIn.destroyEditCommand()
                        return

        self.plugIn.endEditCommand()
예제 #5
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()
예제 #6
0
   def AddGeoms(self, currLayer):
      bufferGeoms = []
      tolerance = QadVariables.get(QadMsg.translate("Environment variables", "TOLERANCE2APPROXCURVE"))
            
      for layerEntitySet in self.entitySet.layerEntitySetList:
         layer = layerEntitySet.layer
         geoms = layerEntitySet.getGeometryCollection()
         
         for geom in geoms:
            # trasformo la geometria nel crs del canvas per lavorare con coordinate piane xy
            newGeom = self.layerToMapCoordinates(layer, geom)
            g = qad_utils.ApproxCurvesOnGeom(newGeom.buffer(self.width, self.segments), \
                                             self.segments, self.segments, \
                                             tolerance)
            # trasformo la geometria nel crs del layer
            bufferGeoms.append(self.mapToLayerCoordinates(layer, g))

      self.plugIn.beginEditCommand("Feature buffered", currLayer)
      
      # filtro le features per tipo
      pointGeoms, lineGeoms, polygonGeoms = qad_utils.filterGeomsByType(bufferGeoms, \
                                                                        currLayer.geometryType())
      # aggiungo le geometrie 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, geoms, coordTransform , refresh, check_validity
      if qad_layer.addGeomsToLayer(self.plugIn, currLayer, bufferGeoms, None, False, False) == False:  
         self.plugIn.destroyEditCommand()
         return

      if pointGeoms is not None and len(pointGeoms) > 0:
         PointTempLayer = qad_layer.createQADTempLayer(self.plugIn, QGis.Point)
         self.plugIn.addLayerToLastEditCommand("Feature buffered", PointTempLayer)
      
      if lineGeoms is not None and len(lineGeoms) > 0:
         LineTempLayer = qad_layer.createQADTempLayer(self.plugIn, QGis.Line)
         self.plugIn.addLayerToLastEditCommand("Feature buffered", LineTempLayer)
         
      if polygonGeoms is not None and len(polygonGeoms) > 0:
         PolygonTempLayer = qad_layer.createQADTempLayer(self.plugIn, QGis.Polygon)
         self.plugIn.addLayerToLastEditCommand("Feature buffered", 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, \
                                                None, False) == False:
         self.plugIn.destroyEditCommand()
         return

      self.plugIn.endEditCommand()
예제 #7
0
    def AddGeoms(self, currLayer):
        bufferGeoms = []

        for layerEntitySet in self.entitySet.layerEntitySetList:
            geoms = layerEntitySet.getGeometryCollection()
            width = qad_utils.distMapToLayerCoordinates(
                self.width, self.SSGetClass.getPointMapTool().canvas, layerEntitySet.layer
            )
            tolerance = qad_utils.distMapToLayerCoordinates(
                QadVariables.get(QadMsg.translate("Environment variables", "TOLERANCE2APPROXCURVE")),
                self.SSGetClass.getPointMapTool().canvas,
                layerEntitySet.layer,
            )
            if layerEntitySet.layer.crs() != currLayer.crs():
                coordTransform = QgsCoordinateTransform(
                    layerEntitySet.layer.crs(), currLayer.crs()
                )  # trasformo la geometria
            else:
                coordTransform = None

            for geom in geoms:
                g = qad_utils.ApproxCurvesOnGeom(
                    geom.buffer(width, self.segments), self.segments, self.segments, tolerance
                )
                if coordTransform is not None:
                    g.transform(coordTransform)
                bufferGeoms.append(g)

        self.plugIn.beginEditCommand("Feature buffered", currLayer)

        # filtro le features per tipo
        pointGeoms, lineGeoms, polygonGeoms = qad_utils.filterGeomsByType(bufferGeoms, currLayer.geometryType())
        # aggiungo le geometrie 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, geoms, coordTransform , refresh, check_validity
        if qad_layer.addGeomsToLayer(self.plugIn, currLayer, bufferGeoms, None, False, False) == False:
            self.plugIn.destroyEditCommand()
            return

        if pointGeoms is not None and len(pointGeoms) > 0:
            PointTempLayer = qad_layer.createQADTempLayer(self.plugIn, QGis.Point)
            self.plugIn.addLayerToLastEditCommand("Feature buffered", PointTempLayer)

        if lineGeoms is not None and len(lineGeoms) > 0:
            LineTempLayer = qad_layer.createQADTempLayer(self.plugIn, QGis.Line)
            self.plugIn.addLayerToLastEditCommand("Feature buffered", LineTempLayer)

        if polygonGeoms is not None and len(polygonGeoms) > 0:
            PolygonTempLayer = qad_layer.createQADTempLayer(self.plugIn, QGis.Polygon)
            self.plugIn.addLayerToLastEditCommand("Feature buffered", 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, currLayer.crs(), False
            )
            == False
        ):
            self.plugIn.destroyEditCommand()
            return

        self.plugIn.endEditCommand()
예제 #8
0
파일: qad_break_cmd.py 프로젝트: luipir/QAD
   def breakFeatures(self):
      layer = self.EntSelClass.entity.layer
      LineTempLayer = None
      self.plugIn.beginEditCommand("Feature broken", layer)
      
      tolerance2ApproxCurve = qad_utils.distMapToLayerCoordinates(QadVariables.get(QadMsg.translate("Environment variables", "TOLERANCE2APPROXCURVE")), \
                                                                  self.plugIn.canvas,\
                                                                  layer)                              
                  
      f = self.EntSelClass.entity.getFeature()
      g = f.geometry()
      if self.plugIn.canvas.mapRenderer().destinationCrs() != layer.crs():         
         # Trasformo i punti di break nel sistema di coordinate del layer
         self.firstPt = self.mapToLayerCoordinates(layer, self.firstPt)
         self.secondPt = self.mapToLayerCoordinates(layer, self.secondPt)
         
      result = qad_utils.breakQgsGeometry(layer, f.geometry(), self.firstPt, self.secondPt, \
                                          tolerance2ApproxCurve)                  
      if result is not None:
         line1 = result[0]
         line2 = result[1]
         atSubGeom = result[2]
         if layer.geometryType() == QGis.Line:
            updGeom = qad_utils.setSubGeom(f.geometry(), line1, atSubGeom)
            if updGeom is None:
               self.plugIn.destroyEditCommand()
               return
            brokenFeature1 = QgsFeature(f)
            brokenFeature1.setGeometry(updGeom)
            # plugIn, layer, feature, refresh, check_validity
            if qad_layer.updateFeatureToLayer(self.plugIn, layer, brokenFeature1, False, False) == False:
               self.plugIn.destroyEditCommand()
               return
            if line2 is not None:
               brokenFeature2 = QgsFeature(f)      
               brokenFeature2.setGeometry(line2)
               # plugIn, layer, feature, coordTransform, refresh, check_validity
               if qad_layer.addFeatureToLayer(self.plugIn, layer, brokenFeature2, None, False, False) == False:
                  self.plugIn.destroyEditCommand()
                  return            
         else:
            # aggiungo le linee nei layer temporanei di QAD
            if LineTempLayer is None:
               LineTempLayer = qad_layer.createQADTempLayer(self.plugIn, QGis.Line)
               self.plugIn.addLayerToLastEditCommand("Feature broken", LineTempLayer)
            
            lineGeoms = [line1]
            if line2 is not None:
               lineGeoms.append(line2)

            # trasformo la geometria in quella dei layer temporanei
            # plugIn, pointGeoms, lineGeoms, polygonGeoms, coord, refresh
            if qad_layer.addGeometriesToQADTempLayers(self.plugIn, None, lineGeoms, None, layer.crs(), False) == False:
               self.plugIn.destroyEditCommand()
               return
            
            updGeom = qad_utils.delSubGeom(f.geometry(), atSubGeom)         

            if updGeom is None or updGeom.isGeosEmpty(): # da cancellare
               # plugIn, layer, feature id, refresh
               if qad_layer.deleteFeatureToLayer(self.plugIn, layer, f.id(), False) == False:
                  self.plugIn.destroyEditCommand()
                  return
            else:
               brokenFeature1 = QgsFeature(f)
               brokenFeature1.setGeometry(updGeom)
               # plugIn, layer, feature, refresh, check_validity
               if qad_layer.updateFeatureToLayer(self.plugIn, layer, brokenFeature1, False, False) == False:
                  self.plugIn.destroyEditCommand()
                  return

      self.plugIn.endEditCommand()