public static bool AllMeshesHasCommonEdges(List <GameObject> objects) { bool pass = true; if (objects.Count > 1) { List <bool> commonEdges = new List <bool>(objects.Count); for (int i = 0; i < objects.Count; i++) { bool commonEdgeForThisMesh = false; for (int j = 0; j < objects.Count; j++) { if (i != j && EdgeHelper.MeshesHaveCommondge(objects[i], objects[j]) == true) { commonEdgeForThisMesh = true; } } commonEdges.Add(commonEdgeForThisMesh); } pass = !commonEdges.Contains(false); } return(pass); }
private bool CheckEdges(EdgeHelper helper) { foreach (EdgeHelper i in edges) { if (i.One == helper.One && i.Two == helper.Two) { return(false); } } return(true); }
///<summary> ///Finding the outline of a 2D mesh ///</summary> private static List <Vector2> Outline2DArray(Mesh mesh) { List <Vector2> vr = new List <Vector2>(); var boundaryPath = EdgeHelper.GetEdges(mesh.triangles, mesh.vertices).FindBoundary().SortEdges(); //Debug.Log("boundary path count " +boundaryPath.Count()); Vector3[] vertices = mesh.vertices; for (int i = 0; i < boundaryPath.Count; i++) { Vector3 pos = vertices[boundaryPath[i].v1]; vr.Add(new Vector2(pos.x, pos.z)); //Debug.Log(vertices[boundaryPath[i].v1]); } //Debug.Log("vector2d count " + vr.Count()); return(vr); }
private void Add(Work work) { EdgeHelper edge = new EdgeHelper(); foreach (Work task in work.succesors) { edge.One = work.Id; edge.Two = task.Id; if (CheckEdges(edge)) { edges.Add(edge); edge = new EdgeHelper(); } Add(task); } }
/// <summary> /// 连接 /// </summary> /// <param name="configName"></param> private void Connect(string configName) { _edgeConfig = ConfigManager.GetEdgeConfig(configName); if (_edgeConfig != null) { var excuteInfo = EdgeHelper.GetExcuteInfo(_edgeConfig); Trace.WriteLine($"正在执行:{excuteInfo.FileName} {excuteInfo.Args}"); _edgeProcess = ProcessHelper.StartProcess(excuteInfo, (a, b) => { Trace.WriteLine(b.Data); }); _isStarted = true; RefreshStatus(); } }
/// <summary> /// Assign the edge types to the rooms /// </summary> private static void EdgeTypes() { GameObject[] rooms = GameObject.FindGameObjectsWithTag("room"); // external edge -> True for (int i = 0; i < rooms.Length; i++) { rooms[i].GetComponent <EG_room>().BoundaryEdges = EdgeHelper.GetEdges(rooms[i].GetComponent <MeshFilter>().mesh.triangles, rooms[i].GetComponent <MeshFilter>().mesh.vertices).FindBoundary().SortEdges(); } for (int i = 0; i < rooms.Length; i++) { List <bool> edgeTypes_i = new List <bool>(); foreach (var edge_i in rooms[i].GetComponent <EG_room>().BoundaryEdges) { bool intrnl = false; for (int j = 0; j < rooms.Length; j++) { if (j != i) { foreach (var edge_j in rooms[j].GetComponent <EG_room>().BoundaryEdges) { if (edge_i.v1x == edge_j.v1x && edge_i.v1z == edge_j.v1z && edge_i.v2x == edge_j.v2x && edge_i.v2z == edge_j.v2z || (edge_i.v1x == edge_j.v2x && edge_i.v1z == edge_j.v2z && edge_i.v2x == edge_j.v1x && edge_i.v2z == edge_j.v1z)) { intrnl = true; break; } } } } //Debug.Log("intrnl " + intrnl); edgeTypes_i.Add(!intrnl); } rooms[i].GetComponent <EG_room>().Edges = edgeTypes_i; FindObjectOfType <Validation>().CompareAreas(rooms[i]); } }