class Qad_mbuffer_maptool(QadGetPoint): def __init__(self, plugIn): QadGetPoint.__init__(self, plugIn) self.startPtForBufferWidth = None # vedi il numero minimo di punti affinché venga riconosciuto un arco o un cerchio # nei files qad_arc.py e qad_circle.py self.segments = 12 self.entitySet = QadEntitySet() self.geomType = QGis.Polygon self.__rubberBand = QadRubberBand(self.canvas, True) def setRubberBandColor(self, rubberBandBorderColor, rubberBandFillColor): if rubberBandBorderColor is not None: self.__rubberBand.setBorderColor(rubberBandBorderColor) if rubberBandFillColor is not None: self.__rubberBand.setFillColor(rubberBandFillColor) def hidePointMapToolMarkers(self): QadGetPoint.hidePointMapToolMarkers(self) self.__rubberBand.hide() def showPointMapToolMarkers(self): QadGetPoint.showPointMapToolMarkers(self) self.__rubberBand.show() def clear(self): QadGetPoint.clear(self) self.__rubberBand.reset() self.mode = None def canvasMoveEvent(self, event): QadGetPoint.canvasMoveEvent(self, event) self.__rubberBand.reset() # noto il primo punto si richiede la larghezza del buffer if self.mode == Qad_mbuffer_maptool_ModeEnum.FIRST_PT_ASK_FOR_BUFFER_WIDTH: width = qad_utils.getDistance(self.startPtForBufferWidth, self.tmpPoint) 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) bufferGeom = qad_utils.ApproxCurvesOnGeom(newGeom.buffer(width, self.segments), \ self.segments, self.segments, \ tolerance) if bufferGeom: # trasformo la geometria nel crs del layer self.__rubberBand.addGeometry(self.mapToLayerCoordinates(layer, bufferGeom), layer) def activate(self): QadGetPoint.activate(self) self.__rubberBand.show() def deactivate(self): try: # necessario perché se si chiude QGIS parte questo evento nonostante non ci sia più l'oggetto maptool ! QadGetPoint.deactivate(self) self.__rubberBand.hide() except: pass def setMode(self, mode): self.mode = mode # noto niente si richiede il primo punto if self.mode == Qad_mbuffer_maptool_ModeEnum.NONE_KNOWN_ASK_FOR_FIRST_PT: self.setDrawMode(QadGetPointDrawModeEnum.NONE) # noto il primo punto si richiede la larghezza del buffer elif self.mode == Qad_mbuffer_maptool_ModeEnum.FIRST_PT_ASK_FOR_BUFFER_WIDTH: self.setDrawMode(QadGetPointDrawModeEnum.ELASTIC_LINE) self.setStartPoint(self.startPtForBufferWidth)
class Qad_circle_maptool(QadGetPoint): def __init__(self, plugIn): QadGetPoint.__init__(self, plugIn) self.centerPt = None self.radius = None self.firstPt = None self.secondPt = None self.firstDiamPt = None self.tan1 = None self.tan2 = None self.startPtForRadius = None self.__rubberBand = QadRubberBand(self.canvas, False) self.geomType = QGis.Polygon def setRubberBandColor(self, rubberBandBorderColor, rubberBandFillColor): if rubberBandBorderColor is not None: self.__rubberBand.setBorderColor(rubberBandBorderColor) if rubberBandFillColor is not None: self.__rubberBand.setFillColor(rubberBandFillColor) def hidePointMapToolMarkers(self): QadGetPoint.hidePointMapToolMarkers(self) self.__rubberBand.hide() def showPointMapToolMarkers(self): QadGetPoint.showPointMapToolMarkers(self) self.__rubberBand.show() def clear(self): QadGetPoint.clear(self) self.__rubberBand.reset() self.mode = None def canvasMoveEvent(self, event): QadGetPoint.canvasMoveEvent(self, event) self.__rubberBand.reset() result = False circle = QadCircle() # noto il centro del cerchio si richiede il raggio if self.mode == Qad_circle_maptool_ModeEnum.CENTER_PT_KNOWN_ASK_FOR_RADIUS: radius = qad_utils.getDistance(self.centerPt, self.tmpPoint) circle.set(self.centerPt, radius) result = True # noto il centro del cerchio si richiede il diametro elif self.mode == Qad_circle_maptool_ModeEnum.CENTER_PT_KNOWN_ASK_FOR_DIAM: diam = qad_utils.getDistance(self.centerPt, self.tmpPoint) result = circle.set(self.centerPt, diam / 2) result = True # noto il primo e il secondo punto si richiede il terzo punto elif self.mode == Qad_circle_maptool_ModeEnum.FIRST_SECOND_PT_KNOWN_ASK_FOR_THIRD_PT: if (self.firstPt is not None) and (self.secondPt is not None): result = circle.from3Pts(self.firstPt, self.secondPt, self.tmpPoint) # noto il primo punto di estremità diam si richiede il secondo punto di estremità diam elif self.mode == Qad_circle_maptool_ModeEnum.FIRST_DIAM_PT_KNOWN_ASK_FOR_SECOND_DIAM_PT: if self.firstDiamPt is not None: result = circle.fromDiamEnds(self.firstDiamPt, self.tmpPoint) # noto note la prima, la seconda entita dei punti di tangenza e il primo punto per misurare il raggio # si richiede il secondo punto per misurare il raggio elif self.mode == Qad_circle_maptool_ModeEnum.FIRST_SECOND_TAN_FIRSTPTRADIUS_KNOWN_ASK_FOR_SECONDPTRADIUS: radius = qad_utils.getDistance(self.startPtForRadius, self.tmpPoint) result = circle.from2TanPtsRadius(self.tanGeom1, self.tanPt1, \ self.tanGeom2, self.tanPt2, radius) if result == True: points = circle.asPolyline() if points is not None: if self.geomType == QGis.Polygon: self.__rubberBand.setPolygon(points) else: self.__rubberBand.setLine(points) def activate(self): QadGetPoint.activate(self) self.__rubberBand.show() def deactivate(self): try: # necessario perché se si chiude QGIS parte questo evento nonostante non ci sia più l'oggetto maptool ! QadGetPoint.deactivate(self) self.__rubberBand.hide() except: pass def setMode(self, mode): self.mode = mode # noto niente si richiede il centro if self.mode == Qad_circle_maptool_ModeEnum.NONE_KNOWN_ASK_FOR_CENTER_PT: self.setDrawMode(QadGetPointDrawModeEnum.NONE) # noto il centro del cerchio si richiede il raggio elif self.mode == Qad_circle_maptool_ModeEnum.CENTER_PT_KNOWN_ASK_FOR_RADIUS: self.setDrawMode(QadGetPointDrawModeEnum.ELASTIC_LINE) self.setStartPoint(self.centerPt) # noto il centro del cerchio si richiede il diametro elif self.mode == Qad_circle_maptool_ModeEnum.CENTER_PT_KNOWN_ASK_FOR_DIAM: self.setDrawMode(QadGetPointDrawModeEnum.ELASTIC_LINE) self.setStartPoint(self.centerPt) # noto niente si richiede il primo punto elif self.mode == Qad_circle_maptool_ModeEnum.NONE_KNOWN_ASK_FOR_FIRST_PT: self.setDrawMode(QadGetPointDrawModeEnum.NONE) # noto il primo punto si richiede il secondo punto elif self.mode == Qad_circle_maptool_ModeEnum.FIRST_PT_KNOWN_ASK_FOR_SECOND_PT: self.setDrawMode(QadGetPointDrawModeEnum.NONE) # noto il primo e il secondo punto si richiede il terzo punto elif self.mode == Qad_circle_maptool_ModeEnum.FIRST_SECOND_PT_KNOWN_ASK_FOR_THIRD_PT: self.setDrawMode(QadGetPointDrawModeEnum.NONE) # noto niente si richiede il primo punto di estremità diam elif self.mode == Qad_circle_maptool_ModeEnum.NONE_KNOWN_ASK_FOR_FIRST_DIAM_PT: self.setDrawMode(QadGetPointDrawModeEnum.NONE) # noto il primo punto di estremità diam si richiede il secondo punto di estremità diam elif self.mode == Qad_circle_maptool_ModeEnum.FIRST_DIAM_PT_KNOWN_ASK_FOR_SECOND_DIAM_PT: self.setDrawMode(QadGetPointDrawModeEnum.NONE) # noto niente si richiede l'entita del primo punto di tangenza elif self.mode == Qad_circle_maptool_ModeEnum.NONE_KNOWN_ASK_FOR_FIRST_TAN: self.setDrawMode(QadGetPointDrawModeEnum.NONE) self.setSelectionMode(QadGetPointSelectionModeEnum.ENTITY_SELECTION) self.forceSnapTypeOnce(QadSnapTypeEnum.TAN_DEF) # nota l'entita del primo punto di tangenza si richiede quella del secondo punto di tangenza elif self.mode == Qad_circle_maptool_ModeEnum.FIRST_TAN_KNOWN_ASK_FOR_SECOND_TAN: self.setDrawMode(QadGetPointDrawModeEnum.NONE) self.setSelectionMode(QadGetPointSelectionModeEnum.ENTITY_SELECTION) self.forceSnapTypeOnce(QadSnapTypeEnum.TAN_DEF) # note la prima e la seconda entita dei punti di tangenza si richiede il raggio elif self.mode == Qad_circle_maptool_ModeEnum.FIRST_SECOND_TAN_KNOWN_ASK_FOR_RADIUS: self.setDrawMode(QadGetPointDrawModeEnum.NONE) # siccome il puntatore era stato variato in ENTITY_SELECTION dalla selez precedente self.setSelectionMode(QadGetPointSelectionModeEnum.POINT_SELECTION) # noto note la prima, la seconda entita dei punti di tangenza e il primo punto per misurare il raggio # si richiede il secondo punto per misurare il raggio elif self.mode == Qad_circle_maptool_ModeEnum.FIRST_SECOND_TAN_FIRSTPTRADIUS_KNOWN_ASK_FOR_SECONDPTRADIUS: self.setDrawMode(QadGetPointDrawModeEnum.ELASTIC_LINE) self.setStartPoint(self.startPtForRadius)
class Qad_mbuffer_maptool(QadGetPoint): def __init__(self, plugIn): QadGetPoint.__init__(self, plugIn) self.startPtForBufferWidth = None # vedi il numero minimo di punti affinché venga riconosciuto un arco o un cerchio # nei files qad_arc.py e qad_circle.py self.segments = 12 self.entitySet = QadEntitySet() self.geomType = QGis.Polygon self.__rubberBand = QadRubberBand(self.canvas, True) def setRubberBandColor(self, rubberBandBorderColor, rubberBandFillColor): if rubberBandBorderColor is not None: self.__rubberBand.setBorderColor(rubberBandBorderColor) if rubberBandFillColor is not None: self.__rubberBand.setFillColor(rubberBandFillColor) def hidePointMapToolMarkers(self): QadGetPoint.hidePointMapToolMarkers(self) self.__rubberBand.hide() def showPointMapToolMarkers(self): QadGetPoint.showPointMapToolMarkers(self) self.__rubberBand.show() def clear(self): QadGetPoint.clear(self) self.__rubberBand.reset() self.mode = None def canvasMoveEvent(self, event): QadGetPoint.canvasMoveEvent(self, event) self.__rubberBand.reset() # noto il primo punto si richiede la larghezza del buffer if self.mode == Qad_mbuffer_maptool_ModeEnum.FIRST_PT_ASK_FOR_BUFFER_WIDTH: width = qad_utils.getDistance(self.startPtForBufferWidth, self.tmpPoint) 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) bufferGeom = qad_utils.ApproxCurvesOnGeom(newGeom.buffer(width, self.segments), \ self.segments, self.segments, \ tolerance) if bufferGeom: # trasformo la geometria nel crs del layer self.__rubberBand.addGeometry( self.mapToLayerCoordinates(layer, bufferGeom), layer) def activate(self): QadGetPoint.activate(self) self.__rubberBand.show() def deactivate(self): try: # necessario perché se si chiude QGIS parte questo evento nonostante non ci sia più l'oggetto maptool ! QadGetPoint.deactivate(self) self.__rubberBand.hide() except: pass def setMode(self, mode): self.mode = mode # noto niente si richiede il primo punto if self.mode == Qad_mbuffer_maptool_ModeEnum.NONE_KNOWN_ASK_FOR_FIRST_PT: self.setDrawMode(QadGetPointDrawModeEnum.NONE) # noto il primo punto si richiede la larghezza del buffer elif self.mode == Qad_mbuffer_maptool_ModeEnum.FIRST_PT_ASK_FOR_BUFFER_WIDTH: self.setDrawMode(QadGetPointDrawModeEnum.ELASTIC_LINE) self.setStartPoint(self.startPtForBufferWidth)