Example #1
0
 /// <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);
 }
Example #2
0
    /// <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();
        }
    }
Example #3
0
    /// <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);
    }