[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