public VertGroup(VertGroup selectedGroup) { name = selectedGroup.name; vertHandles = new List <GameObject>(); color = selectedGroup.color; foreach (GameObject vertHandle in selectedGroup.vertHandles) { vertHandles.Add(vertHandle); VertHandleGizmo gizmo = vertHandle.GetComponent <VertHandleGizmo>(); gizmo.groups.Add(this); } }
void Start() { mesh = GetComponent <MeshFilter>().sharedMesh; verts = GetUniqueVerticies(mesh.vertices); if (handles == null) { foreach (Vector3 vert in verts) { vertPos = transform.TransformPoint(vert); GameObject handle = new GameObject("VertHandle"); handle.transform.position = vertPos; handle.transform.parent = transform; VertHandleGizmo gizmo = handle.AddComponent <VertHandleGizmo>(); gizmo.parent = this; } } }
void Update() { if (destroy) { destroy = false; DestroyImmediate(this); return; } if (groupSelected) { groupSelected = false; bool newGroup = true; //for all existing groups foreach (VertGroup group in groups) { //if this group has the same name as what's in the selected group if (group.name == selectedHandles.name) { //this group already exists newGroup = false; //add any new edges to the group foreach (GameObject vertHandle in selectedHandles.vertHandles) { if (!group.vertHandles.Contains(vertHandle)) { group.vertHandles.Add(vertHandle); } //make the edge know about the group it now belongs to VertHandleGizmo gizmo = vertHandle.GetComponent <VertHandleGizmo>(); if (!gizmo.HasGroup(group)) { gizmo.groups.Add(group); } } //set the group color group.color = selectedHandles.color; } } if (newGroup) { VertGroup g = new VertGroup(selectedHandles);// selectedHandles.name, selectedHandles.edges, selectedHandles.color); groups.Add(g); } } if (removeFromGroup) { removeFromGroup = false; foreach (VertGroup group in groups) { if (group.name == selectedHandles.name) { foreach (GameObject vertHandle in selectedHandles.vertHandles) { if (group.vertHandles.Contains(vertHandle)) { group.vertHandles.Remove(vertHandle); VertHandleGizmo gizmo = vertHandle.GetComponent <VertHandleGizmo>(); if (gizmo.groups.Contains(group)) { gizmo.groups.Remove(group); } } } } } CleanGroups(); } if (removeFromAll) { removeFromAll = false; foreach (VertGroup group in groups) { foreach (GameObject vertHandle in selectedHandles.vertHandles) { if (group.vertHandles.Contains(vertHandle)) { group.vertHandles.Remove(vertHandle); VertHandleGizmo gizmo = vertHandle.GetComponent <VertHandleGizmo>(); if (gizmo.groups.Contains(group)) { gizmo.groups.Remove(group); } } } } CleanGroups(); } for (int i = 0; i < verts.Length; i++) { verts[i] = handles[i].transform.localPosition; } mesh.vertices = verts; mesh.RecalculateBounds(); mesh.RecalculateNormals(); }