Beispiel #1
0
    def scaleGeoms(self, scale):
        # copio entitySet
        entitySet = QadEntitySet(self.entitySet)

        self.plugIn.beginEditCommand("Feature scaled",
                                     self.entitySet.getLayerList())

        for layerEntitySet in entitySet.layerEntitySetList:
            layer = layerEntitySet.layer

            transformedBasePt = self.mapToLayerCoordinates(layer, self.basePt)

            sizeFldName = None
            if qad_layer.isTextLayer(layer):
                # se l'altezza testo dipende da un solo campo
                sizeFldNames = qad_label.get_labelSizeFieldNames(layer)
                if len(sizeFldNames) == 1 and len(sizeFldNames[0]) > 0:
                    sizeFldName = sizeFldNames[0]
            elif qad_layer.isSymbolLayer(layer):
                # se la scala dipende da un campo
                sizeFldName = qad_layer.get_symbolScaleFieldName(layer)
                if len(sizeFldName) == 0:
                    sizeFldName = None

            while len(layerEntitySet.featureIds) > 0:
                featureId = layerEntitySet.featureIds[0]
                f = layerEntitySet.getFeature(featureId)

                if self.scale(f, transformedBasePt, scale, sizeFldName,
                              layerEntitySet, entitySet) == False:
                    self.plugIn.destroyEditCommand()
                    return

        self.plugIn.endEditCommand()
    def RotateGeoms(self, angle):
        # copio entitySet
        entitySet = QadEntitySet(self.entitySet)

        self.plugIn.beginEditCommand("Feature rotated",
                                     entitySet.getLayerList())

        for layerEntitySet in entitySet.layerEntitySetList:
            layer = layerEntitySet.layer

            transformedBasePt = self.mapToLayerCoordinates(layer, self.basePt)

            rotFldName = ""
            if qad_layer.isTextLayer(layer):
                # se la rotazione dipende da un solo campo
                rotFldNames = qad_label.get_labelRotationFieldNames(layer)
                if len(rotFldNames) == 1 and len(rotFldNames[0]) > 0:
                    rotFldName = rotFldNames[0]
            elif qad_layer.isSymbolLayer(layer):
                rotFldName = qad_layer.get_symbolRotationFieldName(layer)

            while len(layerEntitySet.featureIds) > 0:
                featureId = layerEntitySet.featureIds[0]
                f = layerEntitySet.getFeature(featureId)

                if self.rotate(f, transformedBasePt, angle, rotFldName,
                               layerEntitySet, entitySet) == False:
                    self.plugIn.destroyEditCommand()
                    return

        self.plugIn.endEditCommand()
Beispiel #3
0
   def scaleGeoms(self, scale):      
      # copio entitySet
      entitySet = QadEntitySet(self.entitySet)
      
      self.plugIn.beginEditCommand("Feature scaled", self.entitySet.getLayerList())
      
      for layerEntitySet in entitySet.layerEntitySetList:
         layer = layerEntitySet.layer
                              
         transformedBasePt = self.mapToLayerCoordinates(layer, self.basePt)
         
         sizeFldName = None
         if qad_layer.isTextLayer(layer):
            # se l'altezza testo dipende da un solo campo 
            sizeFldNames = qad_label.get_labelSizeFieldNames(layer)
            if len(sizeFldNames) == 1 and len(sizeFldNames[0]) > 0:
                sizeFldName = sizeFldNames[0]
         elif qad_layer.isSymbolLayer(layer):
            # se la scala dipende da un campo 
            sizeFldName = qad_layer.get_symbolScaleFieldName(layer)
            if len(sizeFldName) == 0:
               sizeFldName = None

         while len(layerEntitySet.featureIds) > 0:
            featureId = layerEntitySet.featureIds[0]
            f = layerEntitySet.getFeature(featureId)

            if self.scale(f, transformedBasePt, scale, sizeFldName, layerEntitySet, entitySet) == False:  
               self.plugIn.destroyEditCommand()
               return

      self.plugIn.endEditCommand()
Beispiel #4
0
 def init_db_tab(self):
    self.onInit = True 
    # layer linee
    for index, layer in enumerate(self.plugIn.iface.legendInterface().layers()):      
       if (layer.type() == QgsMapLayer.VectorLayer) and layer.geometryType() == QGis.Line:
          self.linearLayerName.addItem(layer.name(), index)      
    # seleziono un elemento della lista
    if self.dimStyle.linearLayerName is not None:
       index = self.linearLayerName.findText(self.dimStyle.linearLayerName)
       self.linearLayerName.setCurrentIndex(index)
       self.linearLayerNameChanged(index)
    
    # layer simboli
    for index, layer in enumerate(self.plugIn.iface.legendInterface().layers()):      
       if qad_layer.isSymbolLayer(layer):
          self.symbolLayerName.addItem(layer.name(), index)
    # seleziono un elemento della lista
    if self.dimStyle.symbolLayerName is not None:
       index = self.symbolLayerName.findText(self.dimStyle.symbolLayerName)
       self.symbolLayerName.setCurrentIndex(index)
       self.symbolLayerNameChanged(index)
    
    # layer testi
    for index, layer in enumerate(self.plugIn.iface.legendInterface().layers()):      
       if qad_layer.isTextLayer(layer):
          self.textualLayerName.addItem(layer.name(), index)
    # seleziono un elemento della lista
    if self.dimStyle.textualLayerName is not None:
       index = self.textualLayerName.findText(self.dimStyle.textualLayerName)
       self.textualLayerName.setCurrentIndex(index)
       self.textualLayerNameChanged(index)
    self.onInit = False 
 def init_db_tab(self):
    self.onInit = True 
    # layer linee
    for index, layer in enumerate(self.plugIn.iface.legendInterface().layers()):      
       if (layer.type() == QgsMapLayer.VectorLayer) and layer.geometryType() == QGis.Line:
          self.linearLayerName.addItem(layer.name(), index)      
    # seleziono un elemento della lista
    if self.dimStyle.linearLayerName is not None:
       index = self.linearLayerName.findText(self.dimStyle.linearLayerName)
       self.linearLayerName.setCurrentIndex(index)
       self.linearLayerNameChanged(index)
    
    # layer simboli
    for index, layer in enumerate(self.plugIn.iface.legendInterface().layers()):      
       if qad_layer.isSymbolLayer(layer):
          self.symbolLayerName.addItem(layer.name(), index)
    # seleziono un elemento della lista
    if self.dimStyle.symbolLayerName is not None:
       index = self.symbolLayerName.findText(self.dimStyle.symbolLayerName)
       self.symbolLayerName.setCurrentIndex(index)
       self.symbolLayerNameChanged(index)
    
    # layer testi
    for index, layer in enumerate(self.plugIn.iface.legendInterface().layers()):      
       if qad_layer.isTextLayer(layer):
          self.textualLayerName.addItem(layer.name(), index)
    # seleziono un elemento della lista
    if self.dimStyle.textualLayerName is not None:
       index = self.textualLayerName.findText(self.dimStyle.textualLayerName)
       self.textualLayerName.setCurrentIndex(index)
       self.textualLayerNameChanged(index)
    self.onInit = False 
   def RotateGeoms(self, angle):      
      # copio entitySet
      entitySet = QadEntitySet(self.entitySet)
      
      self.plugIn.beginEditCommand("Feature rotated", entitySet.getLayerList())
      
      for layerEntitySet in entitySet.layerEntitySetList:
         layer = layerEntitySet.layer
         
         transformedBasePt = self.mapToLayerCoordinates(layer, self.basePt)

         rotFldName = ""
         if qad_layer.isTextLayer(layer):
            # se la rotazione dipende da un solo campo
            rotFldNames = qad_label.get_labelRotationFieldNames(layer)
            if len(rotFldNames) == 1 and len(rotFldNames[0]) > 0:
               rotFldName = rotFldNames[0]         
         elif qad_layer.isSymbolLayer(layer):
            rotFldName = qad_layer.get_symbolRotationFieldName(layer)
                     
         while len(layerEntitySet.featureIds) > 0:
            featureId = layerEntitySet.featureIds[0]
            f = layerEntitySet.getFeature(featureId)

            if self.rotate(f, transformedBasePt, angle, rotFldName, layerEntitySet, entitySet) == False:  
               self.plugIn.destroyEditCommand()
               return

      self.plugIn.endEditCommand()
Beispiel #7
0
    def mirrorGeoms(self):
        entity = QadEntity()
        self.plugIn.beginEditCommand("Feature mirrored",
                                     self.entitySet.getLayerList())

        dimElaboratedList = []  # lista delle quotature già elaborate

        for layerEntitySet in self.entitySet.layerEntitySetList:
            layer = layerEntitySet.layer

            transformedBasePt = self.mapToLayerCoordinates(layer, self.basePt)
            transformedNewPt = self.mapToLayerCoordinates(
                layer, self.secondMirrorPt)

            rotFldName = ""
            if qad_layer.isTextLayer(layer):
                # se la rotazione dipende da un solo campo
                rotFldNames = qad_label.get_labelRotationFieldNames(layer)
                if len(rotFldNames) == 1 and len(rotFldNames[0]) > 0:
                    rotFldName = rotFldNames[0]
            elif qad_layer.isSymbolLayer(layer):
                rotFldName = qad_layer.get_symbolRotationFieldName(layer)

            for featureId in layerEntitySet.featureIds:
                entity.set(layer, featureId)

                # verifico se l'entità appartiene ad uno stile di quotatura
                dimEntity = QadDimStyles.getDimEntity(entity)
                if dimEntity is None:
                    if self.mirror(entity, transformedBasePt, transformedNewPt,
                                   rotFldName) == False:
                        self.plugIn.destroyEditCommand()
                        return
                else:
                    found = False
                    for dimElaborated in dimElaboratedList:
                        if dimElaborated == dimEntity:
                            found = True

                    if found == False:  # quota non ancora elaborata
                        dimElaboratedList.append(dimEntity)
                        if self.mirror(dimEntity, transformedBasePt,
                                       transformedNewPt, rotFldName) == False:
                            self.plugIn.destroyEditCommand()
                            return

        self.plugIn.endEditCommand()
        self.nOperationsToUndo = self.nOperationsToUndo + 1
Beispiel #8
0
    def scaleFeatures(self, scale):
        entity = QadEntity()
        self.plugIn.beginEditCommand("Feature scaled",
                                     self.entitySet.getLayerList())

        dimElaboratedList = []  # lista delle quotature già elaborate

        for layerEntitySet in self.entitySet.layerEntitySetList:
            layer = layerEntitySet.layer

            transformedBasePt = self.mapToLayerCoordinates(layer, self.basePt)

            sizeFldName = ""
            if qad_layer.isTextLayer(layer):
                # se l'altezza testo dipende da un solo campo
                sizeFldNames = qad_label.get_labelSizeFieldNames(layer)
                if len(sizeFldNames) == 1 and len(sizeFldNames[0]) > 0:
                    sizeFldName = sizeFldNames[0]
            elif qad_layer.isSymbolLayer(layer):
                # se la scala dipende da un campo
                sizeFldName = qad_layer.get_symbolScaleFieldName(layer)

            for featureId in layerEntitySet.featureIds:
                entity.set(layer, featureId)

                # verifico se l'entità appartiene ad uno stile di quotatura
                dimEntity = QadDimStyles.getDimEntity(entity)
                if dimEntity is None:
                    if self.scale(entity, transformedBasePt, scale,
                                  sizeFldName) == False:
                        self.plugIn.destroyEditCommand()
                        return
                else:
                    found = False
                    for dimElaborated in dimElaboratedList:
                        if dimElaborated == dimEntity:
                            found = True

                    if found == False:  # quota non ancora elaborata
                        dimElaboratedList.append(dimEntity)
                        if self.scale(dimEntity, transformedBasePt, scale,
                                      sizeFldName) == False:
                            self.plugIn.destroyEditCommand()
                            return

        self.plugIn.endEditCommand()
        self.nOperationsToUndo = self.nOperationsToUndo + 1
Beispiel #9
0
    def mirrorGeoms(self):
        # copio entitySet
        entitySet = QadEntitySet(self.entitySet)

        self.plugIn.beginEditCommand("Feature mirrored",
                                     self.entitySet.getLayerList())

        for layerEntitySet in entitySet.layerEntitySetList:
            layer = layerEntitySet.layer

            transformedBasePt = self.mapToLayerCoordinates(
                layer, self.firstMirrorPt)
            transformedNewPt = self.mapToLayerCoordinates(
                layer, self.secondMirrorPt)

            rotFldName = ""
            if qad_layer.isTextLayer(layer):
                # se la rotazione dipende da un solo campo
                rotFldNames = qad_label.get_labelRotationFieldNames(layer)
                if len(rotFldNames) == 1 and len(rotFldNames[0]) > 0:
                    rotFldName = rotFldNames[0]
            elif qad_layer.isSymbolLayer(layer):
                rotFldName = qad_layer.get_symbolRotationFieldName(layer)

            while len(layerEntitySet.featureIds) > 0:
                featureId = layerEntitySet.featureIds[0]
                f = layerEntitySet.getFeature(featureId)

                entity = QadEntity()
                entity.set(layer, featureId)
                # verifico se l'entità appartiene ad uno stile di quotatura
                dimStyle, dimId = QadDimStyles.getDimIdByEntity(entity)

                if dimStyle is not None:
                    dimEntity = QadDimEntity()
                    if dimEntity.initByDimId(dimStyle, dimId) == False:
                        dimEntity = None
                else:
                    dimEntity = None

                if self.mirror(f, transformedBasePt, transformedNewPt,
                               rotFldName, layerEntitySet, entitySet,
                               dimEntity) == False:
                    self.plugIn.destroyEditCommand()
                    return

        self.plugIn.endEditCommand()
Beispiel #10
0
   def mirrorGeoms(self):
      entity = QadEntity()
      self.plugIn.beginEditCommand("Feature mirrored", self.entitySet.getLayerList())

      dimElaboratedList = [] # lista delle quotature già elaborate

      for layerEntitySet in self.entitySet.layerEntitySetList:
         layer = layerEntitySet.layer        

         transformedBasePt = self.mapToLayerCoordinates(layer, self.basePt)
         transformedNewPt = self.mapToLayerCoordinates(layer, self.secondMirrorPt)
         
         rotFldName = ""
         if qad_layer.isTextLayer(layer):
            # se la rotazione dipende da un solo campo
            rotFldNames = qad_label.get_labelRotationFieldNames(layer)
            if len(rotFldNames) == 1 and len(rotFldNames[0]) > 0:
               rotFldName = rotFldNames[0]         
         elif qad_layer.isSymbolLayer(layer):
            rotFldName = qad_layer.get_symbolRotationFieldName(layer)

         for featureId in layerEntitySet.featureIds:
            entity.set(layer, featureId)

            # verifico se l'entità appartiene ad uno stile di quotatura
            dimEntity = QadDimStyles.getDimEntity(entity)  
            if dimEntity is None:
               if self.mirror(entity, transformedBasePt, transformedNewPt, rotFldName) == False:
                  self.plugIn.destroyEditCommand()
                  return
            else:
               found = False
               for dimElaborated in dimElaboratedList:
                  if dimElaborated == dimEntity:
                     found = True
            
               if found == False: # quota non ancora elaborata
                  dimElaboratedList.append(dimEntity)
                  if self.mirror(dimEntity, transformedBasePt, transformedNewPt, rotFldName) == False:
                     self.plugIn.destroyEditCommand()
                     return

      self.plugIn.endEditCommand()
      self.nOperationsToUndo = self.nOperationsToUndo + 1
Beispiel #11
0
   def scaleFeatures(self, scale):
      entity = QadEntity()
      self.plugIn.beginEditCommand("Feature scaled", self.entitySet.getLayerList())
      
      dimElaboratedList = [] # lista delle quotature già elaborate

      for layerEntitySet in self.entitySet.layerEntitySetList:                        
         layer = layerEntitySet.layer        
                              
         transformedBasePt = self.mapToLayerCoordinates(layer, self.basePt)
         
         sizeFldName = ""
         if qad_layer.isTextLayer(layer):
            # se l'altezza testo dipende da un solo campo 
            sizeFldNames = qad_label.get_labelSizeFieldNames(layer)
            if len(sizeFldNames) == 1 and len(sizeFldNames[0]) > 0:
                sizeFldName = sizeFldNames[0]
         elif qad_layer.isSymbolLayer(layer):
            # se la scala dipende da un campo 
            sizeFldName = qad_layer.get_symbolScaleFieldName(layer)

         for featureId in layerEntitySet.featureIds:
            entity.set(layer, featureId)

            # verifico se l'entità appartiene ad uno stile di quotatura
            dimEntity = QadDimStyles.getDimEntity(entity)  
            if dimEntity is None:
               if self.scale(entity, transformedBasePt, scale, sizeFldName) == False:
                  self.plugIn.destroyEditCommand()
                  return
            else:
               found = False
               for dimElaborated in dimElaboratedList:
                  if dimElaborated == dimEntity:
                     found = True
            
               if found == False: # quota non ancora elaborata
                  dimElaboratedList.append(dimEntity)
                  if self.scale(dimEntity, transformedBasePt, scale, sizeFldName) == False:
                     self.plugIn.destroyEditCommand()
                     return

      self.plugIn.endEditCommand()
      self.nOperationsToUndo = self.nOperationsToUndo + 1
Beispiel #12
0
   def mirrorGeoms(self):      
      # copio entitySet
      entitySet = QadEntitySet(self.entitySet)

      self.plugIn.beginEditCommand("Feature mirrored", self.entitySet.getLayerList())

      for layerEntitySet in entitySet.layerEntitySetList:
         layer = layerEntitySet.layer        

         transformedBasePt = self.mapToLayerCoordinates(layer, self.firstMirrorPt)
         transformedNewPt = self.mapToLayerCoordinates(layer, self.secondMirrorPt)
         
         rotFldName = ""
         if qad_layer.isTextLayer(layer):
            # se la rotazione dipende da un solo campo
            rotFldNames = qad_label.get_labelRotationFieldNames(layer)
            if len(rotFldNames) == 1 and len(rotFldNames[0]) > 0:
               rotFldName = rotFldNames[0]         
         elif qad_layer.isSymbolLayer(layer):
            rotFldName = qad_layer.get_symbolRotationFieldName(layer)
         
         while len(layerEntitySet.featureIds) > 0:
            featureId = layerEntitySet.featureIds[0]
            f = layerEntitySet.getFeature(featureId)

            entity = QadEntity()
            entity.set(layer, featureId)
            # verifico se l'entità appartiene ad uno stile di quotatura
            dimStyle, dimId = QadDimStyles.getDimIdByEntity(entity)

            if dimStyle is not None:
               dimEntity = QadDimEntity()
               if dimEntity.initByDimId(dimStyle, dimId) == False:
                  dimEntity = None
            else:
               dimEntity = None

            if self.mirror(f, transformedBasePt, transformedNewPt, rotFldName, layerEntitySet, entitySet, dimEntity) == False:  
               self.plugIn.destroyEditCommand()
               return

      self.plugIn.endEditCommand()
Beispiel #13
0
   def __initQadInfo(self):
      # inizializza entityType, qadGeom, dimStyle, dimId
      if self.isInitialized() == False:
         return QadEntityGeomTypeEnum.NONE

      self.dimStyle = None
      self.dimId = None

      g = self.getGeometry()
      if g is None:
         return QadEntityGeomTypeEnum.NONE

      # trasformo la geometria nel crs del canvas per lavorare con coordinate piane xy
      coordTransform = QgsCoordinateTransform(self.layer.crs(), iface.mapCanvas().mapRenderer().destinationCrs())
      g.transform(coordTransform)

      wkbType = g.wkbType()
      if wkbType == QGis.WKBPoint:
         from qad_dim import QadDimStyles # to avoid cyclic import

         # verifico se l'entità appartiene ad uno stile di quotatura
         dimStyle, dimId = QadDimStyles.getDimIdByEntity(self)
         if (dimStyle is not None) and (dimId is not None):
            self.dimStyle = dimStyle # stile di quotatura di appartenenza
            self.dimId = dimId # codice quotatura di appartenenza
            
         if qad_layer.isTextLayer(self.layer):
            self.entityType = QadEntityGeomTypeEnum.TEXT
         elif qad_layer.isSymbolLayer(self.layer):
            self.entityType = QadEntityGeomTypeEnum.SYMBOL
         self.qadGeom = g.asPoint() # un punto

      if wkbType == QGis.WKBMultiPoint:
         if qad_layer.isTextLayer(self.layer):
            self.entityType = QadEntityGeomTypeEnum.TEXT
         elif qad_layer.isSymbolLayer(self.layer):
            self.entityType = QadEntityGeomTypeEnum.SYMBOL
         self.qadGeom = g.asMultiPoint() # lista di punti

      elif wkbType == QGis.WKBLineString:
         from qad_dim import QadDimStyles # to avoid cyclic import

         # verifico se l'entità appartiene ad uno stile di quotatura
         dimStyle, dimId = QadDimStyles.getDimIdByEntity(self)
         if (dimStyle is not None) and (dimId is not None):
            self.entityType = QadEntityGeomTypeEnum.DIMENSION_COMPONENT
            self.dimStyle = dimStyle # stile di quotatura di appartenenza
            self.dimId = dimId # codice quotatura di appartenenza

         self.entityType, self.qadGeom = self.__fromPoyline(g.asPolyline())

      elif wkbType == QGis.WKBMultiLineString:         
         self.entityType = []
         self.qadGeom = []
         lineList = g.asMultiPolyline() # vettore di linee
         for line in lineList:
            entityType, qadGeom = self.__fromPoyline(g.asPolyline())
            self.entityType.append(entityType)
            self.qadGeom.append(qadGeom)

      elif wkbType == QGis.WKBPolygon:
         self.entityType = []
         self.qadGeom = []
         polygon = g.asPolygon() # vettore di linee
         for line in polygon:
            entityType, qadGeom = self.__fromPoyline(line)
            self.entityType.append(entityType)
            self.qadGeom.append(qadGeom)

      elif wkbType == QGis.WKBMultiPolygon:
         self.entityType = []
         self.qadGeom = []
         polygonList = g.asMultiPolygon() # vettore di poligoni
         for polygon in polygonList:
            partialEntityType = []
            partialQadGeom = []
            for line in polygon:
               entityType, qadGeom = self.__fromPoyline(line)
               partialEntityType.append(entityType)
               partialQadGeom.append(qadGeom)
            self.entityType.append(partialEntityType)
            self.qadGeom.append(partialQadGeom)
Beispiel #14
0
   def run(self, msgMapTool = False, msg = None):
      if self.plugIn.canvas.mapSettings().destinationCrs().geographicFlag():
         self.showMsg(QadMsg.translate("QAD", "\nThe coordinate reference system of the project must be a projected coordinate system.\n"))
         return True # fine comando
      
      currLayer, errMsg = qad_layer.getCurrLayerEditable(self.plugIn.canvas, QGis.Point)
      if currLayer is None:
         self.showErr(errMsg)
         return True # fine comando

      if qad_layer.isTextLayer(currLayer) == False:
         errMsg = QadMsg.translate("QAD", "\nCurrent layer is not a textual layer.")
         errMsg = errMsg + QadMsg.translate("QAD", "\nA textual layer is a vector punctual layer having a label and the symbol transparency no more than 10%.\n")
         self.showErr(errMsg)         
         return True # fine comando

               
      #=========================================================================
      # RICHIESTA PUNTO DI INSERIMENTO
      if self.step == 0: # inizio del comando
         self.waitForPoint() # si appresta ad attendere un punto
         self.step = self.step + 1
         return False
      
      #=========================================================================
      # RISPOSTA ALLA RICHIESTA PUNTO DI INSERIMENTO
      elif self.step == 1: # dopo aver atteso un punto si riavvia il comando
         if msgMapTool == True: # il punto arriva da una selezione grafica
            # la condizione seguente si verifica se durante la selezione di un punto
            # éstato attivato un altro plugin che ha disattivato Qad
            # quindi stato riattivato il comando che torna qui senza che il maptool
            # abbia selezionato un punto            
            if self.getPointMapTool().point is None: # il maptool éstato attivato senza un punto
               if self.getPointMapTool().rightButton == True: # se usato il tasto destro del mouse
                  return True # fine comando
               else:
                  self.setMapTool(self.getPointMapTool()) # riattivo il maptool
                  return False

            pt = self.getPointMapTool().point
         else: # il punto arriva come parametro della funzione
            pt = msg

         self.insPt = QgsPoint(pt)
         self.plugIn.setLastPoint(self.insPt)
         
         # se l'altezza testo dipende da un solo campo 
         sizeFldNames = qad_label.get_labelSizeFieldNames(currLayer)
         if len(sizeFldNames) == 1 and len(sizeFldNames[0]) > 0:
            # si appresta ad attendere la scala                      
            self.GetDistClass = QadGetDistClass(self.plugIn)
            prompt = QadMsg.translate("Command_TEXT", "Specify the text height <{0}>: ")
            self.GetDistClass.msg = prompt.format(str(self.hText))
            self.GetDistClass.dist = self.hText
            self.GetDistClass.inputMode = QadInputModeEnum.NOT_NEGATIVE | QadInputModeEnum.NOT_ZERO
            self.GetDistClass.startPt = self.insPt
            self.step = 2
            self.GetDistClass.run(msgMapTool, msg)
            return False
         else: 
            # se la rotazione dipende da un solo campo
            rotFldNames = qad_label.get_labelRotationFieldNames(currLayer)
            if len(rotFldNames) == 1 and len(rotFldNames[0]) > 0:
               if self.GetAngleClass is not None:
                  del self.GetAngleClass                  
               # si appresta ad attendere l'angolo di rotazione                      
               self.GetAngleClass = QadGetAngleClass(self.plugIn)
               prompt = QadMsg.translate("Command_TEXT", "Specify the text rotation <{0}>: ")
               self.GetAngleClass.msg = prompt.format(str(qad_utils.toDegrees(self.rot)))
               self.GetAngleClass.angle = self.rot
               self.GetAngleClass.startPt = self.insPt               
               self.step = 3
               self.GetAngleClass.run(msgMapTool, msg)               
               return False
            else:
               self.initLabelFields(currLayer)
               if self.waitForFieldValue() == False:
                  self.addFeature(currLayer)
                  return True

         return False
      
      #=========================================================================
      # RISPOSTA ALLA RICHIESTA ALTEZZA TESTO (da step = 1)
      elif self.step == 2:
         if self.GetDistClass.run(msgMapTool, msg) == True:
            if self.GetDistClass.dist is not None:
               self.hText = self.GetDistClass.dist
               self.plugIn.setLastHText(self.hText)
               del self.GetDistClass
               self.GetDistClass = None
                
               # se la rotazione dipende da un solo campo
               rotFldNames = qad_label.get_labelRotationFieldNames(currLayer)
               if len(rotFldNames) == 1 and len(rotFldNames[0]) > 0:
                  if self.GetAngleClass is not None:
                     del self.GetAngleClass                  
                  # si appresta ad attendere l'angolo di rotazione                      
                  self.GetAngleClass = QadGetAngleClass(self.plugIn)
                  prompt = QadMsg.translate("Command_TEXT", "Specify the text rotation <{0}>: ")
                  self.GetAngleClass.msg = prompt.format(str(qad_utils.toDegrees(self.rot)))
                  self.GetAngleClass.angle = self.rot
                  self.GetAngleClass.startPt = self.insPt               
                  self.step = 3
                  self.GetAngleClass.run(msgMapTool, msg)         
                  return False
               else:
                  self.initLabelFields(currLayer)
                  if self.waitForFieldValue() == False:
                     self.addFeature(currLayer)               
                     return True
            else:
               return True   
         return False
      
      #=========================================================================
      # RISPOSTA ALLA RICHIESTA ROTAZIONE (da step = 1 o 2)
      elif self.step == 3:
         if self.GetAngleClass.run(msgMapTool, msg) == True:
            if self.GetAngleClass.angle is not None:
               self.rot = self.GetAngleClass.angle
               self.plugIn.setLastRot(self.rot)
               self.initLabelFields(currLayer)
               if self.waitForFieldValue() == False:
                  self.addFeature(currLayer)
                  return True # fine comando               
            else:
               return True
         return False

      
      #=========================================================================
      # RISPOSTA ALLA RICHIESTA DEL VALORE DI UN CAMPO
      elif self.step == 4: # dopo aver atteso un valore si riavvia il comando
         if msgMapTool == True: # il punto arriva da una selezione grafica
            self.waitForFieldValue()
            return False
         # il valore arriva come parametro della funzione
         self.labelFieldValues.append(msg)
         self.labelFieldNamesNdx = self.labelFieldNamesNdx + 1 
         if self.waitForFieldValue() == False:
            self.addFeature(currLayer)
            return True # fine comando
         
         return False
Beispiel #15
0
    def __initQadInfo(self):
        # inizializza entityType, qadGeom, dimStyle, dimId
        if self.isInitialized() == False:
            return QadEntityGeomTypeEnum.NONE

        self.dimStyle = None
        self.dimId = None

        g = self.getGeometry()
        if g is None:
            return QadEntityGeomTypeEnum.NONE

        # trasformo la geometria nel crs del canvas per lavorare con coordinate piane xy
        coordTransform = QgsCoordinateTransform(
            self.layer.crs(),
            iface.mapCanvas().mapRenderer().destinationCrs())
        g.transform(coordTransform)

        wkbType = g.wkbType()
        if wkbType == QGis.WKBPoint:
            from qad_dim import QadDimStyles  # to avoid cyclic import

            # verifico se l'entità appartiene ad uno stile di quotatura
            dimStyle, dimId = QadDimStyles.getDimIdByEntity(self)
            if (dimStyle is not None) and (dimId is not None):
                self.dimStyle = dimStyle  # stile di quotatura di appartenenza
                self.dimId = dimId  # codice quotatura di appartenenza

            if qad_layer.isTextLayer(self.layer):
                self.entityType = QadEntityGeomTypeEnum.TEXT
            elif qad_layer.isSymbolLayer(self.layer):
                self.entityType = QadEntityGeomTypeEnum.SYMBOL
            self.qadGeom = g.asPoint()  # un punto

        if wkbType == QGis.WKBMultiPoint:
            if qad_layer.isTextLayer(self.layer):
                self.entityType = QadEntityGeomTypeEnum.TEXT
            elif qad_layer.isSymbolLayer(self.layer):
                self.entityType = QadEntityGeomTypeEnum.SYMBOL
            self.qadGeom = g.asMultiPoint()  # lista di punti

        elif wkbType == QGis.WKBLineString:
            from qad_dim import QadDimStyles  # to avoid cyclic import

            # verifico se l'entità appartiene ad uno stile di quotatura
            dimStyle, dimId = QadDimStyles.getDimIdByEntity(self)
            if (dimStyle is not None) and (dimId is not None):
                self.entityType = QadEntityGeomTypeEnum.DIMENSION_COMPONENT
                self.dimStyle = dimStyle  # stile di quotatura di appartenenza
                self.dimId = dimId  # codice quotatura di appartenenza

            self.entityType, self.qadGeom = self.__fromPoyline(g.asPolyline())

        elif wkbType == QGis.WKBMultiLineString:
            self.entityType = []
            self.qadGeom = []
            lineList = g.asMultiPolyline()  # vettore di linee
            for line in lineList:
                entityType, qadGeom = self.__fromPoyline(g.asPolyline())
                self.entityType.append(entityType)
                self.qadGeom.append(qadGeom)

        elif wkbType == QGis.WKBPolygon:
            self.entityType = []
            self.qadGeom = []
            polygon = g.asPolygon()  # vettore di linee
            for line in polygon:
                entityType, qadGeom = self.__fromPoyline(line)
                self.entityType.append(entityType)
                self.qadGeom.append(qadGeom)

        elif wkbType == QGis.WKBMultiPolygon:
            self.entityType = []
            self.qadGeom = []
            polygonList = g.asMultiPolygon()  # vettore di poligoni
            for polygon in polygonList:
                partialEntityType = []
                partialQadGeom = []
                for line in polygon:
                    entityType, qadGeom = self.__fromPoyline(line)
                    partialEntityType.append(entityType)
                    partialQadGeom.append(qadGeom)
                self.entityType.append(partialEntityType)
                self.qadGeom.append(partialQadGeom)
Beispiel #16
0
    def run(self, msgMapTool=False, msg=None):
        if self.plugIn.canvas.mapSettings().destinationCrs().geographicFlag():
            self.showMsg(
                QadMsg.translate(
                    "QAD",
                    "\nThe coordinate reference system of the project must be a projected coordinate system.\n"
                ))
            return True  # fine comando

        currLayer, errMsg = qad_layer.getCurrLayerEditable(
            self.plugIn.canvas, QGis.Point)
        if currLayer is None:
            self.showErr(errMsg)
            return True  # fine comando

        if qad_layer.isTextLayer(currLayer) == False:
            errMsg = QadMsg.translate(
                "QAD", "\nCurrent layer is not a textual layer.")
            errMsg = errMsg + QadMsg.translate(
                "QAD",
                "\nA textual layer is a vector punctual layer having a label and the symbol transparency no more than 10%.\n"
            )
            self.showErr(errMsg)
            return True  # fine comando

        #=========================================================================
        # RICHIESTA PUNTO DI INSERIMENTO
        if self.step == 0:  # inizio del comando
            self.waitForPoint()  # si appresta ad attendere un punto
            self.step = self.step + 1
            return False

        #=========================================================================
        # RISPOSTA ALLA RICHIESTA PUNTO DI INSERIMENTO
        elif self.step == 1:  # dopo aver atteso un punto si riavvia il comando
            if msgMapTool == True:  # il punto arriva da una selezione grafica
                # la condizione seguente si verifica se durante la selezione di un punto
                # éstato attivato un altro plugin che ha disattivato Qad
                # quindi stato riattivato il comando che torna qui senza che il maptool
                # abbia selezionato un punto
                if self.getPointMapTool(
                ).point is None:  # il maptool éstato attivato senza un punto
                    if self.getPointMapTool(
                    ).rightButton == True:  # se usato il tasto destro del mouse
                        return True  # fine comando
                    else:
                        self.setMapTool(
                            self.getPointMapTool())  # riattivo il maptool
                        return False

                pt = self.getPointMapTool().point
            else:  # il punto arriva come parametro della funzione
                pt = msg

            self.insPt = QgsPoint(pt)
            self.plugIn.setLastPoint(self.insPt)

            # se l'altezza testo dipende da un solo campo
            sizeFldNames = qad_label.get_labelSizeFieldNames(currLayer)
            if len(sizeFldNames) == 1 and len(sizeFldNames[0]) > 0:
                # si appresta ad attendere la scala
                self.GetDistClass = QadGetDistClass(self.plugIn)
                prompt = QadMsg.translate("Command_TEXT",
                                          "Specify the text height <{0}>: ")
                self.GetDistClass.msg = prompt.format(str(self.hText))
                self.GetDistClass.dist = self.hText
                self.GetDistClass.inputMode = QadInputModeEnum.NOT_NEGATIVE | QadInputModeEnum.NOT_ZERO
                self.GetDistClass.startPt = self.insPt
                self.step = 2
                self.GetDistClass.run(msgMapTool, msg)
                return False
            else:
                # se la rotazione dipende da un solo campo
                rotFldNames = qad_label.get_labelRotationFieldNames(currLayer)
                if len(rotFldNames) == 1 and len(rotFldNames[0]) > 0:
                    if self.GetAngleClass is not None:
                        del self.GetAngleClass
                    # si appresta ad attendere l'angolo di rotazione
                    self.GetAngleClass = QadGetAngleClass(self.plugIn)
                    prompt = QadMsg.translate(
                        "Command_TEXT", "Specify the text rotation <{0}>: ")
                    self.GetAngleClass.msg = prompt.format(
                        str(qad_utils.toDegrees(self.rot)))
                    self.GetAngleClass.angle = self.rot
                    self.GetAngleClass.startPt = self.insPt
                    self.step = 3
                    self.GetAngleClass.run(msgMapTool, msg)
                    return False
                else:
                    self.initLabelFields(currLayer)
                    if self.waitForFieldValue() == False:
                        self.addFeature(currLayer)
                        return True

            return False

        #=========================================================================
        # RISPOSTA ALLA RICHIESTA ALTEZZA TESTO (da step = 1)
        elif self.step == 2:
            if self.GetDistClass.run(msgMapTool, msg) == True:
                if self.GetDistClass.dist is not None:
                    self.hText = self.GetDistClass.dist
                    self.plugIn.setLastHText(self.hText)
                    del self.GetDistClass
                    self.GetDistClass = None

                    # se la rotazione dipende da un solo campo
                    rotFldNames = qad_label.get_labelRotationFieldNames(
                        currLayer)
                    if len(rotFldNames) == 1 and len(rotFldNames[0]) > 0:
                        if self.GetAngleClass is not None:
                            del self.GetAngleClass
                        # si appresta ad attendere l'angolo di rotazione
                        self.GetAngleClass = QadGetAngleClass(self.plugIn)
                        prompt = QadMsg.translate(
                            "Command_TEXT",
                            "Specify the text rotation <{0}>: ")
                        self.GetAngleClass.msg = prompt.format(
                            str(qad_utils.toDegrees(self.rot)))
                        self.GetAngleClass.angle = self.rot
                        self.GetAngleClass.startPt = self.insPt
                        self.step = 3
                        self.GetAngleClass.run(msgMapTool, msg)
                        return False
                    else:
                        self.initLabelFields(currLayer)
                        if self.waitForFieldValue() == False:
                            self.addFeature(currLayer)
                            return True
                else:
                    return True
            return False

        #=========================================================================
        # RISPOSTA ALLA RICHIESTA ROTAZIONE (da step = 1 o 2)
        elif self.step == 3:
            if self.GetAngleClass.run(msgMapTool, msg) == True:
                if self.GetAngleClass.angle is not None:
                    self.rot = self.GetAngleClass.angle
                    self.plugIn.setLastRot(self.rot)
                    self.initLabelFields(currLayer)
                    if self.waitForFieldValue() == False:
                        self.addFeature(currLayer)
                        return True  # fine comando
                else:
                    return True
            return False

        #=========================================================================
        # RISPOSTA ALLA RICHIESTA DEL VALORE DI UN CAMPO
        elif self.step == 4:  # dopo aver atteso un valore si riavvia il comando
            if msgMapTool == True:  # il punto arriva da una selezione grafica
                self.waitForFieldValue()
                return False
            # il valore arriva come parametro della funzione
            self.labelFieldValues.append(msg)
            self.labelFieldNamesNdx = self.labelFieldNamesNdx + 1
            if self.waitForFieldValue() == False:
                self.addFeature(currLayer)
                return True  # fine comando

            return False