[Qgis-developer] Problem definig snapping options programmatically

John Stevenson john.stevenson at thinkwhere.com
Fri Jun 24 04:06:50 PDT 2016


Hi Christian,

Yes, my problem is exactly the same as yours, and so I have the same questions, too:

- is it a bug or a feature that the settings are not applied immediately by setSnapSettingsToLayer()?
- is there a way to change snapping settings to Advanced via Python?

Thanks,
John

John Stevenson
Senior Developer
Email:mailto:john.stevenson at thinkwhere.com

Glendevon House
Castle Business Park
Stirling FK9 4TZ

Tel: 01786 476060
Tel: 01786 476093 (Direct Dial)

________________________________________
From: Qgis-developer [qgis-developer-bounces at lists.osgeo.org] on behalf of EFTAS Christian Röttger [Christian.Roettger at eftas.com]
Sent: 24 June 2016 10:38
To: qgis-developer at lists.osgeo.org
Subject: Re: [Qgis-developer] Problem definig snapping options programmatically

Hi John,

sorry I think I don't understand your mail at the moment. As I understand it, this is exactly my problem or is here a solution in it?
I tried QgsProject.instance().snapSettingsChanged.emit() but it seems that it has no effect and like below fires with no argument.
Settings are set but are not applied.

The only "solution" which I see at the moment is:
"Settings > Snapping Options > Snapping Mode" remains at "Current Layer".  Changing this to to "Advanced" shows correct values have been
set, but they are not activated until "OK" is pressed.

Thanks for the help
Christian

> -----Ursprüngliche Nachricht-----
> Von: Qgis-developer [mailto:qgis-developer-bounces at lists.osgeo.org] Im
> Auftrag von John Stevenson
> Gesendet: Freitag, 24. Juni 2016 10:43
> An: Matthias Kuhn; qgis-developer at lists.osgeo.org
> Cc: Tom Chadwin
> Betreff: Re: [Qgis-developer] Problem definig snapping options
> programmatically
>
> Hi all,
>
> This is the same issue that I had a few months ago [1].  (Thanks Tom
> for flagging it up).
>
> You can recreate in the console as follows as follows (QGIS 2.14.3,
> with one vector layer loaded):
>
> ```
> vlayer = QgsMapLayerRegistry.instance().mapLayers().values()[0]
> proj = QgsProject.instance()
> proj.setSnapSettingsForLayer(vlayer.id(), True,
> QgsSnapper.SnapToVertex, QgsTolerance.LayerUnits, 5.0, False)
> ```
>
> The settings are not applied.
>
> "Settings > Snapping Options > Snapping Mode" remains at "Current
> Layer".  Changing this to to "Advanced" shows correct values have been
> set, but they are not activated until "Apply" is pressed.
>
> Connecting a function to QgsProject.instance().snapSettingsChanged()
> shows that the signal fires with no arguments when
> setSnapSettingsForLayer is called.  Emitting the signal manually does
> nothing.
>
> Cheers
> John
>
> [1]: http://osgeo-org.1560.x6.nabble.com/Setting-snapping-settings-via-
> Python-td5246362.html
>
> John Stevenson
> Senior Developer
> Email:mailto:john.stevenson at thinkwhere.com
>
> Glendevon House
> Castle Business Park
> Stirling FK9 4TZ
>
> Tel: 01786 476060
> Tel: 01786 476093 (Direct Dial)
>
> ________________________________________
> From: Qgis-developer [qgis-developer-bounces at lists.osgeo.org] on behalf
> of Matthias Kuhn [matthias at opengis.ch]
> Sent: 23 June 2016 14:55
> To: qgis-developer at lists.osgeo.org
> Subject: Re: [Qgis-developer] Problem definig snapping options
> programmatically
>
> Hi Christian,
>
> Does it help if you call
>
>     QgsProject.instance().snapSettingsChanged()
>
> Cheers
> Matthias
>
> On 06/23/2016 03:38 PM, EFTAS Christian Röttger wrote:
> > Hi developers,
> >
> >
> >
> > i’m facing a problem which i do not understand. In our plugin I
> created
> > a function to set snapping options and bound it to a shortcut.
> >
> > Using Qgis 2.14.3, source code see below.
> >
> >
> >
> > The assigned shortcut works well, but for the snapping I have to do
> the
> > following on every QGIS start:
> >
> > Go to snapping options, mode = advanced, press ok (without changing
> > anything). Then it works afterwards!
> >
> > But when I print the options *before* I do this, I definitely get the
> > right options (see below).
> >
> >
> >
> > Does anyone know what I’m missing? Should I open an bug report? Is
> there
> > a workaround do do: “Go to snapping options, mode = advanced, press
> ok”
> > programmatically ?
> >
> >
> >
> > Thanks for any help
> >
> > Christian
> >
> >
> >
> > ## Print result
> >
> > Initialize, when aggroInstance is true
> >
> > (True, False, 2, 0, 2.0, True)
> >
> > (True, False, 2, 0, 2.0, True)
> >
> > (True, False, 2, 0, 2.0, True)
> >
> > (True, False, 2, 0, 2.0, True)
> >
> > (True, False, 2, 0, 2.0, True)
> >
> > (True, False, 2, 0, 2.0, True)
> >
> > (True, False, 2, 0, 2.0, True)
> >
> > (True, False, 2, 0, 2.0, True)
> >
> > checked
> >
> > (True, False, 2, 0, 2.0, True)
> >
> > (True, False, 2, 0, 2.0, True)
> >
> > (True, True, 2, 0, 2.0, False)
> >
> > (True, False, 2, 0, 2.0, True)
> >
> > (True, False, 2, 0, 2.0, True)
> >
> > (True, True, 2, 0, 2.0, False)
> >
> > (True, False, 2, 0, 2.0, True)
> >
> > (True, False, 2, 0, 2.0, True)
> >
> >
> >
> > ## function
> >
> >
> >
> > *def *toggleSnapping(checked):
> >     /'''
> >     Toggle snapping option
> >     /*:param*/checked: True if snapping has been activated, False
> otherwise
> >     '''
> >     /aggroInstance = initModule.aggroInstance
> >     *print **'Initialize'
> >     **if *bool(agroInstance):
> >         *for *item *in
> *QgsMapLayerRegistry.instance().mapLayers().values():
> >             QgsProject.instance().setSnapSettingsForLayer(item.id(),
> > False, 2, 0, 2, True)
> >         fieldLayer =
> > mapUtils.getLayerByName(aggroInstance.dictData[*'field'*])
> >         backgroundLayer = mapUtils.getLayerByName(*'bg'*)
> >         *for *item *in
> *QgsMapLayerRegistry.instance().mapLayers().values():
> >             *print
> *QgsProject.instance().snapSettingsForLayer(item.id())
> >         *if *checked:
> >             *print **'checked'
> >             */# Convenience function to set snap settings per layer.
> >             # it defines the snapping options:
> >             # id : the id of your layer, True : to enable the layer
> > snapping, 2 : options (2: vertex+segment), 0: type of unit on map, 2
> :
> > tolerance, true : avoidIntersection)
> >
> > /QgsProject.instance().setSnapSettingsForLayer(fieldLayer.id(), True,
> 2,
> > 0, 2, False)
> >
> > QgsProject.instance().setSnapSettingsForLayer(backgroundLayer.id(),
> > True, 2, 0, 2, False)
> >             *for *item *in
> > *QgsMapLayerRegistry.instance().mapLayers().values():
> >                 *print
> > *QgsProject.instance().snapSettingsForLayer(item.id())
> >
> >
> >
> > ## initialization in run() method
> >
> >
> >
> > /# Call Snapping Tool by a key shortcut
> > /*for *action *in *self.actions:
> >     *if *action.text() == *'Toggle Snapping'*:
> >         /# Action triggered by shortcut key
> >         /self.iface.registerMainWindowAction(action, *"c"*)
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > --
> >
> > image003
> >
> > eftas3
> >
> > Dipl.-Geoinf. Christian Röttger
> >
> > -Forschung und Entwicklung
> >
> > E F T A S    Fernerkundung
> > Technologietransfer GmbH
> > Oststraße 2-18
> > 48145 Münster
> >
> > Fon: +49 251 13307-23         E-Mail: christian.roettger at eftas.com
> > <mailto:christian.roettger at eftas.com>
> > Fax:  +49 251 13307-33        Web:   http://www.eftas.com
> > <http://www.eftas.com/>
> >
> > Geschäftsführer:
> > Dipl.-Ing. Georg Altrogge
> >
> > Sitz der Gesellschaft: Münster
> > Amtsgericht Münster, HRB 2999
> > USt.-IdNr. DE 126038986
> >
> > ******************************************************************
> >
> > image007
> >
> >
> >
> >
> >
> > _______________________________________________
> > Qgis-developer mailing list
> > Qgis-developer at lists.osgeo.org
> > List info: http://lists.osgeo.org/mailman/listinfo/qgis-developer
> > Unsubscribe: http://lists.osgeo.org/mailman/listinfo/qgis-developer
> >
> _______________________________________________
> Qgis-developer mailing list
> Qgis-developer at lists.osgeo.org
> List info: http://lists.osgeo.org/mailman/listinfo/qgis-developer
> Unsubscribe: http://lists.osgeo.org/mailman/listinfo/qgis-developer
>
>
> _______________________________________________
> Qgis-developer mailing list
> Qgis-developer at lists.osgeo.org
> List info: http://lists.osgeo.org/mailman/listinfo/qgis-developer
> Unsubscribe: http://lists.osgeo.org/mailman/listinfo/qgis-developer
_______________________________________________
Qgis-developer mailing list
Qgis-developer at lists.osgeo.org
List info: http://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: http://lists.osgeo.org/mailman/listinfo/qgis-developer




More information about the Qgis-developer mailing list