コード例 #1
0
ファイル: Medium.cs プロジェクト: KostblLb/FatonSchemeEditor
        //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);
                }
            }
        }