// private method private void _PrepareEdgeIndices() { VMesh vmesh = VMesh.Instance; VVert[] allVVerts = vmesh.GetAllVVerts(); VEdge[] allVEdges = vmesh.GetAllVActiveEdges(); Dictionary <VVert, int> vert2idx = new Dictionary <VVert, int>(); for (int i = 0; i < allVVerts.Length; ++i) { VVert v = allVVerts[i]; vert2idx[v] = i; } m_EdgeIndices = new int[allVEdges.Length * 2]; for (int i = 0; i < allVEdges.Length; i++) { VEdge e = allVEdges[i]; VVert v0 = e.GetVVert(0); VVert v1 = e.GetVVert(1); int vidx0 = vert2idx[v0]; int vidx1 = vert2idx[v1]; m_EdgeIndices[i * 2] = vidx0; m_EdgeIndices[i * 2 + 1] = vidx1; } }
/// <summary> /// update the markers, if not dirty, do nothing; /// /// will retrieve info from Mesh & Selection & other related external data-structures /// </summary> public void UpdateMarkers() { if (!Dirty) { return; } //Mesh m = m_EditMesh.mesh; //Transform meshTr = m_EditMesh.transform; //Vector3[] verts = MeshCache.Instance.vertices; VMesh vmesh = VMesh.Instance; // vert positions VVert[] allVVerts = vmesh.GetAllVVerts(); int vcnt = allVVerts.Length; Vector3[] allVVertPos = new Vector3[vcnt]; for (int i = 0; i < vcnt; ++i) { allVVertPos[i] = allVVerts[i].GetWorldPos(); } // colors Color32[] colors = new Color32[vcnt]; for (int i = 0; i < vcnt; ++i) { VVert oneVVert = allVVerts[i]; if (m_Selection.IsSelectedVert(oneVVert.RepVert)) { colors[i] = SelectedVertColor; } else { colors[i] = NonSelectedVertColor; } } // set to mesh(vert) m_VertMarker.SetVerts(allVVertPos); //indices are set altogether with vertices m_VertMarker.SetColors(colors); // set to mesh(edge) m_EdgeMarker.SetVerts(allVVertPos); m_EdgeMarker.SetColors(colors); m_EdgeMarker.SetIndices(m_EdgeIndices); Dirty = false; }