[Qgis-developer] Problem definig snapping options programmatically

EFTAS Christian Röttger Christian.Roettger at eftas.com
Fri Jun 24 02:38:29 PDT 2016


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


More information about the Qgis-developer mailing list