/// <summary> /// Generate the VertexHolders for every Vertex in every face. The array has overlaping VertexHolders. /// </summary> /// <returns>Array with overlaping VertexHolders.</returns> public virtual PRVertexHolder[] GenerateVertexHolders() { PRVertexHolder[] vertexColl = new PRVertexHolder[GeoMesh.vertexCount]; for (int i = 0; i < GeoMesh.vertexCount; i++) { PRVertexHolder vertexHolder = new PRVertexHolder(GeoMesh.vertices[i], i, this.gameObject); vertexColl[i] = vertexHolder; } return(vertexColl); }
/// <summary> /// Paste the transformations on the original object to the this duplicated object. /// </summary> /// <param name="vertexHolderColl"> The list of the original object vertexHolders. </param> public void PasteAllGeoProperties(List <PRVertexHolder> vertexHolderColl) { for (int j = 0; j < vertexHolderColl.Count; j++) { PRVertexHolder vertHolder = vertexHolderColl[j]; PRVertex vertCO = PR_VERTEX_GO.GetComponent <ParentVertex>().GEO_VERTEX_COLL_CO[j]; // Update the vertexHolder. vertCO.VertexHolder = vertHolder; Vector3[] meshVertices = GeoMesh.vertices; // Update Mesh vertices. for (int i = 0; i < vertHolder.SameVIndexColl.Count; i++) { meshVertices[vertHolder.SameVIndexColl[i]] = vertHolder.V; } GeoMesh.vertices = meshVertices; GeoMesh.RecalculateBounds(); // Update VertexGO position. vertCO.UpdateVertexPosition(); } }
/// <summary> /// Clean up the duplicate vertices that share the same coordinates and Instantiate the Vertex prefabs. /// </summary> /// <param name="vertexColl"> Dirty array with vertex holders. </param> /// <returns> Clean array of Vertex holders. </returns> public PRVertexHolder[] CreateUniqVertexPrefabs(PRVertexHolder[] vertexColl) { // Group the vertices according to the position. For the cube I will have groups of 4 overlaping vertices. var result = vertexColl.GroupBy(vertex => vertex.V); PRVertexHolder[] cleanVertexColl = new PRVertexHolder[result.Count()]; for (int i = 0; i < result.Count(); i++) { // Get only the first elemnt from each group and assign it to the clean array. cleanVertexColl[i] = result.ToArray()[i].ToArray()[0]; // Create the objects. GameObject obj = GameObject.Instantiate(VertexPref, transform.TransformPoint(cleanVertexColl[i].V), Quaternion.identity, PR_VERTEX_GO.transform); obj.name = "Vertex" + i; obj.SetActive(true); // Setup the PRVertex file PRVertex vertexCO = obj.GetComponent <PRVertex>(); vertexCO.VertexHolder = cleanVertexColl[i]; } return(cleanVertexColl); }