/// <summary> /// Subdivide the HalfEdgeMesh. /// </summary> /// <param name="type">The Subdivision Algorithm Type.</param> /// <param name="steps">How many Subdivision Steps should be performed.</param> /// <returns>New subdivided HalfEdgeMesh.</returns> public HalfEdgeMesh Subdivide(SubdivisionType type = SubdivisionType.Default, int steps = 1) { ///TODO implement return(this); }
private void GUIWindow(int windowID) { GUI.DragWindow (new Rect (0, 0, 10000, 20)); GUI.color = Color.white; Rect tooltipBox = GUILayoutUtility.GetRect (100f, 200f, 18f, 18f); GUILayout.Space (tooltipBox.height); EditorGUI.BeginChangeCheck (); selectiontype = EditorGUILayout.Popup (selectiontype, new string[3]{"Single Select (Shift-1)", "Box Select (Shift-2)", "Paint Select (Shift-3)"}); if (EditorGUI.EndChangeCheck ()) { PlayerPrefs.SetInt ("meshtk-selection", selectiontype); } if (GUILayout.Button (new GUIContent("Select All", "Select All (Shift-a)"), EditorStyles.miniButton)){ for(int i=0;i<meshtriangles.Length/3;i++){ selectedTriangles.Add (i); } UpdateSelectedVertices(); UpdateSelectionCenter(); } if (GUILayout.Button ("Flip Selection", EditorStyles.miniButton)) { TriangleTools.Flip (ejmmesh.SharedMesh, selectedTriangles.ToArray()); ReloadIfChanged(); } //EXTRUDE GUILayout.BeginHorizontal(); if (GUILayout.Button (new GUIContent("Extrude", "Extrude Triangles (Shift-e)"), EditorStyles.miniButtonLeft)) { TriangleTools.Extrude(ejmmesh.SharedMesh, selectedTriangles.ToArray (), extrusiondistance); ReloadData(); } showExtrusionSettings = GUILayout.Toggle (showExtrusionSettings, "+", EditorStyles.miniButtonRight, GUILayout.Width(30f)); GUILayout.EndHorizontal(); if (showExtrusionSettings){ extrusiondistance = EditorGUILayout.FloatField(extrusiondistance); } //SUBDIVIDE GUILayout.BeginHorizontal(); if (GUILayout.Button (new GUIContent("Subdivide", "Subdivide Triangles (Shift-s)"), EditorStyles.miniButtonLeft)) { if (subdividetype==SubdivisionType.EDGE){ TriangleTools.SubdivideByEdge(ejmmesh.SharedMesh, selectedTriangles.ToArray(), autoWeld); } else { TriangleTools.SubdivideByCenter(ejmmesh.SharedMesh, selectedTriangles.ToArray ()); } ReloadData(); } showSubdivideSettings = GUILayout.Toggle (showSubdivideSettings, "+", EditorStyles.miniButtonRight, GUILayout.Width(30f)); GUILayout.EndHorizontal(); if (showSubdivideSettings){ subdividetype = (SubdivisionType)EditorGUILayout.EnumPopup (subdividetype); autoWeld = GUILayout.Toggle (autoWeld, "Auto-Weld"); } //SET MATERIAL GUILayout.BeginHorizontal (); if (GUILayout.Button ("Set Material", EditorStyles.miniButtonLeft)) { Material[] allMaterials = new Material[ejmmesh.SharedMesh.subMeshCount]; System.Array.Copy(ejmmesh.mRenderer.sharedMaterials, allMaterials, Mathf.Min(ejmmesh.mRenderer.sharedMaterials.Length, ejmmesh.SharedMesh.subMeshCount)); int start=0; int end; for (int i=0;i<ejmmesh.SharedMesh.subMeshCount;i++){ end = start+ejmmesh.SharedMesh.GetTriangles(i).Length; if (System.Array.FindIndex (selectedVertices.ToArray(), p => start<=p&&p<end) !=-1){ allMaterials[i] = detachMaterial; } start = end; } ejmmesh.mRenderer.sharedMaterials = allMaterials; ReloadIfChanged(); } showMaterialSettings = GUILayout.Toggle (showMaterialSettings, "+", EditorStyles.miniButtonRight, GUILayout.Width(30f)); GUILayout.EndHorizontal (); if (showMaterialSettings){ try { detachMaterial = EditorGUILayout.ObjectField(detachMaterial, typeof(Material), true) as Material; } catch (ExitGUIException) {} catch (UnityException) {} } //DETACH GUILayout.BeginHorizontal (); if (GUILayout.Button ("Detach Selection", EditorStyles.miniButtonLeft)) { if (detachMethod==0){ MeshTK.TriangleTools.Detach(ejmmesh.SharedMesh, selectedTriangles.ToArray(), false); } else if (detachMethod==1){ TriangleTools.Detach (ejmmesh.SharedMesh, selectedTriangles.ToArray(), true); Material[] allMaterials = new Material[ejmmesh.SharedMesh.subMeshCount]; System.Array.Copy(ejmmesh.mRenderer.sharedMaterials, allMaterials, Mathf.Min(ejmmesh.mRenderer.sharedMaterials.Length, ejmmesh.SharedMesh.subMeshCount)); allMaterials[ejmmesh.SharedMesh.subMeshCount-1] = detachMaterial; ejmmesh.mRenderer.sharedMaterials = allMaterials; } else { GameObject obj = TriangleTools.DetachToNewObject(ref ejmmesh, selectedTriangles); obj.GetComponent<Renderer>().sharedMaterials = ejmmesh.mRenderer.sharedMaterials; obj.transform.position = ejmmesh.targettransform.position; obj.transform.rotation = ejmmesh.targettransform.rotation; obj.transform.localScale = ejmmesh.targettransform.lossyScale; } ReloadIfChanged(); } showDetachSettings = GUILayout.Toggle (showDetachSettings, "+", EditorStyles.miniButtonRight, GUILayout.Width(30f)); GUILayout.EndHorizontal (); if (showDetachSettings){ detachMethod = EditorGUILayout.Popup(detachMethod, new string[3]{"Detach Verts", "Detach Submesh", "Detach Object"}); if (detachMethod>0){ try { detachMaterial = EditorGUILayout.ObjectField(detachMaterial, typeof(Material), true) as Material; } catch (ExitGUIException) {} catch (UnityException) {} } } //DELETE GUILayout.BeginHorizontal (); if (GUILayout.Button (new GUIContent("Delete Selected", "Delete Selected (Shift-d)"), EditorStyles.miniButtonLeft)) { TriangleTools.Remove (ejmmesh.SharedMesh, selectedTriangles.ToArray ()); if(removeUnusedVerts){ VertexTools.RemoveUnused(ejmmesh.SharedMesh); } ReloadData(); } showDeleteSettings = GUILayout.Toggle (showDeleteSettings, "+", EditorStyles.miniButtonRight, GUILayout.Width(30f)); GUILayout.EndHorizontal (); if (showDeleteSettings) { removeUnusedVerts = GUILayout.Toggle (removeUnusedVerts, "Remove Verts"); } EditorGUI.HelpBox (tooltipBox, string.IsNullOrEmpty (GUI.tooltip) ? "Current tool: " + Tools.current.ToString () : GUI.tooltip, MessageType.None); }