protected override void ExecuteCommand() { _oldState = _selectionManager.GetStateCopy(); // Clone the object _newObject = _inputNode.Clone() as ISelectable; // Add to the scene if (!_deleteOriginal) { _newObject.Name += "_copy"; } _newObject.Parent.AddObject(_newObject); var selectedFaceIndecies = new List <ushort>(); var indexBuffer = _newObject.Geometry.GetIndexBuffer(); foreach (var face in _facesToDelete) { selectedFaceIndecies.Add(indexBuffer[face]); selectedFaceIndecies.Add(indexBuffer[face + 1]); selectedFaceIndecies.Add(indexBuffer[face + 2]); } _newObject.Geometry.RemoveUnusedVertexes(selectedFaceIndecies.ToArray()); if (_deleteOriginal) { _inputNode.Parent.RemoveObject(_inputNode); } // Object state var objectState = new ObjectSelectionState(); objectState.ModifySelection(_newObject, false); _selectionManager.SetState(objectState); }