On Thu, Feb 13, 2014 at 9:04 AM, Denis Rouzaud <denis.rouz...@gmail.com> wrote:
> Hi Radim,
>
> It seems it is your point that has been deleted, not the rubber band.
> Doing "print point" before addPoint crashes.

Good, thanks and sorry for false pointing to rubber band.

However, do you have any idea where the point may be deleted? The
points are acquired from QgsGeometry.asPolyline() which returns
QVector<QgsPoint>, i.e. list of values. The points are then add to
another list: result.extend( pnts[1:-1] ). Is it wrong? The points get
deleted with original list?

Radim


> Cheers,
>
> Denis
>
>
>
> On 13. 02. 14 08:39, Radim Blazek wrote:
>>
>> On Thu, Feb 13, 2014 at 8:35 AM, Radim Blazek <radim.bla...@gmail.com>
>> wrote:
>>>
>>> On Thu, Feb 13, 2014 at 7:13 AM, Denis Rouzaud <denis.rouz...@gmail.com>
>>> 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 <wonder...@gmail.com>
>>>>> wrote:
>>>>>>
>>>>>> Hi Radim
>>>>>>
>>>>>> On Wed, Feb 12, 2014 at 8:03 PM, Radim Blazek <radim.bla...@gmail.com>
>>>>>> wrote:
>>>>>>>
>>>>>>> On Wed, Feb 12, 2014 at 1:45 PM, Radim Blazek
>>>>>>> <radim.bla...@gmail.com>
>>>>>>> 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
>>>>> Qgis-developer@lists.osgeo.org
>>>>> http://lists.osgeo.org/mailman/listinfo/qgis-developer
>>>>
>>>>
>
_______________________________________________
Qgis-developer mailing list
Qgis-developer@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/qgis-developer

Reply via email to