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 <[email protected]>
*Sent:* Thursday, August 1, 2024 8:26 AM
*To:* Catania, Luke A ERDC-RDE-GRL-VA CIV
<[email protected]>; 'qgis-developer'
<[email protected]>
*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
[email protected]
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>
_______________________________________________
QGIS-Developer mailing list
[email protected]
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer