[QGIS-Developer] Rotating selected features programmatically
Jacky Volpes
jacky.volpes at oslandia.com
Mon Aug 5 02:14:17 PDT 2024
Hi Luke,
My guess is that when more than one feature is selected, and the
rotation is ended, geometryChanged signal is emitted for each rotated
feature.
element_layer_rotated() is run when the first geometryChanged signal is
emitted, and is disconnected, and the layer is saved, and the other
geometryChanged signals don't trigger anything.
NB: self.vector_layer.editBuffer().geometryChanged.disconnect() is
risky, if other slots are connected, prefer
self.vector_layer.editBuffer().geometryChanged.disconnect(self.element_layer_rotated)
Regards,
--
Jacky Volpes
Ingénieur développeur SIG - Oslandia
Le 01/08/2024 à 20:29, Catania, Luke A ERDC-RDE-GRL-VA CIV a écrit :
>
> def rotateFeature(self):
>
> """Find the rotate feature action in QGIS toolbar and trigger
> it so the user can rotate the element.
>
> """
>
> # We want to detect when the rotation is complete with a
> geometryChanged signal so we can commit the changes and
>
> # end the edit session.
>
> self.vector_layer.editBuffer().geometryChanged.connect(self.element_layer_rotated)
>
> # Get all actions so we can search for the
> mActionRotateFeature action.
>
> actions = iface.mainWindow().findChildren(QAction)
>
> action = [x for x in actions if
> x.objectName()=='mActionRotateFeature'][0]
>
> expression = '"Element_Nb" = '
>
> expression = expression + "\'" + f'{self.element_number}' + "\'"
>
> QgsMessageLog.logMessage(f"expression: {expression}",
> "StandoffLayers", Qgis.Info)
>
> processing.run("qgis:selectbyexpression",
>
> {'INPUT':self.vector_layer,
>
> 'EXPRESSION': expression,
>
> 'METHOD':0
>
> }
>
> )
>
> # Inititates rotate feature action allowing to select a snap
> to value.
>
> action.trigger()
>
> QgsMessageLog.logMessage(f"Rotate Feature Action Triggered",
> "ElementPlacementTool", Qgis.Info)
>
> def element_layer_rotated(self):
>
> """When the rotate action is triggered it seems to ignore the
> ElementPlacementTool events, so in order to end the edit session
>
> we need to detect a geometryChanged event after the rotation
> is complete.
>
> """
>
> QgsMessageLog.logMessage(f"Element Layer Rotated:
> {self.vector_layer.name()}", "ElementPlacementTool", Qgis.Info)
>
> # Disconnect from the signal so we can just commit the changes.
>
> self.vector_layer.editBuffer().geometryChanged.disconnect()
>
> # Save changes and end edit mode
>
> self.vector_layer.commitChanges()
>
> self.vector_layer.endEditCommand()
>
> self.deactivate()
>
> *From:*Jacky Volpes <jacky.volpes at oslandia.com>
> *Sent:* Thursday, August 1, 2024 8:26 AM
> *To:* Catania, Luke A ERDC-RDE-GRL-VA CIV
> <Luke.A.Catania at erdc.dren.mil>; 'qgis-developer'
> <qgis-developer at lists.osgeo.org>
> *Subject:* Re: [QGIS-Developer] Rotating selected features
> programmatically
>
> Hi Luke,
>
> Please provide a PyQGIS code snippet to reproduce. It will be more
> convenient to comment and suggest modifications.
> Thanks,
>
> --
> Jacky Volpes
> Ingénieur développeur SIG - Oslandia
>
>
> Le 26/07/2024 à 22:06, Catania, Luke A ERDC-RDE-GRL-VA CIV via
> QGIS-Developer a écrit :
>
> I am using the select by expression tool through python to select
> my features and then I trigger rotation through python I see both
> selected features rotating, but when I click to end the rotation,
> it only rotated one of the features and left the other one as is.
> If I do this through the QGIS using the selection by expression in
> the selection toolbar and the rotate in the advanced digitizing
> tool bar rotating both features works fine.
>
> Any Ideas?
>
> Luke
>
>
>
> _______________________________________________
>
> QGIS-Developer mailing list
>
> QGIS-Developer at lists.osgeo.org
>
> List info:Blockedhttps://lists.osgeo.org/mailman/listinfo/qgis-developerBlocked <Blockedhttps://lists.osgeo.org/mailman/listinfo/qgis-developerBlocked>
>
> Unsubscribe:Blockedhttps://lists.osgeo.org/mailman/listinfo/qgis-developerBlocked <Blockedhttps://lists.osgeo.org/mailman/listinfo/qgis-developerBlocked>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20240805/da530513/attachment.htm>
More information about the QGIS-Developer
mailing list