protected override void ExecuteCommand()
        {
            _originalSelectionState = _selectionManager.GetStateCopy();

            using (new WaitCursor())
            {
                var meshService = new MeshSplitterService();
                var splitMeshes = meshService.SplitMesh(_objectToSplit.Geometry);
                _logger.Here().Information($"{splitMeshes.Count} meshes generated from splitting");

                var parent = _objectToSplit.Parent;
                if (parent is GroupNode groupNode && groupNode.IsUngroupable)
                {
                    parent = parent.Parent;
                }
                _newGroupNode = (GroupNode)parent.AddObject(new GroupNode(_objectToSplit.Name + "_Collection")
                {
                    IsSelectable = true, IsUngroupable = true, IsLockable = true
                });

                int counter = 0;
                List <Rmv2MeshNode> createdMeshes = new List <Rmv2MeshNode>();
                foreach (var mesh in splitMeshes)
                {
                    var hack             = _objectToSplit as Rmv2MeshNode;
                    var originalRmvModel = hack.MeshModel;

                    var context  = new GeometryGraphicsContext(_resourceLib.GraphicsDevice);
                    var meshNode = new Rmv2MeshNode(hack.MeshModel.Clone(), context, _resourceLib, hack.AnimationPlayer, mesh);
                    meshNode.Name = $"{_objectToSplit.Name}_submesh_{counter++}";
                    createdMeshes.Add(meshNode);
                    _newGroupNode.AddObject(meshNode);
                }

                _objectToSplit.Parent.RemoveObject(_objectToSplit as SceneNode);

                var newState = (ObjectSelectionState)_selectionManager.CreateSelectionSate(GeometrySelectionMode.Object);
                foreach (var node in createdMeshes)
                {
                    newState.ModifySelection(node, false);
                }
            }
        }
        public void GrowSelection(FaceSelectionState faceSelectionState)
        {
            var selectedFaceIndecies = new List <ushort>();
            var indexBuffer          = faceSelectionState.RenderObject.Geometry.GetIndexBuffer();

            foreach (var face in faceSelectionState.SelectedFaces)
            {
                selectedFaceIndecies.Add(indexBuffer[face]);
                selectedFaceIndecies.Add(indexBuffer[face + 1]);
                selectedFaceIndecies.Add(indexBuffer[face + 2]);
            }

            var meshService  = new MeshSplitterService();
            var newSelection = meshService.GrowSelection(faceSelectionState.RenderObject.Geometry, selectedFaceIndecies);

            var selectCmd = new FaceSelectionCommand(newSelection);

            _commandManager.ExecuteCommand(selectCmd);
        }