// Use this for initialization void Start() { if (!sceneMesh) { sceneMesh = GameObject.Find("SceneMesh"); } if (!GameObject.Find("DrawMesh")) { drawMesh = new GameObject("DrawMesh"); } else { drawMesh = GameObject.Find("DrawMesh"); } // setting up mesh center GameObject obj = new GameObject("MeshCenter"); meshCenter = obj.AddComponent <MeshCenter>(); meshCenter.editingMeshes = new MeshFilter[50]; }
// Update is called once per frame void Update() { if (!meshCenter) { if (GameObject.Find("MeshCenter")) { meshCenter = GameObject.Find("MeshCenter").GetComponent <MeshCenter>(); } } if (controller.GetPressDown(SteamVR_Controller.ButtonMask.Grip)) { transform.parent.SendMessage("ToggleWireframe"); } if (controller.GetPressDown(SteamVR_Controller.ButtonMask.Trigger)) { foreach (MeshFilter editingMesh in meshCenter.editingMeshes) { if (editingMesh != null) { nearest = meshCenter.editingMeshes[0]; for (int i = 0; i < editingMesh.mesh.vertexCount; i++) { float dist = (editingMesh.transform.TransformPoint(editingMesh.mesh.vertices[i]) - transform.position).magnitude; if (dist < shortestDistinUpdate) { shortestDistinUpdate = dist; nearest = editingMesh; Debug.Log(nearest); } } } } shortestDistinUpdate = Mathf.Infinity; } foreach (MeshFilter editingMesh in meshCenter.editingMeshes) { if (editingMesh != null) { if (controller.GetPressDown(SteamVR_Controller.ButtonMask.Trigger)) { grab = true; lastPosition = transform.position; tempVertices = nearest.mesh.vertices; tempVertices2 = nearest.mesh.vertices; selectionWeight = new float[tempVertices.Length]; for (int i = 0; i < tempVertices.Length; i++) { float dist = (nearest.transform.TransformPoint(tempVertices[i]) - transform.position).magnitude; if (dist < brushSize) { Debug.Log(i); // the selection function can be defined here selectionWeight[i] = 1f; selectionWeight[i] = Mathf.Clamp(((brushSize - dist) / brushSize) * 2, 0, 1); } else { selectionWeight[i] = 0; } } } if (controller.GetPressUp(SteamVR_Controller.ButtonMask.Trigger)) { grab = false; if (editingMesh.GetComponent <MeshCollider>()) { editingMesh.GetComponent <MeshCollider>().sharedMesh = editingMesh.mesh; } } if (grab) // continue editing as long as grab is true { for (int i = 0; i < tempVertices.Length; i++) { tempVertices2[i] = tempVertices[i] + editingMesh.transform.InverseTransformVector(transform.position - lastPosition) * selectionWeight[i]; } nearest.mesh.vertices = tempVertices2; nearest.mesh.RecalculateNormals(); nearest.mesh.RecalculateBounds(); } } } }