Beispiel #1
0
 /// <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);
 }