public MeshOutline Init() { if (inited ) return this; inited = true; mf = GetComponentInChildren<MeshFilter>(); if (mf == null) return this; var m = mf.sharedMesh; vert = mf.sharedMesh.vertices; if (!res.outlines.TryGetValue(name, out outline)) { res.outlines[name] = outline = new List<int>(); //res.outlineDict.Add(new OutlineDict() { Name = name, outlineValues = outline }); var cnt = new Dictionary<Vector3, MyStruct>(); for (int i = 0; i < m.triangles.Length; i++) { var vector3 = m.vertices[m.triangles[i]]; MyStruct myStruct; if (!cnt.TryGetValue(vector3, out myStruct)) myStruct = cnt[vector3] = new MyStruct(); myStruct.id.Add(m.triangles[i]); myStruct.cnt++; } foreach (var a in cnt) if (a.Value.cnt < 4) outline.AddRange(a.Value.id); } meshFilter = new MeshFilter2() { m = mf, verts = mf.sharedMesh.vertices }; foreach (int b in this.outline) { if (meshFilter.verts.Length <= b) continue; meshFilter.myVerts.Add(new MyVert() { m = meshFilter, i = b }); } return this; }
public MeshOutline Init() { if (inited) { return(this); } inited = true; mf = GetComponentInChildren <MeshFilter>(); if (mf == null) { return(this); } var m = mf.sharedMesh; vert = mf.sharedMesh.vertices; if (!res.outlines.TryGetValue(name, out outline)) { res.outlines[name] = outline = new List <int>(); //res.outlineDict.Add(new OutlineDict() { Name = name, outlineValues = outline }); var cnt = new Dictionary <Vector3, MyStruct>(); for (int i = 0; i < m.triangles.Length; i++) { var vector3 = m.vertices[m.triangles[i]]; MyStruct myStruct; if (!cnt.TryGetValue(vector3, out myStruct)) { myStruct = cnt[vector3] = new MyStruct(); } myStruct.id.Add(m.triangles[i]); myStruct.cnt++; } foreach (var a in cnt) { if (a.Value.cnt < 4) { outline.AddRange(a.Value.id); } } } meshFilter = new MeshFilter2() { m = mf, verts = mf.sharedMesh.vertices }; foreach (int b in this.outline) { if (meshFilter.verts.Length <= b) { continue; } meshFilter.myVerts.Add(new MyVert() { m = meshFilter, i = b }); } return(this); }