Switched Arnold import in ArnoldRender.py to a deferred import, to allow 3delight renders of scenes containing Arnold nodes
Added a Grade node to GafferImage
Added a Merge node to GafferImage
Added option to disable highlight in GafferUI.Button
Fixed exception caused by undefined subMenuDefinition in GafferUI.Menu
Catching all exception types in ErrorDialogue
Image nodes can now be disabled.
Renamed ExpressionNode to simply Expression.
Multithreaded the ImagePlug class.
Fixed ParameterValueWidget.create() so that it always returns either None or an instance of ParameterValueWidget. Previously it was returning PlugValueWidget instances where no specific ParameterValueWidget registration had been made.
Added PlugValueWidget setReadOnly/getReadOnly methods. These can be used to force a ui to be read only when the plug itself allows editing. Note that they can not be used to force editing when the plug itself is not editable.
Fixed BoolPlugValueWidget so that it correctly disables the checkbox if the plug is not writable for any reason, or is setReadOnly( True ) has been called.
PlugValueWidget.popupMenuSignal() now passes the PlugValueWidget itself to slots rather than the Plug as it did before. The plug can retrieved by calling plugValueWidget.getPlug().
ParameterValueWidget.popupMenuSignal() now passes the ParameterValueWidget itself to slots rather than the ParameterHandler as it did before. The parameter handler can be retrieved using parameterValueWidget.parameterHandler().
Added readOnly parameter to ParameterisedHolderNodeUI constructor.
ParameterValueWidget now requires that the topLevelWidget passed to the constructor is always an instance of PlugValueWidget. This is made available via a new plugValueWidget() method.
CompoundPlugValueWidget now requires that the result of _childPlugWidget either derives from PlugValueWidget or must have a plugValueWidget() method which returns a PlugValueWidget. This allows it to implement a new childPlugValueWidget() method which can be used to get access to the widget for a child plug. This is building towards a time when the NodeUI class provides a single method for retrieving the PlugValueWidget for a given plug.
Added ValuePlug::settable() method.
The VectorDataWidget now allows tooltips to be specified on a per-column basis using the columnToolTips argument to the constructor.
The CompoundVectorParameterValueWidget now constructs tooltips for the columns using the descriptions for the child parameters.
Added drag support to PathListingWidget and VectorDataWidget.
ViewportGadget now forwards the keyPress and keyRelease signals to its child.
GadgetWidget now allows the viewport to be changed using setViewportGadget(), and the previous viewportGadget() accessor has been renamed to getViewportGadget().
ParameterisedHolder now calls the parameterChanged() methods of the classes held by ClassParameters and ClassVectorParameters when their parameters change, rather than calling the method on the top-level parameterised class.
CompoundPlugs now accept input CompoundPlugs with more plugs than necessary, provided that the first N input child plugs match the N child plugs of the output. This allows Color3fPlugs to receive input directly from Color4fPlugs and arnold COLOR3 parameters to receive input from arnold COLOR4 outputs.
ArnoldOptions node now allows the specification of texture, shader and procedural searchpaths.
ArnoldRender node no longer specifies procedural location using a full path, allowing the procedural searchpath to be used if it has been set by an ArnoldOptions node.
Fixed crash when evaluating a ContextProcessor containing an entry with an empty name.
Added CompoundDataPlug::addOptionalMember(). This works as for addMember(), but adds an additional BoolPlug to allow the user to enable/disable that member. Both methods also take an additional parameter to specify the name of the plug used to represent the member.
ArnoldOptions and ArnoldAttributes nodes now create their plugs with sensible names, and allow options and attributes to be enabled and disabled - by default they are all disabled.
Added a File/Settings… menu option which opens a window for editing the plugs of the ScriptNode.
Gaffer::CompoundDataPlug now handles Color4fData.
Added a GafferScene::OpenGLAttributes node for controlling the drawing of objects in OpenGL.
Gaffer::TypedObjectPlug::setValue() now references the value directly rather than taking a copy.
Fixed bugs which prevented the ColorChooser working with colour types with an alpha channel.
Added a procedural app for visualising Cortex procedurals.
Plug::getInput() now returns a raw rather than reference counted pointer.
Added RenderableGadget::selectionBound() method which returns the bounding box of all selected objects.
Added View::framingBound() method which can be overridden by derived classes to control the framing behaviour when “F” is pressed.
SceneView now frames the current selection when “F” is pressed.
IndividualContainer::getChild() now returns raw pointers rather than smart pointers and uses a direct method of indexing.
Gadget::getToolTip() now takes a line in gadget space, allowing the tooltip to be varied with the position of the mouse.
RenderableGadget implements getToolTip() to display the name of the object under the mouse.
PathMatcher is now editable after construction, with addPath() and removePath() methods. Because of this the copy constructor also now performs a full deep copy which can be expensive.
Added PathMatcherData to make sharing PathMatchers easy, and to introduce the possibility of storing them in Plugs and Contexts. Copying is lazy-copy-on-write which can be used to avoid the expensive PathMatcher copy constructor where possible.
Added Context::names() method.
EditorWidget._updateFromContext() is now passed a set containing the names of items changed since the last call to _updateFromContext().
Fixed bug which caused PathListingWidget.selectionChangedSignal() to fire far too frequently.
Added a GraphLayout class, used in conjunction with the GraphGadget to perform automatic node connections and graph layout. This replaces ad-hoc code from NodeMenu.py. Still needs a decent fully automatic layout implementation for situations where the user doesn’t build the graph manually.
Added Plug::source() method.
Added GraphGadget::nodeGadgetAt() method.
GraphGadget now uses middle mouse drag for sending nodes to other widgets - left mouse drag is for moving nodes only. Shift drags can be used to add nodes to the current selection.
TabbedContainer switches tabs automatically on drag enter, to allow drags to access targets that aren’t current at the start of the drag.
Expression node now supports calls to context.getFrame() and context.get() in addition to context[“name”] dictionary style access. The get( name, defaultValue ) method is particularly useful when an expression may be executed in a context without the required entry.
ScriptEditor no longer displays the result of execution if the result is None.
Replaced RenderCamera node with more general StandardOptions node, which will define all the render globals type stuff that can be shared between renderers. Fixed bug in hash computation of GlobalsProcessor. Removed resolution from camera, putting it on the StandardOptions node instead.
CompoundPlugValueWidget can now display a summary of the plug values in the collapsible header. Used this to provide useful summaries for all options and attributes nodes in GafferScene. Renamed in OpenGLAttribute plug for consistency with the others.
Fixed SceneEditor bug which meant that items were only displayed if the first selected node contained them.
Added TransformPlugValueWidget which provides a useful summary of the transform in the collapsible header.
Added ScenePlug::fullAttributes() method which returns the full set of inherited attributes at a particular scene path.