//connect nodes after opening existing project public static void LoadViewFromScheme(NetworkView nv, Scheme scheme) { var nodes = nv.Nodes; foreach (Result res in scheme.Results) { var dstNode = nodes.First(x => x.Tag == res); foreach (var rulePair in res.Rules) { var rule = rulePair.Value; if (rule.Reference == null) { continue; } var srcNode = nodes.First(x => x.Tag == rule.Reference); var srcConn = srcNode.Connectors.First(x => ((rule.Attribute.AttrType == OntologyNode.Attribute.AttributeType.OBJECT && x.Tag == rule.Reference) || x.Tag == rule.InputAttribute) && x.Mode == Connector.ConnectorMode.Output); var dstConn = dstNode.Connectors.First(x => x.Tag == rule.Attribute); nv.AddConnection(srcConn, dstConn, false); } if (res.EditObject != null) { var srcNode = nodes.First(x => x.Tag == res.EditObject); var srcConn = srcNode.Connectors.First(x => x.Tag == res.EditObject && x.Mode == Connector.ConnectorMode.Output); var dstConn = dstNode.Connectors.First(x => x.Tag == res && x.Mode == Connector.ConnectorMode.Input); nv.AddConnection(srcConn, dstConn, false); } } foreach (Functor fun in scheme.Functors) { var dstNode = nodes.First(x => x.Tag == fun); foreach (var input in fun.Inputs) { var srcNode = nodes.First(x => x.Tag == input.source); var srcConn = srcNode.Connectors.First(x => (x.Tag == input.value) && x.Mode == Connector.ConnectorMode.Output); var dstConn = dstNode.Connectors.First(x => x.Tag == input); nv.AddConnection(srcConn, dstConn, false); } } foreach (var condition in scheme.Conditions) { var dstNode = nodes.First(x => x.Tag == condition); Argument[] args = { condition.Arg1, condition.Arg2 }; foreach (var arg in args) { var argNode = nodes.First(x => x.Tag == arg); var srcConn = argNode.HeadConnector; var dstConn = dstNode.Info.Sections.First(x => x.Data == arg).Input; nv.AddConnection(srcConn, dstConn, false); } } }