[Qgis-user] Rubberband class in QGIS 1.7
Giovanni Manghi
giovanni.manghi at gmail.com
Mon Jun 20 02:21:00 PDT 2011
Hi,
if the plugin can be useful for the qgis users please consider
contributing it.
cheers
-- Giovanni --
On Mon, 2011-06-20 at 16:40 +0900, ASAHI Kosuke wrote:
> Dear All,
>
> I made features select plugin used rubberband class and extended
> QgsMapTool class.
> It work fine in QGIS 1.6, But not work in QGIS 1.7.
> After rubberBand.movePoint() in canvasMoveEvent(), it was crashed.
>
> Please give me any advice. Is this a bug in QGIS 1.7?
>
> All sources are here.
> http://d.hatena.ne.jp/waigani/files/sweepselect_test2.zip
>
> I use rubberband class like this.
> ====================================
> class QgsMapToolSweepSelect(QgsMapTool):
> def __init__(self, canvas):
> QgsMapTool.__init__(self, canvas)
> self.canvas = canvas
> self.rubberBand = QgsRubberBand(canvas, True)
> self.pressed = False
>
> def canvasPressEvent(self, event):
> self.center = self.toMapCoordinates(QPoint(event.pos().x(),
> event.pos().y()))
>
> for cnt in range(0,359):
> self.rubberBand.addPoint(self.center, False)
> self.rubberBand.addPoint(self.center, True)
> self.pressed = True
>
> def canvasMoveEvent(self, event):
> if self.pressed == True:
> cpos = self.toMapCoordinates(QPoint(event.pos().x(),
> event.pos().y()))
> len = math.sqrt((self.center.x()-cpos.x())**2 +
> (self.center.y()-cpos.y())**2)
> for cnt in range(0,361):
> x = math.cos(math.radians(cnt)) * len + self.center.x()
> y = math.sin(math.radians(cnt)) * len + self.center.y()
> self.rubberBand.movePoint(cnt, QgsPoint(x,y))
>
> def canvasReleaseEvent(self, event):
> layer = self.canvas.currentLayer()
> if layer == None or layer.type() != QgsMapLayer.VectorLayer:
> self.rubberBand.reset()
> self.pressed = False
> return
>
> layer.removeSelection()
> circle = self.rubberBand.asGeometry()
> fid = []
>
> provider = layer.dataProvider()
> provider.select([], circle.boundingBox(), True, True)
> feat = QgsFeature()
> while provider.nextFeature(feat):
> if circle.intersects(feat.geometry()):
> fid.append(feat.id())
>
> for id in fid:
> layer.select(id)
>
> self.rubberBand.reset(True)
> self.pressed = False
>
More information about the Qgis-user
mailing list