/// <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); }
/// <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); }
/// <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); }
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); }
/// <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); }
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); }
/// <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; } }
public Reasoner() { RelationGraph = new RelationGraph(); _cache = new ObservableCollection <KeyValuePair <object, object> >(); _preCache = new Dictionary <object, object>(); }