public override List <VariableNode> apply(List <VariableNode> variables, DecisionTreeBase tree) { Debug.Log("Lsys apply"); if (fromThis == null) { throw new System.Exception("transform from this cannot be null"); } if (condition()) { List <string> temp = new List <string>(); for (int i = 0; i < variables.Count; i++) { temp.Add(variables[i].name_); } var indices = MathXT.ListInListAt(temp, fromThis); List <VariableNode> toInstansiate = new List <VariableNode>(); try{ for (int i = 0; i < toThis.Count; i++) { toInstansiate.Add(tree.variables[toThis[i]]); } } catch { throw new System.Exception("a variable has not been defined"); } //done building variable nodes //now replace nodes end to start //add transformaaion code here for (int i = indices.Count - 1; i >= 0; i--) { variables.RemoveRange(i, fromThis.Count); variables.InsertRange(i, toInstansiate); } //throw new NotImplementedException(); return(variables); } else { return(variables); } }
/// <summary> /// Tesselate this mesh subdivides each triangle in the mesh into 4 triangles /// should not be run more than four times even on very simple meshes /// </summary> public void Tesselate() { try { var tempVerts = new Vector3[triangles.Length * 4]; var tempUv = new Vector2[triangles.Length * 4]; var tempTris = new int[triangles.Length * 4]; var tempNormals = new Vector3[triangles.Length * 4]; for (int i = 0; i < (triangles.Length / 3); i++) { tempTris[i * 12] = (i * 12); //triangles[i*3]; tempVerts[i * 12] = vertices[triangles[i * 3]]; tempNormals[i * 12] = normals[triangles[i * 3]]; tempUv[i * 12] = uv[triangles[i * 3]]; Vector2 uvM0 = MathXT.midPoint(uv[triangles[(i * 3) + 1]], uv[triangles[(i * 3) + 2]]); Vector2 uvM1 = MathXT.midPoint(uv[triangles[(i * 3)]], uv[triangles[(i * 3) + 2]]); Vector2 uvM2 = MathXT.midPoint(uv[triangles[(i * 3)]], uv[triangles[(i * 3) + 1]]); Vector3 m0 = MathXT.midPoint(vertices[triangles[(i * 3) + 2]], vertices[triangles[(i * 3) + 1]]); Vector3 m1 = MathXT.midPoint(vertices[triangles[(i * 3)]], vertices[triangles[(i * 3) + 2]]); Vector3 m2 = MathXT.midPoint(vertices[triangles[(i * 3)]], vertices[triangles[(i * 3) + 1]]); tempVerts[(i * 12) + 1] = m2; tempTris[(i * 12) + 1] = (i * 12) + 1; tempNormals[(i * 12) + 1] = normals[triangles[i * 3]]; tempUv[(i * 12) + 1] = uvM2; tempVerts[(i * 12) + 2] = m1; tempTris[(i * 12) + 2] = (i * 12) + 2; tempNormals[(i * 12) + 2] = normals[triangles[i * 3]]; tempUv[(i * 12) + 2] = uvM1; tempVerts[(i * 12) + 3] = vertices[triangles[(i * 3) + 1]]; tempTris[(i * 12) + 3] = (i * 12) + 3;//triangles[(i*3)+1]; tempNormals[(i * 12) + 3] = normals[triangles[(i * 3) + 1]]; tempUv[(i * 12) + 3] = uv[triangles[(i * 3) + 1]]; tempVerts[(i * 12) + 4] = m0; tempTris[(i * 12) + 4] = (i * 12) + 4; tempNormals[(i * 12) + 4] = normals[triangles[(i * 3) + 1]]; tempUv[(i * 12) + 4] = uvM0; tempVerts[(i * 12) + 5] = m2; tempTris[(i * 12) + 5] = (i * 12) + 5; tempNormals[(i * 12) + 5] = normals[triangles[(i * 3) + 1]]; tempUv[(i * 12) + 5] = uvM2; //triangle 3 tempVerts[(i * 12) + 6] = vertices[triangles[(i * 3) + 2]]; tempTris[(i * 12) + 6] = (i * 12) + 6;//triangles[(i*3)+2]; tempNormals[(i * 12) + 6] = normals[triangles[(i * 3) + 2]]; tempUv[(i * 12) + 6] = uv[triangles[(i * 3) + 2]]; tempVerts[(i * 12) + 7] = m1; tempTris[(i * 12) + 7] = (i * 12) + 7; tempNormals[(i * 12) + 7] = normals[triangles[(i * 3) + 2]]; tempUv[(i * 12) + 7] = uvM1; tempVerts[(i * 12) + 8] = m0; tempTris[(i * 12) + 8] = (i * 12) + 8; tempNormals[(i * 12) + 8] = normals[triangles[(i * 3) + 2]]; tempUv[(i * 12) + 8] = uvM0; //triangle 4 last one tempVerts[(i * 12) + 9] = m0; tempTris[(i * 12) + 9] = (i * 12) + 9; tempNormals[(i * 12) + 9] = normals[triangles[(i * 3) + 1]]; tempUv[(i * 12) + 9] = uvM0; tempVerts[(i * 12) + 10] = m1; tempTris[(i * 12) + 10] = (i * 12) + 10; tempNormals[(i * 12) + 10] = normals[triangles[(i * 3) + 2]]; tempUv[(i * 12) + 10] = uvM1; tempVerts[(i * 12) + 11] = m2; tempTris[(i * 12) + 11] = (i * 12) + 11; tempNormals[(i * 12) + 11] = normals[triangles[(i * 3)]]; tempUv[(i * 12) + 11] = uvM2; } triangles = tempTris; vertices = tempVerts; uv = tempUv; normals = tempNormals; } catch (System.Exception e) { UnityEngine.Debug.LogException(e); } }