Hi Radim,
It seems it is your point that has been deleted, not the rubber band.
Doing "print point" before addPoint crashes.
Cheers,
Denis
On 13. 02. 14 08:39, Radim Blazek wrote:
On Thu, Feb 13, 2014 at 8:35 AM, Radim Blazek <[email protected]> wrote:
On Thu, Feb 13, 2014 at 7:13 AM, Denis Rouzaud <[email protected]> wrote:
Hi Radim,
Can you show us the whole code?
https://github.com/blazek/spline/blob/master/spline/spline.py
And traceback:
Traceback (most recent call last):
File "C:\Users\user1/.qgis2/python/plugins\spline\spline.py", line
174, in canvasMoveEvent
self.setRubberBandPoints(points )
File "C:\Users\user1/.qgis2/python/plugins\spline\spline.py", line
207, in setRubberBandPoints
self.rb.addPoint( point, update )
RuntimeError: underlying C/C++ object has been deleted
Radim
Radim
Cheers,
Denis
On 12. 02. 14 19:17, Radim Blazek wrote:
On Wed, Feb 12, 2014 at 2:50 PM, Martin Dobias <[email protected]>
wrote:
Hi Radim
On Wed, Feb 12, 2014 at 8:03 PM, Radim Blazek <[email protected]>
wrote:
On Wed, Feb 12, 2014 at 1:45 PM, Radim Blazek <[email protected]>
wrote:
I am using rubber band in Python plugin:
self.rb = QgsRubberBand(self.canvas, QGis.Polygon)
and on mouse move
self.rb.addPoint( point, update )
It works well on most systems only for Win7/32bit (QGIS 2.0.1, Python
2.7.4) it was reported that it fails with "RuntimeError: underlying
C/C++ object has been deleted"
When does it report the error - when closing QGIS?
I don't know but I presume when map tool is used, it is called from
QgsMapTool::canvasMoveEvent().
Radim
I see that ownership of rubber band is passed to map canvas
QgsRubberBand( QgsMapCanvas* mapCanvas /TransferThis/,
QGis::GeometryType geometryType = QGis::Line );
that is OK, but QgsMapCanvas should not delete QGraphicsItem until it
is destructed.
So how can the QgsRubberBand be deleted before QGIS is closed?
BTW, because true owner of QGraphicsItem is QGraphicsScene, should not
we first mScene->removeItem() (which returns ownership) before item is
deleted in QgsMapCanvas destructor?
That's the correct approach in Python (IIRC). You can remove the item
in your map tool's deactivate() method.
Regards
Martin
_______________________________________________
Qgis-developer mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/qgis-developer
_______________________________________________
Qgis-developer mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/qgis-developer