Added slight speedup for Instancer name computation.

Now allocates the right amount of memory upfront instead of continually resizing the array. This gives ~10% speedup in a simple benchmark.
Improved Instancer bound hash computation.

It now correctly combines the hashes for each instance, rather than actually computing the bound prematurely. This gives an approximately 15% speedup in a simple benchmark.
Removed unnecessary memory allocation from Instancer::instanceContext().

This knocks nearly 20% off the runtime for the hashing of the bounds, and should have similar benefits elsewhere.
Removed unnecessary Context copying from Instancer::hashBranchBound().

This further doubles the speed of this method.
Knocked a further 10% off Instancer bound hashing.

Since we already know the instance index in this one case, there is no need to go getting it from a string->int conversion.
Optimised Instancer::computeBranchBound().

This now uses the same method as is used in hashBranchBound(), reusing a single context for each evaluation of the input. This halves the execution time for bound computation.
Parallelised Instancer::hashBranchTransform().

Because the computation of bounds generally occurs before traversing to the children, the hashing of the union of the bounds of all the instances actually represents a serial bottleneck, which can be quite large when there are a large number of instances. Parallelising this operation reduces the bottleneck, and stops cores sitting idly waiting for work to do.

This gives ~1.8x speedup on a 2 core laptop and ~5.6x speedup on a 6 core workstation.
Parallelised Instancer::computeBranchBound().

This gives similar performance improvements to the previous commit.
Added an automatic __cameras set created by the Camera node.

This will be useful for providing drop-down menus for selecting cameras, and for outputting multiple named cameras to renderers that support them.
Implemented camera edits for IPR rendering.

Fixes #190.
Moved ScenePlugBinding implementation details to anonymous namespace.
Registered automatic from-python conversions for ScenePlug::ScenePath.

This replaces the need to manually wrap any functions taking a ScenePath, making the bindings simpler. The conversion from InternedStringVectorData is also superior to the former conversion because it doesn't allocate a copy - it simply references the data already present.

Removed objectToScenePath() because it is no longer needed.
Added exists() method to SceneAlgo.

This can be used to query whether or not a particular location exists within a scene.
Improved reporting of invalid cameras.

Fixes #371.
Stopped exceptions in InteractiveRenderer breaking edit blocks.

If we'd called editBegin(), and an exception was thrown before we called editEnd(), we'd never close the block. Using the new IECore::EditBlock makes sure this can never happen.

This requires ImageEngine/cortex#303 to be merged first.
Prevented IPR exceptions propagating to the UI.

Fixes #898.
Added unit test for InteractiveRenderManRender camera edits.
Fixed ScriptEditor to execute code in the right context.

Prior to this it was executing without a specific context, and getting the useless default one. It now uses the one set on the editor, which by default is ScriptNode.context() and is shared with all the other editors.
Merge pull request #885 from johnhaddon/cameraIPR

Camera IPR
Merge pull request #899 from johnhaddon/scriptEditorContext

Fixed ScriptEditor to execute code in the right context.