示例#1
0
        /// <summary>
        /// Relation Input Pattern Match
        /// </summary>
        /// <param name="expr"></param>
        /// <param name="dict"></param>
        /// <param name="output"></param>
        /// <returns></returns>
        private bool EvalExprPatterns(Expr expr, Dictionary <PatternEnum, object> dict,
                                      out object output)
        {
            output = null;
            if (dict.Values.Count == 0)
            {
                return(false);
            }
            List <object> objs = dict.Values.ToList();
            //convert shapesymbol to shape
            var lst = new List <object>();

            foreach (object obj in objs)
            {
                var shapeSymbol = obj as ShapeSymbol;
                var eqGoal      = obj as EqGoal;

                bool relExist;
                if (shapeSymbol != null)
                {
                    relExist = RelationGraph.RelationExist(shapeSymbol);
                    if (relExist)
                    {
                        lst.Add(obj);
                    }
                }

                if (eqGoal != null)
                {
                    relExist = RelationGraph.RelationExist(eqGoal);
                    if (relExist)
                    {
                        lst.Add(obj);
                    }
                }
            }

            if (lst.Count == 0)
            {
                output = dict.Values.ToList()[0];
                return(true);
            }

            if (lst.Count == 1)
            {
                output = lst[0];
                return(true);
            }

            if (lst.Count != 0)
            {
                //TODO Non-deterministic selection
                output = lst[0];
            }
            return(true);
        }
示例#2
0
        /// <summary>
        /// Goal Input Patter Match
        /// </summary>
        /// <param name="expr"></param>
        /// <param name="goal"></param>
        /// <param name="output"></param>
        /// <param name="userInput"></param>
        /// <returns></returns>
        private bool EvalExprPatterns(Expr expr, EqGoal goal, out object output, bool userInput = false)
        {
            object obj = null;

            if (!userInput)
            {
                obj = RelationGraph.AddNode(goal);
            }
            output = new AGPropertyExpr(expr, goal);
            return(true);
        }
示例#3
0
        /// <summary>
        /// ShapeSymbol Input Pattern Match
        /// </summary>
        /// <param name="expr"></param>
        /// <param name="ss"></param>
        /// <param name="output"></param>
        /// <returns></returns>
        private bool EvalExprPatterns(Expr expr, ShapeSymbol ss, out object output, bool userInput = false)
        {
            if (!userInput)
            {
                RelationGraph.AddNode(ss);
            }

            //expr = ExprG.Generate(ss);
            output = new AGShapeExpr(expr, ss);
            return(true);
        }
示例#4
0
        private bool EvalExprPatterns(Expr expr, Equation eq, out object output, bool userInput = false)
        {
            object obj = null;

            if (!userInput)
            {
                obj = RelationGraph.AddNode(eq);
            }
            output = new AGEquationExpr(expr, eq);
            return(true);
        }
示例#5
0
        /// <summary>
        /// Relation Input Pattern Match
        /// </summary>
        /// <param name="expr"></param>
        /// <param name="str"></param>
        /// <param name="st"></param>
        /// <param name="query"></param>
        /// <param name="output"></param>
        /// <returns></returns>
        private bool EvalExprPatterns(Expr expr, Query query, out object output, bool userInput = false)
        {
            object obj = null;

            if (!userInput)
            {
                obj = RelationGraph.AddNode(query);
            }
            output = new AGQueryExpr(expr, query);
            return(obj != null);
            //return EvalNonDeterministic(expr, obj, out output);
        }
示例#6
0
 private void InternalValidate(Expr expr, ShapeSymbol ss, out object output)
 {
     output = false;
     foreach (var gn in RelationGraph.Nodes)
     {
         var sn = gn as ShapeNode;
         if (sn == null)
         {
             continue;
         }
         bool result = sn.ShapeSymbol.ApproximateMatch(ss);
         if (result)
         {
             output = true;
             return;
         }
     }
     output = RelationGraph.RelationExist(ss);
 }
示例#7
0
    /// <summary>
    /// 加载项目里所有文件的引用关系
    /// </summary>
    /// <param name="loadAssetCount">加载的Asset数量,小于0时,加载所有Asset。载所有Asset时间很长,为了方便测试,加这个参数</param>
    private IEnumerator LoadAllRelationsAndSaveRecordFile(int loadAssetCount = -1)
    {
        m_Loading         = true;
        m_LoadingProgress = 0;
        if (m_Graph == null)
        {
            m_Graph = new RelationGraph();
        }
        m_Graph.Nodes.Clear();
        string[] guids = AssetDatabase.FindAssets("");

        for (int guidIdx = 0; guidIdx < (loadAssetCount < 0 ? guids.Length : loadAssetCount); guidIdx++)
        {
            RelationGraph.Node node = new RelationGraph.Node();
            node.AssetPath = AssetDatabase.GUIDToAssetPath(guids[guidIdx]);
            if (!m_Graph.Nodes.ContainsKey(node.AssetPath))
            {
                m_Graph.Nodes.Add(node.AssetPath, node);
            }
        }
        yield return(null);

        int allCount    = m_Graph.Nodes.Count;
        int loadedCount = 0;

        foreach (KeyValuePair <string, RelationGraph.Node> kv in m_Graph.Nodes)
        {
            RelationGraph.Node node = kv.Value;
            node.Dependencies = AssetDatabase.GetDependencies(node.AssetPath, false);
            for (int dependencieIdx = 0; dependencieIdx < node.Dependencies.Length; dependencieIdx++)
            {
                string dependencie = node.Dependencies[dependencieIdx];
                if (m_Graph.Nodes.ContainsKey(dependencie))
                {
                    m_Graph.Nodes[dependencie].ReferencesCache.Add(node.AssetPath);
                }
            }

            if (++loadedCount % FRAME_LOAD_COUNT == 0)
            {
                m_LoadingProgress = (float)loadedCount / (float)allCount;
                yield return(null);

                Focus();
            }
        }
        yield return(null);

        // 将ReferencesCache转换到References
        foreach (KeyValuePair <string, RelationGraph.Node> kv in m_Graph.Nodes)
        {
            RelationGraph.Node node = kv.Value;

            node.References = node.ReferencesCache.ToArray();
        }

        try
        {
            SerializeUtility.WriteFile(m_RecordFilePath, m_Graph);
            EditorUtility.DisplayDialog("提示", "加载引用关系并保存到文件成功", "确定");
        }
        catch (Exception ex)
        {
            EditorUtility.DisplayDialog("提示", "加载引用关系并保存到文件失败\n" + ex.ToString(), "确定");
        }
        finally
        {
            m_Loading = false;
        }
    }
示例#8
0
 public Reasoner()
 {
     RelationGraph = new RelationGraph();
     _cache        = new ObservableCollection <KeyValuePair <object, object> >();
     _preCache     = new Dictionary <object, object>();
 }