From 00188e8bb234c254769e30bc631c57a5781c8502 Mon Sep 17 00:00:00 2001 From: Eric Mehl Date: Mon, 3 Jul 2023 17:40:30 -0400 Subject: [PATCH] EditScopeAlgo : Fix tweak node `enabled` inputs The tweak nodes should have their `enabled` plugs driven by the scene processor `enabled` plug. Previously we were only setting their value at creation time, and to a `Plug` object which will always evaluate to `True`. --- Changes.md | 1 + python/GafferSceneTest/EditScopeAlgoTest.py | 8 ++++++++ src/GafferScene/EditScopeAlgo.cpp | 6 ++++-- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Changes.md b/Changes.md index 74458c393d1..5fc8f9dbe2e 100644 --- a/Changes.md +++ b/Changes.md @@ -14,6 +14,7 @@ Fixes - Fixed bug causing the cursor position to be reset to the end if the number of digits in the plug value changed while incrementing/decrementing with the keyboard up/down arrow keys. - Fixed bug causing the cursor position to be reset to the end when incrementing an animated plug. - Fixed intermittent `---` values when drag-changing an animated plug value. +- EditScopes : Fixed bug where the enabled state of `AttributeEdits`, `OptionEdits` and `SetMembershipEdits` did not have any effect. This fix will only apply to newly created `AttributeEdits`, `OptionEdits` and `SetMembershipEdits`. 1.2.9.0 (relative to 1.2.8.0) ======= diff --git a/python/GafferSceneTest/EditScopeAlgoTest.py b/python/GafferSceneTest/EditScopeAlgoTest.py index e0ef5da1b24..a712b552b74 100644 --- a/python/GafferSceneTest/EditScopeAlgoTest.py +++ b/python/GafferSceneTest/EditScopeAlgoTest.py @@ -73,6 +73,7 @@ def testPruning( self ) : self.assertFalse( GafferScene.EditScopeAlgo.getPruned( scope, "/group/cube" ) ) self.assertEqual( len( list( GafferScene.SceneProcessor.Range( scope ) ) ), 1 ) self.assertEqual( scope["PruningEdits"]["paths"].getValue(), IECore.StringVectorData( [ "/group/plane" ] ) ) + self.assertEqual( scope["PruningEdits"]["Prune"]["enabled"].getInput(), scope["PruningEdits"]["enabled"] ) self.assertFalse( GafferScene.SceneAlgo.exists( scope["out"], "/group/plane" ) ) self.assertTrue( GafferScene.SceneAlgo.exists( scope["out"], "/group/cube" ) ) @@ -162,6 +163,7 @@ def testTransform( self ) : self.assertIsInstance( edit, GafferScene.EditScopeAlgo.TransformEdit ) self.assertTrue( GafferScene.EditScopeAlgo.hasTransformEdit( editScope, "/plane" ) ) self.assertIsNotNone( GafferScene.EditScopeAlgo.acquireTransformEdit( editScope, "/plane", createIfNecessary = False ) ) + self.assertEqual( editScope["TransformEdits"]["Transform"]["enabled"].getInput(), editScope["TransformEdits"]["enabled"] ) self.assertEqual( editScope["out"].transform( "/plane" ), imath.M44f() ) edit.translate.setValue( imath.V3f( 2, 3, 4 ) ) self.assertEqual( editScope["out"].transform( "/plane" ), imath.M44f().translate( imath.V3f( 2, 3, 4 ) ) ) @@ -318,6 +320,7 @@ def testParameterEdits( self ) : self.assertEqual( edit["mode"].getValue(), Gaffer.TweakPlug.Mode.Replace ) self.assertEqual( edit["value"].getValue(), imath.Color3f( 0 ) ) self.assertEqual( edit["enabled"].getValue(), False ) + self.assertEqual( editScope["LightEdits"]["ShaderTweaks"]["enabled"].getInput(), editScope["LightEdits"]["enabled"] ) edit["enabled"].setValue( True ) edit["value"].setValue( imath.Color3f( 1 ) ) @@ -667,6 +670,7 @@ def testAttributeEdits( self ) : self.assertEqual( edit["mode"].getValue(), Gaffer.TweakPlug.Mode.Create ) self.assertEqual( edit["value"].getValue(), 1.0 ) self.assertEqual( edit["enabled"].getValue(), False ) + self.assertEqual( editScope["AttributeEdits"]["AttributeTweaks"]["enabled"].getInput(), editScope["AttributeEdits"]["enabled"] ) edit["enabled"].setValue( True ) edit["value"].setValue( 2.0 ) @@ -1084,6 +1088,9 @@ def testSetMembership( self ) : GafferScene.EditScopeAlgo.setSetMembership( scope, IECore.PathMatcher( ["/group/cube"] ), "A", membership.Added ) + self.assertEqual( scope["SetMembershipEdits"]["Set"]["enabled"].getInput(), scope["SetMembershipEdits"]["enabled"] ) + self.assertEqual( scope["SetMembershipEdits"]["Set1"]["enabled"].getInput(), scope["SetMembershipEdits"]["enabled"] ) + for path, set, status in ( ( "/group/plane", "A", membership.Unchanged ), ( "/group/plane", "B", membership.Unchanged ), @@ -1272,6 +1279,7 @@ def testOptionEdits( self ) : self.assertEqual( edit["mode"].getValue(), Gaffer.TweakPlug.Mode.Create ) self.assertEqual( edit["value"].getValue(), 10 ) self.assertEqual( edit["enabled"].getValue(), False ) + self.assertEqual( editScope["OptionEdits"]["OptionTweaks"]["enabled"].getInput(), editScope["OptionEdits"]["enabled"] ) edit["enabled"].setValue( True ) edit["value"].setValue( 20 ) diff --git a/src/GafferScene/EditScopeAlgo.cpp b/src/GafferScene/EditScopeAlgo.cpp index f037f2e154d..400e27584c3 100644 --- a/src/GafferScene/EditScopeAlgo.cpp +++ b/src/GafferScene/EditScopeAlgo.cpp @@ -684,7 +684,7 @@ SceneProcessorPtr attributeProcessor( const std::string &name ) result->addChild( attributeTweaks ); attributeTweaks->inPlug()->setInput( result->inPlug() ); attributeTweaks->filterPlug()->setInput( pathFilter->outPlug() ); - attributeTweaks->enabledPlug()->setValue( result->enabledPlug() ); + attributeTweaks->enabledPlug()->setInput( result->enabledPlug() ); attributeTweaks->localisePlug()->setValue( true ); attributeTweaks->ignoreMissingPlug()->setValue( true ); @@ -902,6 +902,7 @@ SceneProcessorPtr setMembershipProcessor() addSet->filterPlug()->setInput( addPathFilter->outPlug() ); addSet->namePlug()->setInput( spreadsheet->enabledRowNamesPlug() ); addSet->modePlug()->setValue( GafferScene::Set::Mode::Add ); + addSet->enabledPlug()->setInput( result->enabledPlug() ); addSet->setVariablePlug()->setValue( "setMembership:set" ); GafferScene::SetPtr removeSet = new GafferScene::Set(); @@ -910,6 +911,7 @@ SceneProcessorPtr setMembershipProcessor() removeSet->filterPlug()->setInput( removePathFilter->outPlug() ); removeSet->namePlug()->setInput( spreadsheet->enabledRowNamesPlug() ); removeSet->modePlug()->setValue( GafferScene::Set::Mode::Remove ); + removeSet->enabledPlug()->setInput( result->enabledPlug() ); removeSet->setVariablePlug()->setValue( "setMembership:set" ); auto rowsPlug = static_cast( @@ -1102,7 +1104,7 @@ SceneProcessorPtr optionProcessor( const std::string &name ) OptionTweaksPtr optionTweaks = new OptionTweaks; result->addChild( optionTweaks ); optionTweaks->inPlug()->setInput( result->inPlug() ); - optionTweaks->enabledPlug()->setValue( result->enabledPlug() ); + optionTweaks->enabledPlug()->setInput( result->enabledPlug() ); optionTweaks->ignoreMissingPlug()->setValue( true ); PlugAlgo::promoteWithName( optionTweaks->tweaksPlug(), "edits" );