Ejemplo n.º 1
0
        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);
        }