[Qgis-user] getting QgsMapCanvasSnapper to work

Martin Dobias wonder.sk at gmail.com
Wed Nov 19 12:12:39 PST 2008


Hi,

On Tue, Nov 18, 2008 at 11:00 PM, Hugentobler  Marco
<marco.hugentobler at karto.baug.ethz.ch> wrote:
> Hi Cedric
>
> I used your code lines and started the debugger. It seems that the QgsMapCanvasSnapper works correctly. I think the problem has to do with the QList reference in the binding:
>
> int snapToCurrentLayer( const QPoint& p, QList<QgsSnappingResult>& results, QgsSnapper::SnappingType snap_to, double snappingTol = -1, const QList<QgsPoint>& excludePoints = QList<QgsPoint>() );
>
> I tried to change that to:
>
> int snapToCurrentLayer( const QPoint& p, QList<QgsSnappingResult>& results /Out/, QgsSnapper::SnappingType snap_to, double snappingTol = -1, const QList<QgsPoint>& excludePoints = QList<QgsPoint>() );

you're right, this is the correct binding. I've fixed that in r9671.
Now in python one will call snapToCurrentLayer like this:

(retval, results) = mcs.snapToCurrentLayer(pnt,
QgsSnapper.SnapToVertex, 0.002, [] )

The last two parameters are optional also in Python.


> But then Python complains about a wrong type of the results parameter with your code. I tried to use a 'QList' instead of '[]', but it seems there is no QList in PyQt?
>
> Python experts: How can we deal with QList in PyQGIS?

As Carson noted already, you can use python array for QList  (and
python dictionary for QMap).
Python doesn't support C++-style templates, so SIP allows developers
to implement conversion between templates and python objects, this
mechanism is used in PyQt for these conversions.

Martin



More information about the Qgis-user mailing list