* fix reference to non-existing slider.value
* convert values to string to avoid e+XX notation on large numbers
* fix number of decimals based on stepSize to avoid floating point approximations
* display and allow to upgrade incompatible nodes after project loading
* add a ToolButton in main toolbar to open CompatibilityManager in case of compatibility issues
CompatibilityNodes introduce a new notion of computability per node.
An uncomputed (and therefore uncomputable) CompatibilityNode blocks the computation of all its successor.
* update nodes computability on topology change (in addition to min/max depth)
* evaluate leaves computability to determine if the whole graph can be processed
handle this low-level operation engine side
* fix ListAttribute children links duplication
* handle CompatibilityNode duplication
* move corresponding unit test in test_graph.py
* [ui] add DuplicateNodeCommand
Improve node serialization/deserialization to be able to recreate the exact same node in the graph when loading a meshroom project, even if the corresponding node's description has changed or does not exist anymore. This allows to recover already computed data on disk, without being impacted by changed uids. CompatibilityNode also provides an on-demand upgrade system to turn into a Node that meets the current node description (if possible).
* new abstract class BaseNode, base class for Node and CompatibiliyNode
* Node: serialize everything needed to spawn a CompatibilityNode with precomputed outputs: inputs, uids, parallelization settings, unresolved internal folders and outputs
* node_factory: handles node deserialization and compatibility issues to create either a Node or a CompatibilityNode
* add compatibility unit tests
* add _computeUids internal method + store computed uids in a dedicated dict
* cache override:
* add optional cacheDir parameter on updateInternal method to override graph cache directory
* _buildCmdVars always update member variable '_cmdVars'
* CameraInit: ensure node does not belong to a graph and use updateInternals with temp cache directory
* save a header with versions metadata:
* meshroom release
* file format
* node types used in the graph
* save the graph in a dedicated "graph" category
* multiview: store pipeline version in graph header
* read: str.decode not available in py3; use io.open (available in py2/3) to specify encoding + errors handling
* write: direclty use json.dump to write viewpoints file