-
Notifications
You must be signed in to change notification settings - Fork 206
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
TransformTool : Use standardised selection logic #3932
TransformTool : Use standardised selection logic #3932
Conversation
71e39be
to
5c614cb
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks Tom. I had a play with this and it seems to do what it says on the tin with respect to nodes manually added inside the scope. I think I found a regression in another case though. In the script below, if you view Outer
and choose it as your scope as well, and then try to edit the cube with the TranslateTool, it says "The target EditScope is not in the scene history" and you can't edit. That seems to work fine in 0.58.2.0.
Script
import Gaffer
import GafferScene
import IECore
import imath
Gaffer.Metadata.registerValue( parent, "serialiser:milestoneVersion", 0, persistent=False )
Gaffer.Metadata.registerValue( parent, "serialiser:majorVersion", 58, persistent=False )
Gaffer.Metadata.registerValue( parent, "serialiser:minorVersion", 3, persistent=False )
Gaffer.Metadata.registerValue( parent, "serialiser:patchVersion", 2, persistent=False )
__children = {}
__children["Outer"] = Gaffer.EditScope( "Outer" )
parent.addChild( __children["Outer"] )
__children["Outer"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outer"].addChild( Gaffer.EditScope( "Inner" ) )
__children["Outer"]["Inner"].addChild( Gaffer.BoxIn( "BoxIn" ) )
__children["Outer"]["Inner"]["BoxIn"].setup( GafferScene.ScenePlug( "out", ) )
__children["Outer"]["Inner"]["BoxIn"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outer"]["Inner"].addChild( GafferScene.ScenePlug( "in", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outer"]["Inner"].addChild( Gaffer.BoxOut( "BoxOut" ) )
__children["Outer"]["Inner"]["BoxOut"].setup( GafferScene.ScenePlug( "in", ) )
__children["Outer"]["Inner"]["BoxOut"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outer"]["Inner"].addChild( GafferScene.ScenePlug( "out", direction = Gaffer.Plug.Direction.Out, flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outer"]["Inner"].addChild( Gaffer.BoolPlug( "enabled", defaultValue = True, flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outer"]["Inner"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outer"]["Inner"].addChild( GafferScene.SceneProcessor( "TransformEdits" ) )
__children["Outer"]["Inner"]["TransformEdits"].addChild( Gaffer.Spreadsheet( "Spreadsheet" ) )
__children["Outer"]["Inner"]["TransformEdits"]["Spreadsheet"]["rows"].addColumn( Gaffer.V3fPlug( "translate", defaultValue = imath.V3f( 0, 0, 0 ), ) )
__children["Outer"]["Inner"]["TransformEdits"]["Spreadsheet"]["rows"].addColumn( Gaffer.V3fPlug( "rotate", defaultValue = imath.V3f( 0, 0, 0 ), ) )
__children["Outer"]["Inner"]["TransformEdits"]["Spreadsheet"]["rows"].addColumn( Gaffer.V3fPlug( "scale", defaultValue = imath.V3f( 1, 1, 1 ), ) )
__children["Outer"]["Inner"]["TransformEdits"]["Spreadsheet"]["rows"].addColumn( Gaffer.V3fPlug( "pivot", defaultValue = imath.V3f( 0, 0, 0 ), ) )
__children["Outer"]["Inner"]["TransformEdits"].addChild( GafferScene.PathFilter( "PathFilter" ) )
__children["Outer"]["Inner"]["TransformEdits"].addChild( GafferScene.Transform( "Transform" ) )
__children["Outer"]["Inner"]["TransformEdits"].addChild( Gaffer.Spreadsheet.RowsPlug( "edits", ) )
__children["Outer"]["Inner"]["TransformEdits"]["edits"].addColumn( Gaffer.V3fPlug( "translate", defaultValue = imath.V3f( 0, 0, 0 ), ) )
__children["Outer"]["Inner"]["TransformEdits"]["edits"].addColumn( Gaffer.V3fPlug( "rotate", defaultValue = imath.V3f( 0, 0, 0 ), ) )
__children["Outer"]["Inner"]["TransformEdits"]["edits"].addColumn( Gaffer.V3fPlug( "scale", defaultValue = imath.V3f( 1, 1, 1 ), ) )
__children["Outer"]["Inner"]["TransformEdits"]["edits"].addColumn( Gaffer.V3fPlug( "pivot", defaultValue = imath.V3f( 0, 0, 0 ), ) )
__children["Outer"]["Inner"]["TransformEdits"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outer"]["Inner"].addChild( GafferScene.Parent( "Parent" ) )
__children["Outer"]["Inner"]["Parent"]["children"].addChild( GafferScene.ScenePlug( "child1", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outer"]["Inner"]["Parent"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outer"]["Inner"].addChild( GafferScene.Cube( "Cube" ) )
__children["Outer"]["Inner"]["Cube"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outer"].addChild( Gaffer.BoxIn( "BoxIn" ) )
__children["Outer"]["BoxIn"].setup( GafferScene.ScenePlug( "out", ) )
__children["Outer"]["BoxIn"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outer"].addChild( GafferScene.ScenePlug( "in", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outer"].addChild( Gaffer.BoxOut( "BoxOut" ) )
__children["Outer"]["BoxOut"].setup( GafferScene.ScenePlug( "in", ) )
__children["Outer"]["BoxOut"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outer"].addChild( GafferScene.ScenePlug( "out", direction = Gaffer.Plug.Direction.Out, flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outer"].addChild( Gaffer.BoolPlug( "enabled", defaultValue = True, flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outer"].addChild( GafferScene.SceneProcessor( "TransformEdits" ) )
__children["Outer"]["TransformEdits"].addChild( Gaffer.Spreadsheet( "Spreadsheet" ) )
__children["Outer"]["TransformEdits"]["Spreadsheet"]["rows"].addColumn( Gaffer.V3fPlug( "translate", defaultValue = imath.V3f( 0, 0, 0 ), ) )
__children["Outer"]["TransformEdits"]["Spreadsheet"]["rows"].addColumn( Gaffer.V3fPlug( "rotate", defaultValue = imath.V3f( 0, 0, 0 ), ) )
__children["Outer"]["TransformEdits"]["Spreadsheet"]["rows"].addColumn( Gaffer.V3fPlug( "scale", defaultValue = imath.V3f( 1, 1, 1 ), ) )
__children["Outer"]["TransformEdits"]["Spreadsheet"]["rows"].addColumn( Gaffer.V3fPlug( "pivot", defaultValue = imath.V3f( 0, 0, 0 ), ) )
__children["Outer"]["TransformEdits"]["Spreadsheet"]["rows"].addRows( 1 )
__children["Outer"]["TransformEdits"].addChild( GafferScene.PathFilter( "PathFilter" ) )
__children["Outer"]["TransformEdits"].addChild( GafferScene.Transform( "Transform" ) )
__children["Outer"]["TransformEdits"].addChild( Gaffer.Spreadsheet.RowsPlug( "edits", ) )
__children["Outer"]["TransformEdits"]["edits"].addColumn( Gaffer.V3fPlug( "translate", defaultValue = imath.V3f( 0, 0, 0 ), ) )
__children["Outer"]["TransformEdits"]["edits"].addColumn( Gaffer.V3fPlug( "rotate", defaultValue = imath.V3f( 0, 0, 0 ), ) )
__children["Outer"]["TransformEdits"]["edits"].addColumn( Gaffer.V3fPlug( "scale", defaultValue = imath.V3f( 1, 1, 1 ), ) )
__children["Outer"]["TransformEdits"]["edits"].addColumn( Gaffer.V3fPlug( "pivot", defaultValue = imath.V3f( 0, 0, 0 ), ) )
__children["Outer"]["TransformEdits"]["edits"].addRows( 1 )
__children["Outer"]["TransformEdits"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Sphere"] = GafferScene.Sphere( "Sphere" )
parent.addChild( __children["Sphere"] )
__children["Sphere"].addChild( Gaffer.V2fPlug( "__uiPosition", defaultValue = imath.V2f( 0, 0 ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, ) )
__children["Outer"]["__uiPosition"].setValue( imath.V2f( 0.67161417, 0.0499999821 ) )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"], 'readOnly', False )
__children["Outer"]["Inner"]["BoxIn"]["__in"].setInput( __children["Outer"]["Inner"]["in"] )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"]["BoxIn"]["__in"], 'nodule:color', imath.Color3f( 0.240099996, 0.339399993, 0.485000014 ) )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"]["BoxIn"]["__in"], 'nodule:type', 'GafferUI::StandardNodule' )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"]["BoxIn"]["__in"], 'description', 'The output scene.' )
__children["Outer"]["Inner"]["BoxIn"]["__uiPosition"].setValue( imath.V2f( 0.500503898, 8.5 ) )
__children["Outer"]["Inner"]["in"].setInput( __children["Outer"]["BoxIn"]["out"] )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"]["in"], 'nodule:color', imath.Color3f( 0.240099996, 0.339399993, 0.485000014 ) )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"]["in"], 'nodule:type', 'GafferUI::StandardNodule' )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"]["in"], 'description', 'The output scene.' )
__children["Outer"]["Inner"]["BoxOut"]["in"].setInput( __children["Outer"]["Inner"]["Parent"]["out"] )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"]["BoxOut"]["__out"], 'nodule:color', imath.Color3f( 0.240099996, 0.339399993, 0.485000014 ) )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"]["BoxOut"]["__out"], 'nodule:type', 'GafferUI::StandardNodule' )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"]["BoxOut"]["__out"], 'description', 'The output scene.' )
__children["Outer"]["Inner"]["BoxOut"]["passThrough"].setInput( __children["Outer"]["Inner"]["BoxIn"]["out"] )
__children["Outer"]["Inner"]["BoxOut"]["enabled"].setInput( __children["Outer"]["Inner"]["enabled"] )
__children["Outer"]["Inner"]["BoxOut"]["__uiPosition"].setValue( imath.V2f( 0.500503898, -12.9000006 ) )
__children["Outer"]["Inner"]["out"].setInput( __children["Outer"]["Inner"]["BoxOut"]["__out"] )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"]["out"], 'nodule:color', imath.Color3f( 0.240099996, 0.339399993, 0.485000014 ) )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"]["out"], 'nodule:type', 'GafferUI::StandardNodule' )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"]["out"], 'description', 'The output scene.' )
__children["Outer"]["Inner"]["__uiPosition"].setValue( imath.V2f( -18.9000015, -2.53203106 ) )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"]["TransformEdits"], 'editScope:processorType', 'TransformEdits' )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"]["TransformEdits"], 'icon', 'editScopeProcessorNode.png' )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"]["TransformEdits"], 'nodeGadget:color', imath.Color3f( 0.187600002, 0.390799999, 0.600000024 ) )
__children["Outer"]["Inner"]["TransformEdits"]["out"].setInput( __children["Outer"]["Inner"]["TransformEdits"]["Transform"]["out"] )
__children["Outer"]["Inner"]["TransformEdits"]["in"].setInput( __children["Outer"]["Inner"]["BoxIn"]["out"] )
__children["Outer"]["Inner"]["TransformEdits"]["Spreadsheet"]["selector"].setValue( '${scene:path}' )
__children["Outer"]["Inner"]["TransformEdits"]["Spreadsheet"]["rows"].setInput( __children["Outer"]["Inner"]["TransformEdits"]["edits"] )
__children["Outer"]["Inner"]["TransformEdits"]["PathFilter"]["paths"].setInput( __children["Outer"]["Inner"]["TransformEdits"]["Spreadsheet"]["activeRowNames"] )
__children["Outer"]["Inner"]["TransformEdits"]["Transform"]["enabled"].setInput( __children["Outer"]["Inner"]["TransformEdits"]["enabled"] )
__children["Outer"]["Inner"]["TransformEdits"]["Transform"]["in"].setInput( __children["Outer"]["Inner"]["TransformEdits"]["in"] )
__children["Outer"]["Inner"]["TransformEdits"]["Transform"]["filter"].setInput( __children["Outer"]["Inner"]["TransformEdits"]["PathFilter"]["out"] )
__children["Outer"]["Inner"]["TransformEdits"]["Transform"]["space"].setValue( 3 )
__children["Outer"]["Inner"]["TransformEdits"]["Transform"]["transform"].setInput( __children["Outer"]["Inner"]["TransformEdits"]["Spreadsheet"]["out"] )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"]["TransformEdits"]["edits"], 'spreadsheet:defaultRowVisible', False )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"]["TransformEdits"]["edits"][0], 'spreadsheet:rowNameWidth', 300 )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"]["TransformEdits"]["edits"][0]["cells"]["translate"], 'spreadsheet:columnWidth', 200 )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"]["TransformEdits"]["edits"][0]["cells"]["rotate"], 'spreadsheet:columnWidth', 200 )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"]["TransformEdits"]["edits"][0]["cells"]["scale"], 'spreadsheet:columnWidth', 200 )
Gaffer.Metadata.registerValue( __children["Outer"]["Inner"]["TransformEdits"]["edits"][0]["cells"]["pivot"], 'spreadsheet:columnWidth', 200 )
__children["Outer"]["Inner"]["TransformEdits"]["__uiPosition"].setValue( imath.V2f( -7.6005044, -5.96046448e-08 ) )
__children["Outer"]["Inner"]["Parent"]["in"].setInput( __children["Outer"]["Inner"]["TransformEdits"]["out"] )
__children["Outer"]["Inner"]["Parent"]["parent"].setValue( '/' )
__children["Outer"]["Inner"]["Parent"]["children"][0].setInput( __children["Outer"]["Inner"]["Cube"]["out"] )
__children["Outer"]["Inner"]["Parent"]["__uiPosition"].setValue( imath.V2f( -2.59949708, -6.54999971 ) )
__children["Outer"]["Inner"]["Cube"]["transform"]["translate"].setValue( imath.V3f( -0.121680096, 0.0861412212, 0.287150264 ) )
__children["Outer"]["Inner"]["Cube"]["__uiPosition"].setValue( imath.V2f( 20.1494961, -2.25000072 ) )
__children["Outer"]["BoxIn"]["__in"].setInput( __children["Outer"]["in"] )
Gaffer.Metadata.registerValue( __children["Outer"]["BoxIn"]["__in"], 'nodule:color', imath.Color3f( 0.240099996, 0.339399993, 0.485000014 ) )
Gaffer.Metadata.registerValue( __children["Outer"]["BoxIn"]["__in"], 'nodule:type', 'GafferUI::StandardNodule' )
Gaffer.Metadata.registerValue( __children["Outer"]["BoxIn"]["__in"], 'description', 'The output scene.' )
__children["Outer"]["BoxIn"]["__uiPosition"].setValue( imath.V2f( -3.18547726, 5.96796894 ) )
__children["Outer"]["in"].setInput( __children["Sphere"]["out"] )
Gaffer.Metadata.registerValue( __children["Outer"]["in"], 'nodule:color', imath.Color3f( 0.240099996, 0.339399993, 0.485000014 ) )
Gaffer.Metadata.registerValue( __children["Outer"]["in"], 'nodule:type', 'GafferUI::StandardNodule' )
Gaffer.Metadata.registerValue( __children["Outer"]["in"], 'description', 'The output scene.' )
__children["Outer"]["BoxOut"]["in"].setInput( __children["Outer"]["TransformEdits"]["out"] )
Gaffer.Metadata.registerValue( __children["Outer"]["BoxOut"]["__out"], 'nodule:color', imath.Color3f( 0.240099996, 0.339399993, 0.485000014 ) )
Gaffer.Metadata.registerValue( __children["Outer"]["BoxOut"]["__out"], 'nodule:type', 'GafferUI::StandardNodule' )
Gaffer.Metadata.registerValue( __children["Outer"]["BoxOut"]["__out"], 'description', 'The output scene.' )
__children["Outer"]["BoxOut"]["passThrough"].setInput( __children["Outer"]["BoxIn"]["out"] )
__children["Outer"]["BoxOut"]["enabled"].setInput( __children["Outer"]["enabled"] )
__children["Outer"]["BoxOut"]["__uiPosition"].setValue( imath.V2f( -4.68547726, -20.9799976 ) )
__children["Outer"]["out"].setInput( __children["Outer"]["BoxOut"]["__out"] )
Gaffer.Metadata.registerValue( __children["Outer"]["out"], 'nodule:color', imath.Color3f( 0.240099996, 0.339399993, 0.485000014 ) )
Gaffer.Metadata.registerValue( __children["Outer"]["out"], 'nodule:type', 'GafferUI::StandardNodule' )
Gaffer.Metadata.registerValue( __children["Outer"]["out"], 'description', 'The output scene.' )
Gaffer.Metadata.registerValue( __children["Outer"]["TransformEdits"], 'editScope:processorType', 'TransformEdits' )
Gaffer.Metadata.registerValue( __children["Outer"]["TransformEdits"], 'icon', 'editScopeProcessorNode.png' )
Gaffer.Metadata.registerValue( __children["Outer"]["TransformEdits"], 'nodeGadget:color', imath.Color3f( 0.187600002, 0.390799999, 0.600000024 ) )
__children["Outer"]["TransformEdits"]["out"].setInput( __children["Outer"]["TransformEdits"]["Transform"]["out"] )
__children["Outer"]["TransformEdits"]["in"].setInput( __children["Outer"]["Inner"]["out"] )
__children["Outer"]["TransformEdits"]["Spreadsheet"]["selector"].setValue( '${scene:path}' )
__children["Outer"]["TransformEdits"]["Spreadsheet"]["rows"].setInput( __children["Outer"]["TransformEdits"]["edits"] )
__children["Outer"]["TransformEdits"]["PathFilter"]["paths"].setInput( __children["Outer"]["TransformEdits"]["Spreadsheet"]["activeRowNames"] )
__children["Outer"]["TransformEdits"]["Transform"]["enabled"].setInput( __children["Outer"]["TransformEdits"]["enabled"] )
__children["Outer"]["TransformEdits"]["Transform"]["in"].setInput( __children["Outer"]["TransformEdits"]["in"] )
__children["Outer"]["TransformEdits"]["Transform"]["filter"].setInput( __children["Outer"]["TransformEdits"]["PathFilter"]["out"] )
__children["Outer"]["TransformEdits"]["Transform"]["space"].setValue( 3 )
__children["Outer"]["TransformEdits"]["Transform"]["transform"].setInput( __children["Outer"]["TransformEdits"]["Spreadsheet"]["out"] )
__children["Outer"]["TransformEdits"]["edits"][1]["name"].setValue( '/sphere' )
__children["Outer"]["TransformEdits"]["edits"][1]["cells"]["translate"]["value"].setValue( imath.V3f( 0.11235854, -0.269507796, 4.54280138 ) )
Gaffer.Metadata.registerValue( __children["Outer"]["TransformEdits"]["edits"], 'spreadsheet:defaultRowVisible', False )
Gaffer.Metadata.registerValue( __children["Outer"]["TransformEdits"]["edits"][0], 'spreadsheet:rowNameWidth', 300 )
Gaffer.Metadata.registerValue( __children["Outer"]["TransformEdits"]["edits"][0]["cells"]["translate"], 'spreadsheet:columnWidth', 200 )
Gaffer.Metadata.registerValue( __children["Outer"]["TransformEdits"]["edits"][0]["cells"]["rotate"], 'spreadsheet:columnWidth', 200 )
Gaffer.Metadata.registerValue( __children["Outer"]["TransformEdits"]["edits"][0]["cells"]["scale"], 'spreadsheet:columnWidth', 200 )
Gaffer.Metadata.registerValue( __children["Outer"]["TransformEdits"]["edits"][0]["cells"]["pivot"], 'spreadsheet:columnWidth', 200 )
__children["Outer"]["TransformEdits"]["__uiPosition"].setValue( imath.V2f( -20.4000015, -12.4799976 ) )
__children["Sphere"]["transform"]["translate"].setValue( imath.V3f( -0.200081155, -0.0145621896, 5.67827845 ) )
__children["Sphere"]["__uiPosition"].setValue( imath.V2f( -0.82838583, 10.1500006 ) )
del __children
I still find myself uneasy about the entire concept of allowing direct creation of nodes inside EditScopes by users. For me, part of the beauty of the original concept was that they provided a "safe space" for Gaffer to manage automatically created nodes. I worry that the increased complexity and potential for endless edge cases outweighs any perceived benefit from allowing direct editing by users.
5c614cb
to
5f1d51b
Compare
@johnhaddon Added |
Fixed here. Thanks for the catch. I think we still don't officially 'support' nested |
We were inconsistent with the standardised logic established whilst working on the `SceneViewInspector`. We picked EditScopes in preference over any applicable nodes inside the scope. This could result in unnecessary `TranformEdits` being made, even if the the target location's source node was inside the scope, or there was an existing Transform node editing that location.
Provides more detail, and matches the language used in the `SceneViewInspector`.
…dits Though the tool correctly handled readOnly state for for existing plugs, it was still possible to inadvertently insert rows into `TransformEdits`, even if the `edits` plug was locked (inherited or otherwise).
7760a77
to
ef2b621
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Did some further testing with this and all seems well. Rebased onto master ready for release in 0.59. Sorry for the delay in getting to this one Tom...
No probs :) thanks for sorting the rebase. |
When we built the
SceneViewInspector
, we came up with a slightly adjusted set of rule for how editing tools should work withEditScopes
and existing nodes. We did however, completely forget to go back and updateTransformTool::Selection
to match the revised logic.This PR hopefully makes the transform tools, and inspector behave consistently. The main changes are
EditScope
will be used in preference to defining a new edit/TransformEdit
node.This code is a somewhat subtle beast, and so this could do with a good bit of real-life testing.