[Qgis-user] Rubberband class in QGIS 1.7

ASAHI Kosuke asahi at hcc.co.jp
Mon Jun 20 16:12:21 PDT 2011


Hi giovanni.

Thank you for your reply.
After I adjust it to QGIS 1.7, I will consider.

But still not work....

(2011/06/20 18:21), Giovanni Manghi wrote:
> 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
>>

-- 
ASAHI Kosuke




More information about the Qgis-user mailing list