public static void MergeSingle()
        {
            if (MeshOperations.operating)
            {
                return;
            }
            MeshOperations.operating = true;
            Call.Delay(() => MeshOperations.operating = false);
            var primary = Selection.gameObjects[0];
            var merged  = primary.GetMeshSource().GetMesh().Copy();
            var wrap    = merged.GetMeshWrap();

            foreach (var source in Selection.gameObjects.Skip(1))
            {
                var mesh    = source.GetMeshWrap();
                var matches = new Dictionary <int, int>();
                for (int indexA = 0; indexA < wrap.positions.Length; ++indexA)
                {
                    var vertexA = wrap.positions[indexA];
                    for (int indexB = 0; indexB < mesh.positions.Length; ++indexB)
                    {
                        var vertexB  = mesh.positions[indexB];
                        var distance = Vector3.Distance(vertexA, vertexB);
                        if (distance < MeshOperations.Get().distance)
                        {
                            //Log.Show("Difference is : " + distance);
                            //Log.Show(indexA + " matches " + indexB);
                            matches[indexA] = indexB;
                            break;
                        }
                    }
                }
            }
        }
 public void OnEnable()
 {
     MeshOperations.instance     = this;
     this.vertexMaterial         = new Material(Shader.Find("Zios/Utility/Draw Vertexes"));
     this.distanceMaterial       = new Material(Shader.Find("Zios/Utility/Draw Vertexes Outlined"));
     this.lockSelection          = false;
     Selection.selectionChanged += this.RefreshSceneView;
     EditorApplication.update   += this.CheckChanged;
     //EditorApplication.hierarchyWindowChanged += this.Reset;
     this.RefreshSceneView(true);
 }